すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:PAIでQwenモデルを開発する-Lingjun AI Computing Service

最終更新日:Jul 22, 2024

このトピックは、基礎モデル開発者がPAI-Lingjun AI Computing Serviceの使用を開始し、Qwen-7B、Qwen-14B、Qwen-72Bの基礎モデルを開発できるよう支援することを目的としています。 開発プロセスには、分散トレーニング、微調整、オフライン推論、およびオンライン展開が含まれます。 この例では、Qwen-7Bモデルを使用して、PAI-Lingjun AI Computing ServiceでQwenモデルを開発するためのベストプラクティスを説明します。

前提条件

この例では、Qwen-7B V1.1.4が使用される。 開始する前に、次の前提条件が満たされていることを確認してください。

  • Data Science Workshop (DSW) 、Deep Learning Containers (DLC) 、Elastic Algorithm Service (EAS) など、AIのプラットフォーム (PAI) が活性化されました。 デフォルトのワークスペースが作成されます。 詳細については、「PAIの有効化とデフォルトワークスペースの作成」をご参照ください。

  • Lingjunリソースが購入され、購入されたLingjunリソースに対してリソースクォータが作成されます。 次の表に、さまざまな数のモデルパラメーターでサポートされるリソース仕様を示します。 モデルパラメーターの実際の数に基づいて、適切なリソース仕様を選択します。 Lingjunリソースのノード仕様の詳細については、「Lingjunリソースの課金 (Serverless Edition) 」トピックの「ノードの料金」セクションを参照してください。 詳細については、「リソースグループの作成とLingjunリソースの購入」および「Lingjunリソースクォータ」をご参照ください。

    モデルパラメータの数

    フルパラメータのトレーニングリソース

    最小推論リソース

    モデル平行度メガトロンベースのトレーニング

    70億

    8個のgu7xf GPUまたは8個のgu7ef GPU

    1つのNVIDIA V100 GPU (32 GBメモリ) または1つのNVIDIA A10 GPU (24 GBメモリ)

    TP1およびPP1

    140億

    8個のgu7xf GPUまたは8個のgu7ef GPU

    2つのNVIDIA V100 GPU (32 GBメモリ) または2つのNVIDIA A10 GPU (24 GBメモリ)

    TP2およびPP1

    720億

    4つのサーバー、それぞれ8つのgu7xf GPUまたは8つのgu7ef GPU

    6つのNVIDIA V100 GPU (32 GBメモリ) または2つのgu7xf GPU

    TP8およびPP2

  • データセットは、Apsara file Storage NASの汎用NASファイルシステムに基づいて作成され、トレーニングに必要なファイルと結果ファイルを保存します。 デフォルトのマウントディレクトリは /mnt/data/nasです。 詳細については、「データセットの作成と管理」をご参照ください。

  • DSWインスタンスは、次の主要なパラメーターに基づいて作成されます。 詳細については、「DSWインスタンスの作成」をご参照ください。

    • リソースクォータ: 購入したLingjunリソースに対して作成されたリソースクォータを選択します。

    • インスタンスタイプ: 次のリソース仕様を設定します。

      • vCPU: 90

      • メモリ (GiB): 1024

      • 共有メモリ (GiB): 1024

      • GPU: 少なくとも8

    • マウント設定: [追加] をクリックし、作成したデータセットを選択して、デフォルトのマウントディレクトリを指定します。

    • 画像: [画像アドレス] をクリックし、次の画像URLを入力します: pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm

  • RAMユーザーとしてこのベストプラクティスの操作を実行する場合、RAMユーザーにはDSW、DLC、およびEASに対する必要な権限が付与されます。 詳細については、「DSWの使用に必要なアクセス許可の付与」、「DLCの使用に必要なアクセス許可の付与」、および「EASの使用に必要なアクセス許可の付与」をご参照ください。

制限事項

このベストプラクティスは、中国 (Ulanqab) リージョンでのみサポートされています。

ステップ1: Qwenモデルの準備

このベストプラクティスに記載されている方法のいずれかを使用して、モデルをダウンロードできます。 以下の手順を実行します。

  1. DSWの開発環境に移動します。

    1. PAIコンソールにログインします。

    2. ページの左上隅で、中国 (Ulanqab) リージョンを選択します。

    3. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。

    4. 左側のナビゲーションウィンドウで、モデルトレーニング > データ科学ワークショップ (DSW)を選択します。

    5. 管理するDSWインスタンスを検索し、をクリックします。開くで、アクション列を作成します。

  2. 上部のナビゲーションバーで、[ターミナル] をクリックします。 このタブで、[ターミナルの作成] または右上隅のプラス (+) アイコンをクリックします。

  3. Qwenモデルをダウンロードします。

    ModelScopeコミュニティからモデルをダウンロード

    1. ターミナルタブで次のコマンドを実行してModelScopeをインストールします。

    2. pip install modelscope

      返された結果を表示します。 返された結果の警告情報は無視できます。

      Looking in indexes: https://mirrors.cloud.aliyuncs.com/pypi/simple
      Collecting modelscope
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/ac/05/75b5d750608d7354dc3dd023dca7101e5f3b4645cb3e5b816536d472a058/modelscope-1.9.5-py3-none-any.whl (5.4 MB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.4/5.4 MB 104.7 MB/s eta 0:00:00
      Requirement already satisfied: pyyaml in /opt/*/lib/python3.8/site-packages (from modelscope) (5.4.1)
      Requirement already satisfied: pandas in /opt/*/lib/python3.8/site-packages (from modelscope) (1.5.3)
      Requirement already satisfied: addict in /opt/*/lib/python3.8/site-packages (from modelscope) (2.4.0)
      Requirement already satisfied: numpy in /opt/*/lib/python3.8/site-packages (from modelscope) (1.22.2)
      Collecting simplejson>=3.3.0
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/33/5f/b9506e323ea89737b34c97a6eda9d22ad6b771190df93f6eb72657a3b996/simplejson-3.19.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (136 kB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 136.6/136.6 kB 70.2 MB/s eta 0:00:00
      Collecting gast>=0.2.2
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/fa/39/5aae571e5a5f4de9c3445dae08a530498e5c53b0e74410eeeb0991c79047/gast-0.5.4-py3-none-any.whl (19 kB)
      Requirement already satisfied: Pillow>=6.2.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (9.3.0)
      Requirement already satisfied: oss2 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.17.0)
      Requirement already satisfied: filelock>=3.3.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (3.11.0)
      Requirement already satisfied: urllib3>=1.26 in /opt/*/lib/python3.8/site-packages (from modelscope) (1.26.12)
      Requirement already satisfied: datasets<=2.13.0,>=2.8.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.11.0)
      Requirement already satisfied: attrs in /opt/*/lib/python3.8/site-packages (from modelscope) (22.2.0)
      Requirement already satisfied: scipy in /opt/*/lib/python3.8/site-packages (from modelscope) (1.9.3)
      Requirement already satisfied: yapf in /opt/*/lib/python3.8/site-packages (from modelscope) (0.32.0)
      Requirement already satisfied: pyarrow!=9.0.0,>=6.0.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (11.0.0)
      Requirement already satisfied: setuptools in /opt/*/lib/python3.8/site-packages (from modelscope) (65.5.0)
      Requirement already satisfied: requests>=2.25 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.28.1)
      Requirement already satisfied: einops in /opt/*/lib/python3.8/site-packages (from modelscope) (0.6.0)
      Requirement already satisfied: python-dateutil>=2.1 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.8.2)
      Collecting sortedcontainers>=1.5.9
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
      Requirement already satisfied: tqdm>=4.64.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (4.65.0)
      Requirement already satisfied: dill<0.3.7,>=0.3.0 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.3.6)
      Requirement already satisfied: multiprocess in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.70.14)
      Requirement already satisfied: aiohttp in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (3.8.4)
      Requirement already satisfied: responses<0.19 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.18.0)
      Requirement already satisfied: huggingface-hub<1.0.0,>=0.11.0 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.16.4)
      Requirement already satisfied: fsspec[http]>=2021.11.1 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (2023.4.0)
      Requirement already satisfied: packaging in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (21.3)
      Requirement already satisfied: xxhash in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (3.2.0)
      Requirement already satisfied: six>=1.5 in /opt/*/lib/python3.8/site-packages (from python-dateutil>=2.1->modelscope) (1.16.0)
      Requirement already satisfied: certifi>=2017.4.17 in /opt/*/lib/python3.8/site-packages (from requests>=2.25->modelscope) (2022.9.24)
      Requirement already satisfied: charset-normalizer<3,>=2 in /opt/*/lib/python3.8/site-packages (from requests>=2.25->modelscope) (2.0.4)
      Requirement already satisfied: idna<4,>=2.5 in /opt/*/lib/python3.8/site-packages (from requests>=2.25->modelscope) (3.4)
      Requirement already satisfied: aliyun-python-sdk-kms>=2.4.1 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (2.16.0)
      Requirement already satisfied: aliyun-python-sdk-core>=2.13.12 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (2.13.36)
      Requirement already satisfied: crcmod>=1.7 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (1.7)
      Requirement already satisfied: pycryptodome>=3.4.7 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (3.15.0)
      Requirement already satisfied: pytz>=2020.1 in /opt/*/lib/python3.8/site-packages (from pandas->modelscope) (2022.7.1)
      Requirement already satisfied: cryptography>=2.6.0 in /opt/*/lib/python3.8/site-packages (from aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (38.0.3)
      Requirement already satisfied: jmespath<1.0.0,>=0.9.3 in /opt/*/lib/python3.8/site-packages (from aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (0.10.0)
      Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (4.0.2)
      Requirement already satisfied: yarl<2.0,>=1.0 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (1.8.2)
      Requirement already satisfied: frozenlist>=1.1.1 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (1.3.3)
      Requirement already satisfied: multidict<7.0,>=4.5 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (6.0.4)
      Requirement already satisfied: aiosignal>=1.1.2 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (1.3.1)
      Requirement already satisfied: typing-extensions>=3.7.*.* in /opt/*/lib/python3.8/site-packages (from huggingface-hub<1.0.0,>=0.11.0->datasets<=2.13.0,>=2.8.0->modelscope) (4.4.0)
      Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/*/lib/python3.8/site-packages (from packaging->datasets<=2.13.0,>=2.8.0->modelscope) (3.0.9)
      Requirement already satisfied: cffi>=1.12 in /opt/*/lib/python3.8/site-packages (from cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (1.15.1)
      Requirement already satisfied: pycparser in /opt/*/lib/python3.8/site-packages (from cffi>=1.12->cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (2.21)
      Installing collected packages: sortedcontainers, simplejson, gast, modelscope
      Successfully installed gast-0.5.4 modelscope-1.9.5 simplejson-3.19.2 sortedcontainers-2.4.0
      WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
    3. 次のコマンドを実行して、Python環境に移動します。

    4. python
    5. 次のサンプルコードは、Qwen-7Bモデルのパッケージをダウンロードします。

    6. # ### Loading Model and Tokenizer
      from modelscope.hub.snapshot_download import snapshot_download
      model_dir = snapshot_download('qwen/Qwen-7B', 'v1.1.4')
      # model_dir = snapshot_download('qwen/Qwen-14B', 'v1.0.4')
      # model_dir = snapshot_download('qwen/Qwen-72B')
      # Display the directory of the downloaded model.
      print(model_dir)
      # /root/.cache/modelscope/hub/qwen/Qwen-7B
    7. Ctrl + Dキーを押してPython環境を終了します。

    8. 次のコマンドを実行して、ダウンロードしたモデルを対応するフォルダーに移動します。

    9. # mkdir -p /mnt/workspace/qwen-ckpts/${The ckpt folder with the hf suffix}
      mkdir -p /mnt/workspace/qwen-ckpts/qwen-7b-hf
      # cp -r ${The directory of the downloaded model}/* /mnt/workspace/qwen-ckpts/${The ckpt folder with the hf suffix}
      cp -r /root/.cache/modelscope/hub/qwen/Qwen-7B/* /mnt/workspace/qwen-ckpts/qwen-7b-hf

    Hugging Faceコミュニティからモデルをダウンロード

    DSWの [ターミナル] タブで次のコマンドを実行し、モデルのパッケージをダウンロードします。 この例では、Qwen-7Bモデルのパッケージがダウンロードされます。 Qwen-14BまたはQwen-72Bモデルのパッケージをダウンロードする場合は、ビジネス要件に基づいて次のサンプルコードを変更します。

    mkdir /mnt/workspace/qwen-ckpts
    cd /mnt/workspace/qwen-ckpts
    git clone https:// huggingface.co/Qwen/Qwen-7B
    # git clone https:// huggingface.co/Qwen/Qwen-7B-Chat
    # git clone https:// huggingface.co/Qwen/Qwen-14B
    # git clone https:// huggingface.co/Qwen/Qwen-14B-Chat
    # git clone https:// huggingface.co/Qwen/Qwen-72B
    # git clone https:// huggingface.co/Qwen/Qwen-72B-Chat 

ステップ2: 事前トレーニング用のデータの準備

DSWインスタンスで事前トレーニングに使用するデータを準備することを推奨します。 この例では、WuDaoCorpora 2.0データセットを使用して、Megatronベースのトレーニングのデータを前処理する方法を説明します。 このデータセットは研究にのみ使用されます。 PAIで処理された小規模なサンプルデータを直接ダウンロードできます。 事前トレーニングに使用するデータを自分で準備することもできます。

PAIで処理された小規模サンプルデータの使用

このベストプラクティスを使用するために、PAIは処理された小規模サンプルデータを提供します。 サンプルデータをダウンロードするには、DSWの [ターミナル] タブで次のコマンドを実行します。

mkdir /mnt/workspace/qwen-datasets /
cd /mnt/workspace/qwen-datasets
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-train.json
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-valid.json
mkdir -p /mnt/workspace/qwen-datasets/wudao
cd /mnt/workspace/qwen-datasets/wudao
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_content_document.bin
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_content_document.idx 

プロセスデータを自分で

  1. オープンソースのWuDaoCorpora 2.0データセットを /mnt/workspace/qwen-datasetsの作業ディレクトリにダウンロードします。 この例では、抽出されたフォルダの名前はwudao_200gです。

    PAIによって処理される小規模サンプルデータも、このデータセットから供給される。 DSWの [ターミナル] タブで次のコマンドを実行して、データセットをダウンロードして解凍できます。

    mkdir /mnt/workspace/qwen-datasets
    cd /mnt/workspace/qwen-datasets
    wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/datasets/WuDaoCorpus2.0_base_sample.tgz
    tar zxvf WuDaoCorpus2.0_base_sample.tgz
    mv WuDaoCorpus2.0_base_sample wudao_200g 
  2. [Terminal] タブで次のコマンドを実行して、WuDaoCorpora 2.0データセットでデータクレンジングを実行し、ファイル形式を変換してから、merged_wudao_cleaned.jsonファイルを生成します。

    #! /bin/bash
    set -ex
    # Specify the directory of the WuDaoCorpora 2.0 dataset. 
    data_dir=/mnt/workspace/qwen-datasets/wudao_200g
    
    # Start the data cleansing process. 
    dataset_dir=$(dirname $data_dir)
    mkdir -p ${dataset_dir}/cleaned_wudao_dataset
    cd ${dataset_dir}/cleaned_wudao_dataset
    wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama2-codes/preprocess_wudao2.py
    # Set the -k option to text. 
    python preprocess_wudao2.py -i ${data_dir} -o ${dataset_dir}/cleaned_wudao_dataset -k text -p 32
    
    # Merge the cleansed data. 
    mkdir ${dataset_dir}/wudao
    cd ${dataset_dir}/wudao
    find ${dataset_dir}/cleaned_wudao_dataset -name "*.json" -exec cat {} + > ${dataset_dir}/wudao/merged_wudao_cleaned.json
    rm -rf ${dataset_dir}/cleaned_wudao_dataset
    

    次のサンプルコードは、上記のコマンドを実行した後のqwen-datasetsディレクトリの構造を示しています。 wudaoフォルダが作成されます。

    qwen-datasets
    ├── wudao_200g 
    └── wudao
        └── merged_wudao_cleaned.json
  3. [ターミナル] タブで次のコマンドを実行し、データを複数のグループに分割し、生成されたmerged_wudao_cleaned.jsonファイルを処理して各グループのデータを圧縮します。 これは、後続の操作におけるマルチスレッド化を容易にする。

    apt-get update
    apt-get install zstd
    
    # Split data into 10 groups. If data processing is slow, you can split data into more groups. 
    NUM_PIECE=10
    
    # Process the merged_wudao_cleaned.json file. 
    mkdir -p ${dataset_dir}/cleaned_zst/
    # Query the total length of data and split the data. 
    NUM=$(sed -n '$=' ${dataset_dir}/wudao/merged_wudao_cleaned.json)
    echo "total line of dataset is $NUM, data will be split into $NUM_PIECE pieces for processing"
    NUM=`expr $NUM / $NUM_PIECE`
    echo "each group is processing $NUM sample"
    split_dir=${dataset_dir}/split
    mkdir $split_dir
    split -l $NUM --numeric-suffixes --additional-suffix=.jsonl ${dataset_dir}/wudao/merged_wudao_cleaned.json $split_dir/
    
    # Compress the data of each group. 
    o_path=${dataset_dir}/cleaned_zst/
    mkdir -p $o_path
    files=$(ls $split_dir/*.jsonl)
    for filename in $files
    do
       f=$(basename $filename)
       zstd -z $filename -o $o_path/$f.zst &
    done
    rm -rf $split_dir
    rm ${dataset_dir}/wudao/merged_wudao_cleaned.json
    

    次のサンプルコードは、上記のコマンドを実行した後のqwen-datasetsディレクトリの構造を示しています。 クリーンアップされた_zstフォルダーが作成され、10個の圧縮ファイルが含まれます。

    qwen-datasets
    ├── wudao_200g
    ├── wudao
    └── cleaned_zst
        ├── 00.jsonl.zst
    		│   ...
        └── 09.jsonl.zst
  4. 事前トレーニングに使用されるデータセットをMMAP形式で生成します。

    MMAPは、データが予めトークン化されたファイル形式である。 これにより、特に大量のデータを処理する場合に、トレーニングおよび微調整中にデータセットからデータを読み取るのに必要な時間が短縮されます。 以下の手順を実行します。

    1. DSWの [Terminal] タブで次のコマンドを実行して、Megatronベースのトレーニングツールのソースコードを含むPAI-Megatron-PatchファイルをDSWの /mnt/workspace/ 作業ディレクトリにコピーします。

      cd /mnt/workspace/
      # Method 1: Obtain the source code of the training tool from GitHub. 
      git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git
      # Method 2: Obtain the source code of the training tool by running the wget command. Then, run the tar zxvf Pai-Megatron-Patch.tgz command to decompress the downloaded file. 
      wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/models/Pai-Megatron-Patch.tgz
    2. [ターミナル] タブで次のコマンドを実行して、データセットをMMAP形式に変換します。

      コマンドの実行後、. ビン. idxファイルは、/mnt/workspace/qwen-datasets/wudaoディレクトリに移動します。

      # Install the tokenizer library on which Qwen depends. 
      pip install tiktoken
      # Specify the directory of the dataset and the working directory. 
      export dataset_dir=/mnt/workspace/qwen-datasets
      export WORK_DIR=/mnt/workspace
      
      # Generate the training set and validation set used for pre-training in the MMAP format. 
      cd ${WORK_DIR}/Pai-Megatron-Patch/toolkits/pretrain_data_preprocessing
      bash run_make_pretraining_dataset.sh \
      ../../Megatron-LM-23.04 \
      ${WORK_DIR}/Pai-Megatron-Patch/ \
      ${dataset_dir}/cleaned_zst/ \
      qwenbpe \
      ${dataset_dir}/wudao/ \
      ${WORK_DIR}/qwen-ckpts/qwen-7b-hf
      rm -rf ${dataset_dir}/cleaned_zst

      次の表に、run_make_pretraining_dataset.shスクリプトを実行するために指定する必要がある6つのパラメーターを示します。

      項目

      説明

      MEGATRON_PATH=$1

      Megatronベースのトレーニングツールのソースコードのディレクトリ。

      MEGATRON_PATCH_PATH=$2

      Pai-Megatron-Patchフォルダのディレクトリ。

      input_data_dir=$3

      処理およびパッケージ化されたWuDaoCorpora 2.0データセットのディレクトリ。

      tokenizer=$4

      トークナイザーのタイプ。 この例では、値はqwenbpeに設定されています。

      output_data_dir=$5

      生成されたディレクトリ. ビン. idxファイルを作成します。

      load_dir=$6

      生成されたtokenizer_config.jsonファイルのディレクトリ。

      次のサンプルコードは、スクリプトの実行後のqwen-datasetsディレクトリの構造を示しています。

      qwen-datasets
      ├── wudao_200g
      └── wudao
         ├── wudao_qwenbpe_content_document.bin
         └── wudao_qwenbpe_content_document.idx

ステップ3: メガトロンベースのトレーニング

以下の操作を実行して、メガトロンベースのトレーニングを実行できます。

モデル形式の変換

モデル形式をハギングフェイスからメガトロンに変換する必要があります。

変換されたMegatronモデルのダウンロード

このベストプラクティスを使用するために、PAIは形式が変換されたモデルを提供します。 [ターミナル] タブで次のコマンドを実行して、モデルをダウンロードできます。

cd /mnt/workspace/
mkdir qwen-ckpts
cd qwen-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf-to-mg-tp1-pp1.tgz
tar -zxf qwen-7b-hf-to-mg-tp1-pp1.tgz
mv qwen-7b-hf-to-mg-tp1-pp1 qwen-7b-hf-to-megatron-tp1-pp1

モデル形式をハギングフェイスからメガトロンに変換

ターミナルタブで次のコマンドを実行して、PAIが提供するモデル変換ツールを使用して、モデル形式をハギングフェイスからメガトロンに変換します。

# Convert the model format. 
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen
sh model_convertor.sh \
../../../Megatron-LM-main        \
/mnt/workspace/qwen-ckpts/qwen-7b-hf         \
/mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1  \
1  \
1  \
qwen-7b \
0 \
false

次の表に、model_convertor.shスクリプトを実行するために指定する必要があるパラメーターを示します。

パラメーター

説明

MEGATRON_PATH=$1

Megatronベースのトレーニングツールのソースコードのディレクトリ。

SOURCE_CKPT_PATH=$2

ハグ顔モデルのディレクトリ。

TARGET_CKPT_PATH=$3

変換されたMegatronモデルのディレクトリ。

TP=$4

テンソルの並列度のサイズ。トレーニングのサイズと同じでなければなりません。 サイズは、モデルパラメータの数によって異なります。 モデル形式を変換するときは、サイズを変更する必要があります。

  • Qwen-7B: 1

  • Qwen-14B: 2

  • Qwen-72B: 8

PP=$5

パイプラインの並列処理のサイズ。トレーニングと同じでなければなりません。 サイズは、モデルパラメータの数によって異なります。 モデル形式を変換するときは、サイズを変更する必要があります。

  • Qwen-7B: 1

  • Qwen-14B: 1

  • Qwen-72B: 2

MN=$6

モデルの名前 (qwen-7b、qwen-14b、qwen-72bなど) 。

EXTRA_VOCAB_SIZE=$7

余分な語彙のサイズ。

mg2hf=$8

モデル形式をMegatronからHugging Faceに変換するかどうかを指定します。

モデルの事前トレーニング

スタンドアロンジョブを送信してDSWでモデルをトレーニングするか、分散ジョブを送信してDLCの複数のマルチGPUサーバーでモデルをトレーニングすることができます。 トレーニングプロセスは約2時間続きます。 ジョブの実行後、モデルファイルは /mnt/workspace/output_megatron_qwen/ ディレクトリにエクスポートされます。

スタンドアロンジョブを実行してDSWでモデルを事前トレーニングする

次のサンプルコードは、スタンドアロンジョブを実行して、[ターミナル] タブでQwen-7Bモデルをトレーニングします。

export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_pretrain_megatron_qwen.sh  \
dsw  \
${WORK_DIR}/Pai-Megatron-Patch  \
7B   \
1    \
8 \
1e-5   \
1e-6   \
2048  \
2048  \
85   \
fp16  \
1   \
1  \
sel  \
true   \
false  \
false   \
false  \
100000  \
${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document   \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
100000000   \
10000   \
${WORK_DIR}/output_megatron_qwen/   

次の表に、run_pretrain_megatron_qwen.shスクリプトを実行するために指定する必要があるパラメーターを示します。

パラメーター

説明

ENV=$1

ランタイム環境。 有効な値:

  • dsw

  • dlc

MEGATRON_PATH=$2

Megatronベースのトレーニングツールのソースコードのディレクトリ。

MODEL_SIZE=$3

モデルパラメータの数。 有効な値: 7B、14B、および72B。

BATCH_SIZE=$4

各トレーニングイテレーションの各GPUのサンプル数。 有効な値: 4と8。

GLOBAL_BATCH_SIZE=$5

トレーニングイテレーションのサンプルの総数。

LR=$6

学習率。 有効値: 1e-5および5e-5。

MIN_LR=$7

最小学習率。 有効値: 1e-6および5e-6。

SEQ_LEN=$8

シーケンスの長さ。

PAD_LEN =${ 9}

パディングシーケンスの長さ。

EXTRA_VOCAB_SIZE =${ 10}

余分な語彙のサイズ。 サイズは、モデルパラメータの数によって異なります。

  • Qwen-7B: 85

  • Qwen-14B: 213

  • Qwen-72B: 213

PR =${ 11}

トレーニングの精度。 有効値: fp16およびbf16。

TP =${ 12}

テンソル並列処理のサイズ。

PP =${ 13}

パイプラインの並列処理のサイズ。

AC =${ 14}

アクティブ化チェックポイントモード。 有効な値:

  • フル

  • セル

DO =${ 15}

MegatronにZeRO-1オプティマイザを使用するかどうかを指定します。 有効な値:

  • true

  • false

FL =${ 16}

Flash Attentionを有効にするかどうかを指定します。 有効な値:

  • true

  • false

SP =${ 17}

シーケンス並列処理を使用するかどうかを指定します。 有効な値:

  • true

  • false

TE =${ 18}

Transformer Engineのアクセラレーションテクノロジを有効にするかどうかを指定します。 このテクノロジを有効にするには、gu8xf GPUが必要です。

SAVE_INTERVAL =${ 19}

チェックポイントファイルが保存される間隔。

DATASET_PATH =${ 20}

トレーニングセットのディレクトリ。

PRETRAIN_CHECKPOINT_PATH =${ 21}

事前トレーニング済みモデルのディレクトリ。

TRAIN_TOKENS =${ 22}

トレーニング用のトークンの数。

WARMUP_TOKENS =${ 23}

ウォームアップ用のトークンの数。

OUTPUT_BASEPATH =${ 24}

トレーニング後に生成された出力モデルファイルのディレクトリ。

DLCでモデルを事前トレーニングするための分散ジョブの実行

DSWでモデルをトレーニングした後、DLCの複数のマルチGPUサーバーでモデルをトレーニングするように分散ジョブを構成できます。 以下の手順を実行します。

  1. ジョブの作成ページに移動します。

    1. PAIコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。

    3. 左側のナビゲーションウィンドウで、[モデルトレーニング] > [ディープラーニングコンテナ (DLC)] を選択します。 [ディープラーニングコンテナ (DLC)] ページで、[ジョブの作成] をクリックします。 [ジョブの作成] ページが表示されます。

  2. [ジョブの作成] ページで、次の表に示すパラメーターを設定します。 他のパラメーターにはデフォルト値を使用します。 詳細については、「トレーニングジョブの送信」をご参照ください。

    パラメーター

    説明

    基本情報

    ジョブ名

    トレーニングジョブの名前。 この例では、値はtest_qwen_dlcに設定されています。

    環境情報

    ノードイメージ

    [画像アドレス] をクリックし、フィールドに次の画像URLを入力します: pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm

    マウント設定

    [追加] をクリックします。 [マウントタイプ] として [カスタムデータセット] を選択し、次のパラメーターを設定します。

    • データセット: Apsara file Storage NASの汎用NASファイルシステムに基づいて作成されたデータセットを選択します。

    • マウントパス: /mnt/workspace/ と入力します。

    Startupコマンド

    次のコマンドを入力します。 run_pretrain_megatron_qwen.shスクリプトを実行するために指定する必要があるパラメーターは、DSWでモデルをトレーニングするためにスタンドアロンジョブを送信するときに指定するパラメーターと同じです。

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
    sh run_pretrain_megatron_qwen.sh  \
    dlc  \
    ${WORK_DIR}/PAI-Megatron-Patch  \
    7B   \
    1    \
    8 \
    1e-5   \
    1e-6   \
    2048  \
    2048  \
    85   \
    fp16  \
    1   \
    1  \
    sel  \
    true   \
    false  \
    false   \
    false \
    100000  \
    ${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document   \
    ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
    100000000   \
    10000   \
    ${WORK_DIR}/output_megatron_qwen/    

    リソース情報

    リソースタイプ

    [Lingjunリソース] を選択します。

    ソース

    [リソースクォータ] を選択します。

    リソースクォータ

    購入したLingjunリソースに対して作成されたリソースクォータを選択します。

    フレームワーク

    [PyTorch] を選択します。

    求人リソース

    ワーカーノードに次のパラメーターを設定します。

    • ノード数: 2と入力します。 より多くのサーバーでモデルをトレーニングする場合は、[ノード数] パラメーターの値を増やすことができます。

    • GPU: 8を入力します。

    • vCPU: 90を入力します。

      説明

      CPUコアの数は96を超えることはできません。

    • メモリ (GiB): 1024を入力します。

    • 共有メモリ (GiB): 1024を入力します。

  3. [OK] をクリックします。 Deep Learning Containers (DLC) ページに移動します。 ジョブの状態がSucceededに変わると、トレーニングジョブが実行されます。

監視付き微調整の実行

スタンドアロンジョブを送信してDSWでモデルを微調整したり、分散ジョブを送信してDLCの複数のマルチGPUサーバーでモデルを微調整したりできます。 微調整プロセスは約2時間続きます。 ジョブの実行後、モデルファイルは /mnt/workspace/output_megatron_qwen/ ディレクトリにエクスポートされます。

  1. モデルを微調整する前に、ステップ2: 事前トレーニング用のデータの準備に進みます。 JSONファイルをダウンロードするには、Use the small-scale sample data processing by PAIタブのサンプルコードを使用します。

  2. モデルを微調整します。

    スタンドアロンジョブを実行してDSWでモデルを微調整する

    次のサンプルコードは、スタンドアロンジョブを実行して、[ターミナル] タブでQwen-7Bモデルを微調整します。

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
    sh run_finetune_megatron_qwen_withGA.sh  \
    dsw  \
    ${WORK_DIR}/Pai-Megatron-Patch  \
    7B     \
    1      \
    96 \
    1e-5   \
    1e-6   \
    2048   \
    2048     \
    85      \
    bf16   \
    1      \
    1      \
    sel    \
    true   \
    false  \
    false  \
    false \
    1000 \
    ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-train.json   \
    ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-valid.json   \
    ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
    2000   \
    10 \
    ${WORK_DIR}/output_megatron_qwen/

    次の表に、run_finetune_megatron_qwen_withGA.shスクリプトを実行するために指定する必要があるパラメーターを示します。

    項目

    説明

    ENV=$1

    ランタイム環境。 有効な値:

    • dlc

    • dsw

    MEGATRON_PATH=$2

    Megatronベースのトレーニングツールのソースコードのディレクトリ。

    MODEL_SIZE=$3

    モデルパラメータの数。 有効な値: 7B、14B、および72B。

    BATCH_SIZE=$4

    各微調整イテレーションの各GPUのサンプル数。 有効な値: 1、2、4、および8。

    GLOBAL_BATCH_SIZE=$5

    微調整反復のためのサンプルの総数。 有効な値: 64、96、および128

    LR=$6

    学習率。 有効値: 1e-5および5e-5。

    MIN_LR=$7

    最小学習率。 有効値: 1e-6および5e-6。

    SEQ_LEN=$8

    シーケンスの長さ。

    PAD_LEN=$9

    パディングシーケンスの長さ。

    EXTRA_VOCAB_SIZE =${ 10}

    余分な語彙のサイズ。 サイズは、モデルパラメータの数によって異なります。

    • Qwen-7B: 85

    • Qwen-14B: 213

    • Qwen-72B: 213

    PR =${ 11}

    トレーニングの精度。 有効値: fp16およびbf16。

    TP =${ 12}

    テンソル並列処理のサイズ。

    PP =${ 13}

    パイプラインの並列処理のサイズ。

    AC =${ 14}

    アクティブ化チェックポイントモード。 有効な値: fullとsel。

    DO =${ 15}

    MegatronにZeRO-1オプティマイザを使用するかどうかを指定します。 有効な値:

    • true

    • false

    FL =${ 16}

    Flash Attentionを有効にするかどうかを指定します。 有効な値:

    • true

    • false

    SP =${ 17}

    シーケンス並列処理を使用するかどうかを指定します。 有効な値:

    • true

    • false

    TE =${ 18}

    Transformer Engineのアクセラレーションテクノロジを有効にするかどうかを指定します。 このテクノロジを有効にするには、gu8xf GPUが必要です。

    SAVE_INTERVAL =${ 19}

    モデルが保存される間隔。

    DATASET_PATH =${ 20}

    トレーニングセットのディレクトリ。

    VALID_DATASET_PATH =${ 21}

    検証セットのディレクトリ。

    PRETRAIN_CHECKPOINT_PATH =${ 22}

    事前トレーニング済みモデルのディレクトリ。

    TRAIN_ITERS =${ 23}

    トレーニングの繰り返し回数。

    LR_WARMUP_ITERS =${ 24}

    学習率のウォームアップの繰り返し回数。

    OUTPUT_BASEPATH =${ 25}

    トレーニング後に生成された出力モデルファイルのディレクトリ。

    分散ジョブを実行してDLCでモデルを微調整する

    DSWでモデルを微調整した後、DLCの複数のマルチGPUサーバーでモデルを微調整するように分散ジョブを構成できます。 DLCでトレーニングジョブを送信するときに、Startup Commandパラメーターに次のコマンドを入力します。 その他のパラメーターの詳細については、このトピックの「モデルの事前トレーニング」をご参照ください。

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
    sh run_finetune_megatron_qwen_withGA.sh  \
    dlc  \
    ${WORK_DIR}/Pai-Megatron-Patch  \
    7B     \
    1      \
    96 \
    1e-5   \
    1e-6   \
    2048   \
    2048     \
    85      \
    bf16   \
    1      \
    1      \
    sel    \
    true   \
    false  \
    false  \
    false \
    1000 \
    ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-train.json   \
    ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-valid.json   \
    ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
    2000   \
    10 \
    ${WORK_DIR}/output_megatron_qwen/

    run_finetune_megatron_qwen_withGA.shスクリプトを実行するために指定する必要があるパラメーターは、DSWでモデルを微調整するためにスタンドアロンジョブを送信するときに指定するパラメーターと同じです。

ステップ4: オフライン推論にモデルを使用する

モデルのトレーニング後、Megatronに基づくモデルを使用してオフライン推論を実行し、モデルの効果を評価できます。 以下の手順を実行します。

  1. テストサンプルを含むpred_input.jsonlファイルをダウンロードし、DSWの /mnt/workspaceディレクトリにアップロードします。 詳細については、「データファイルのアップロードまたはダウンロード」をご参照ください。

    説明

    推論に使用されるデータは、微調整の場合と同じ方法で整理する必要があります。

  2. トレーニング前のmodelディレクトリにあるすべてのJSONファイルとtokenizer.mo delファイルを、トレーニング後に生成された出力モデルファイルのディレクトリにコピーします。 次に、ファイルは {OUTPUT_BASEPATH }/checkpointディレクトリに、latest_checkpointed_iteration.txtファイルと同じフォルダに配置されます。

    説明

    コマンド内のディレクトリを実際のディレクトリに置き換えます。

    cd /mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1
    cp *.json /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX /
    cp tokenizer.mo del /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX/ 
  3. [ターミナル] タブで次のコマンドを実行し、モデルを使用してオフライン推論を実行します。 推論結果は、/mnt/workspace/qwen_pred.txtファイルに生成されます。 推論結果に基づいてモデルの効果を評価できます。

    説明

    コマンドを実行する前に、run_text_generation_megatron_qwen.shスクリプトでCUDA_VISIBLE_DEVICESパラメーターを0に、GPUS_PER_NODEパラメーターを1に設定する必要があります。

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
    bash run_text_generation_megatron_qwen.sh \
    dsw \
    ${WORK_DIR}/PAI-Megatron-Patch \
    /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX \
    7B \
    1 \
    1 \
    1024 \
    1024 \
    85 \
    fp16 \
    10 \
    512 \
    512 \
    ${WORK_DIR}/pred_input.jsonl \
    ${WORK_DIR}/qwen_pred.txt \
    0 \
    1.0 \
    1.2
    1024 \
    1024 \
    85 \
    fp16 \
    10 \
    512 \
    512 \
    ${WORK_DIR}/pred_input.jsonl \
    ${WORK_DIR}/qwen_pred.txt \
    0 \
    1.0 \
    1.2 

    次の表に、run_text_generation_megatron_qwen.shスクリプトを実行するために指定する必要があるパラメーターを示します。

    項目

    説明

    ENV=$1

    ランタイム環境。 有効な値:

    • dlc

    • dsw

    MEGATRON_PATCH_PATH=$2

    Pai-Megatron-Patchフォルダのディレクトリ。

    CHECKPOINT_PATH=$3

    トレーニング中のモデルのディレクトリ。

    重要

    このディレクトリを実際のモデルディレクトリに置き換えます。

    MODEL_SIZE=$4

    モデルパラメータの数。 有効な値: 7B、14B、および72B。

    TP=$5

    テンソル並列処理のサイズ。

    重要
    • このパラメーターを1に設定すると、単一のGPUを推論に使用できます。

    • このパラメーターを1より大きい値に設定した場合、推論に対応するGPUの数を使用する必要があります。

    BS=$6

    各推論イテレーションの各GPUのサンプル数。 有効な値: 1、4、および8。

    SEQ_LEN=$7

    シーケンスの長さ。 有効な値: 256、512、1024

    PAD_LEN=$8

    パディングシーケンスの長さ。連結されたテキストの長さです。

    EXTRA_VOCAB_SIZE =${ 9}

    モデル変換中に増加したトークンの数。 この数は、モデルパラメータの数に基づいて変化する。

    • Qwen-7B: 85

    • Qwen-14B: 213

    • Qwen-72B: 213

    PR =${ 10}

    推論の精度。 有効値: fp16およびbf16。

    TOP_K =${ 11}

    選択される上位n個の候補単語の数。 有効値: 0〜n。 例: 0、5、10、および20。

    INPUT_SEQ_LEN =${ 12}

    入力シーケンスの長さ。 値を512に設定します。

    OUTPUT_SEQ_LEN =${ 13}

    出力シーケンスの長さ。 値を256に設定します。

    INPUT_FILE =${ 14}

    推論に使用するテキストを含むファイル。 この例では、各行にサンプルが含まれているpred_input.jsonlファイルが使用されています。

    OUTPUT_FILE =${ 15}

    推論後に生成された出力ファイル。 この例では、qwen_pred.txtファイルが使用されています。

    TOP_P =${ 16}

    選択される上位候補単語の割合。 有効な値は 0~1 です。 例: 0、0.85、および0.95。

    説明

    TOP_KおよびTOP_Pパラメーターのいずれかを0に設定する必要があります。

    TEMPERATURE =${ 17}

    サンプリングプロセスのランダム性。 有効な値: 1〜n。

    REPETITION_PENALTY =${ 18}

    モデルによって生成されたコンテンツの繰り返しペナルティ。 有効な値: 1 ~ 2。 デフォルト値: 1.2

ステップ5: モデル形式の変換

モデルを使用してオフライン推論を実行した後、モデルの効果が期待に合っている場合は、モデル形式をMegatronからHugging Faceに変換できます。 次に、変換されたHugging Faceモデルをモデルサービスとしてデプロイできます。

  1. ターミナルタブで次のコマンドを実行して、モデル形式をMegatronからHugging Faceに変換します。

    export WORK_DIR=/mnt/workspace
    cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen
    sh model_convertor.sh \
    ../../../Megatron-LM-main        \
    ${WORK_DIR}/output_megatron_qwen/checkpoint/${Directory}/iter_*******         \
    /mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1/  \
    1  \
    1  \
    qwen-7b \
    0 \
    true

    次の表に、model_convertor.shスクリプトを実行するために指定する必要があるパラメーターを示します。

    項目

    説明

    MEGATRON_PATH=$1

    Megatronベースのトレーニングツールのソースコードのディレクトリ。

    SOURCE_CKPT_PATH=$2

    iter_* フォルダーを含む、Megatron形式のトレーニング済みモデルのディレクトリ。 例: ${WORK_DIR}/output_megatron_qwen/checkpoint/dsw-pretrain-megatron-qwen-7B-lr-1e-5-bs-1-seqlen-2048-pr-bf16-tp-1-pp-1-ac-sel-do-true-sp-false-tt -- wt-/iter_*******

    重要
    • このディレクトリを実際のモデルディレクトリに置き換えます。

    • 事前トレーニング済みモデルの形式を変換する必要がある場合は、modelディレクトリ内のすべてのdistribut_optim. ptファイルを削除する必要があります。

    TARGET_CKPT_PATH=$3

    変換されたHugging Faceモデルのディレクトリ。

    TP=$4

    テンソルの並列度のサイズ。トレーニングのサイズと同じでなければなりません。

    PP=$5

    パイプラインの並列処理のサイズ。トレーニングと同じでなければなりません。

    MN=$6

    モデルの名前 (qwen-7b、qwen-14b、qwen-72bなど) 。

    EXTRA_VOCAB_SIZE=$7

    余分な語彙のサイズ。

    mg2hf=$8

    モデル形式をMegatronからHugging Faceに変換するかどうかを指定します。

  2. をコピーします。Copy the. json,. py、および. tiktokenファイル内の/mnt/workspace/qwen-ckpts/qwen-7b-hfオープンソースのHugging Faceモデルのディレクトリに/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1ディレクトリを使用して、モデルを正しく使用できるようにします。

    重要

    pytorch_model.bin.index.jsonファイルをコピーする必要はありません。

オフライン推論にハグ顔モデルを使用する

Hugging FaceとDeepSpeedに基づいて変換されたHugging Faceモデルを使用して、オフライン推論を実行できます。 たとえば、[ターミナル] タブのQwen-7Bモデルのディレクトリに、次のコンテンツを含むinfer.pyファイルを作成します。 infer.pyファイルを実行して、モデルを使用してオフライン推論を実行し、推論結果に基づいてモデルの効果を評価します。

#!/usr/bin/env python
#encoding=utf-8
from transformers import AutoTokenizer, LlamaTokenizer
from transformers import LlamaForCausalLM
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
 
checkpoint = '/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1'
print(checkpoint)
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(checkpoint,device_map="auto", trust_remote_code=True)
 
prompts = 'Write a quick sorting algorithm.'
p = f"Human:{prompts}"
print(p)
inputs = tokenizer.encode(p, return_tensors="pt").to(model.device)
outputs = model.generate(inputs,max_new_tokens=512)
print(tokenizer.decode(outputs[0]))

checkpointを変換されたHugging Faceモデルのディレクトリに置き換えます。 この例では、/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1ディレクトリが使用されます。

手順6: モデルをモデルサービスとしてデプロイし、モデルサービスを呼び出す

オフライン推論を実行し、モデルの効果を評価した後、変換されたHugging Faceモデルをオンラインモデルサービスとしてデプロイし、実際の運用環境でモデルサービスを呼び出して推論を実行できます。 以下の手順を実行します。

モデルをモデルサービスとして展開

  1. EAS-Online Model Servicesページに移動します。

    1. PAIコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、モデルを配置するワークスペースの名前をクリックします。

    3. 左側のナビゲーションウィンドウで、[モデル展開] > [Elastic Algorithm Service (EAS)] を選択して、[Elastic Algorithm Service (EAS)] ページに移動します。 image

  2. [Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 表示されるダイアログボックスで、[カスタムデプロイ] を選択し、[OK] をクリックします。

  3. [サービスの作成] ページで、次の表に示すパラメーターを設定します。 他のパラメーターにはデフォルト値を使用します。

    パラメーター

    説明

    モデルサービス情報

    サービス名

    モデルサービスのカスタム名。 名前はリージョン内で一意である必要があります。 この例では、値はtest_qwenに設定されています。

    デプロイ方法

    この例では、[イメージを使用したWebアプリのデプロイ] が選択されています。

    画像の選択

    [画像アドレス] を選択し、フィールドに [pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/llm-inference:vllm-0.2.1-v4] と入力し、チェックボックスを選択して [Machine Learning Platform for AI Terms of Service] を読み、同意します。

    モデル設定

    [モデル設定の指定] をクリックし、モデルディレクトリを設定します。

    • [NASファイルシステムのマウント] を選択し、次のパラメーターを設定します。

      • NASマウントターゲット: データセットの作成に基づく汎用NASファイルシステムとマウントターゲット。

      • NAS Source Path: NASファイルシステムに保存されている変換後のハギングフェイスモデルのディレクトリ。 この例では、/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1ディレクトリが使用されます。

      • マウントパス: モデルのマウントディレクトリ。 この例では、値は /qwen-7bに設定されています。

    実行するコマンド

    • この例では、次のコマンドが実行されます。nohup python -m fastchat.serve> tmp1.log 2>&1 & python -m fastchat.serve.gradio_web_server_pai -- model-list-mode reload > tmp2.log 2>&1 & python -m fastchat.serve. vllm_m_worker -- qwen-7b -- remote code-path.

      ここで:

      • -- model-path: モデルのマウントディレクトリ。モデル設定のマウントディレクトリと同じである必要があります。

      • -- tensor-parallel-size: テンソル並列処理のサイズ。GPUの数に基づいて調整する必要があります。 たとえば、Qwen-7Bモデルの場合は1に、Qwen-72Bモデルの場合は2に設定します。

    • ポート番号: この例では、ポート7860が使用されます。

    リソース配置情報

    リソースグループタイプ

    この例では、Intelligent Computing Lingjun Resourcesが選択されています。

    クォータの選択

    購入したLingjunリソースに対して作成されたリソースクォータを選択します。

    インスタンス数

    モデルと選択したリソースに基づいてパラメーターを設定します。 Qwen-7Bモデルの場合、[インスタンス数] パラメーターを1に設定し、次のリソース仕様に基づいてインスタンスタイプを選択します。

    • vCPU: 16

    • メモリ: 64,000 MB

    • GPU: 1

    VPC設定

    [VPC]

    NASマウントターゲットパラメーターを設定すると、システムは指定されたNASファイルシステムの仮想プライベートクラウド (VPC) 、vSwitch、およびセキュリティグループと自動的に一致します。

    vSwitch

    セキュリティグループ名

  4. [デプロイ] をクリックします。

    サービスの状態が [実行中] に変わると、サービスがデプロイされます。

モデルサービスの呼び出し

モデルサービスのデプロイ後、サービスを呼び出して推論を実行できます。 以下の手順を実行します。

  1. [推論サービス] タブで、呼び出すサービスを見つけ、[サービスの種類] 列の [Webアプリの表示] をクリックします。image.png

  2. WebUIページで、推論を実行します。