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

Platform For AI:PAI-Lingjun AIコンピューティングサービスで Qwen モデルを開発する

最終更新日:Nov 01, 2025

このトピックは、基盤モデル開発者が PAI-Lingjun AIコンピューティングサービスを使い始め、Qwen-7B、Qwen-14B、および Qwen-72B の基盤モデルを開発するのに役立つことを目的としています。開発プロセスには、分散トレーニング、ファインチューニング、オフライン推論、およびオンラインデプロイメントが含まれます。この例では、Qwen-7B モデルを使用して、PAI-Lingjun AIコンピューティングサービスで Qwen モデルを開発するためのベストプラクティスについて説明します。

前提条件

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

  • Platform for AI (PAI) が有効化されており、Data Science Workshop (DSW)、Deep Learning Containers (DLC)、および Elastic Algorithm Service (EAS) が含まれています。デフォルトのワークスペースが作成されています。詳細については、「PAI をアクティブ化してデフォルトのワークスペースを作成する」をご参照ください。

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

    モデルパラメーター数

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

    最小推論リソース

    Megatron ベースのトレーニングのためのモデル並列処理

    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

  • 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 の使用に必要な権限の付与」をご参照ください。

制限事項

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

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

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

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

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

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

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

    4. 左側のナビゲーションウィンドウで、[モデルトレーニング] > [Data Science Workshop (DSW)] を選択します。

    5. 管理する DSW インスタンスを見つけ、[アクション] 列の [開く] をクリックします。

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

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

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

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

    2. pip install modelscope

      返された結果を表示します。返された結果の WARNING 情報は無視してかまいません。

      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. # ### モデルとトークナイザーの読み込み
      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')
      # ダウンロードされたモデルのディレクトリを表示します。
      print(model_dir)
      # /root/.cache/modelscope/hub/qwen/Qwen-7B
    7. Ctrl+D を押して Python 環境を終了します。

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

    9. # mkdir -p /mnt/workspace/qwen-ckpts/${hf サフィックス付きの ckpt フォルダ}
      mkdir -p /mnt/workspace/qwen-ckpts/qwen-7b-hf
      # cp -r ${ダウンロードしたモデルのディレクトリ}/* /mnt/workspace/qwen-ckpts/${hf サフィックス付きの ckpt フォルダ}
      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. ターミナルタブで次のコマンドを実行して、WuDaoCorpora 2.0 データセットでデータクレンジングを実行し、ファイル形式を変換してから、merged_wudao_cleaned.json ファイルを生成します:

    #! /bin/bash
    set -ex
    # WuDaoCorpora 2.0 データセットのディレクトリを指定します。
    data_dir=/mnt/workspace/qwen-datasets/wudao_200g
    
    # データクレンジングプロセスを開始します。
    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
    # -k オプションを text に設定します。
    python preprocess_wudao2.py -i ${data_dir} -o ${dataset_dir}/cleaned_wudao_dataset -k text -p 32
    
    # クレンジングされたデータをマージします。
    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
    
    # データを 10 グループに分割します。データ処理が遅い場合は、より多くのグループに分割できます。
    NUM_PIECE=10
    
    # merged_wudao_cleaned.json ファイルを処理します。
    mkdir -p ${dataset_dir}/cleaned_zst/
    # データの全長をクエリし、データを分割します。
    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/
    
    # 各グループのデータを圧縮します。
    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 ディレクトリの構造を示しています。cleaned_zst フォルダが作成され、10 個の圧縮ファイルが含まれています。

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

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

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

      cd /mnt/workspace/
      # 方法 1: GitHub からトレーニングツールのソースコードを取得します。
      git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git
      # 方法 2: wget コマンドを実行してトレーニングツールのソースコードを取得します。次に、tar zxvf Pai-Megatron-Patch.tgz コマンドを実行して、ダウンロードしたファイルを解凍します。
      wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/models/Pai-Megatron-Patch.tgz
    2. ターミナルタブで次のコマンドを実行して、データセットを MMAP 形式に変換します:

      コマンドが実行されると、.bin および .idx ファイルが /mnt/workspace/qwen-datasets/wudao ディレクトリに生成されます。

      # Qwen が依存するトークナイザーライブラリをインストールします。
      pip install tiktoken
      # データセットのディレクトリと作業ディレクトリを指定します。
      export dataset_dir=/mnt/workspace/qwen-datasets
      export WORK_DIR=/mnt/workspace
      
      # MMAP 形式で事前学習に使用するトレーニングセットと検証セットを生成します。
      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

      生成された .bin および .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 ベースのトレーニングを実行する

次の操作を実行して、Megatron ベースのトレーニングを実行できます:

モデル形式の変換

モデル形式を Hugging Face から Megatron に変換する必要があります。

変換された 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

モデル形式を Hugging Face から Megatron に変換する

ターミナルタブで次のコマンドを実行して、PAI が提供するモデル変換ツールを使用して、モデル形式を Hugging Face から Megatron に変換します:

# モデル形式を変換します。
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

Hugging Face モデルのディレクトリ。

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}

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

  • 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}

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

PRETRAIN_CHECKPOINT_PATH=${21}

事前学習済みモデルのディレクトリ。

TRAIN_TOKENS=${22}

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

WARMUP_TOKENS=${23}

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

OUTPUT_BASEPATH=${24}

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

DLC でモデルを事前学習するための分散ジョブを実行する

DSW でモデルをトレーニングした後、分散ジョブを設定して DLC の複数のマルチ GPU サーバーでモデルをトレーニングできます。次の手順を実行します:

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

    パラメーター

    説明

    基本情報

    ジョブ名

    トレーニングジョブの名前。この例では、値は 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

    データセット

    [カスタムデータセット] をクリックし、次のパラメーターを設定します:

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

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

    起動コマンド

    次のコマンドを入力します。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 を入力します。

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

教師ありファインチューニングを実行する

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

  1. モデルをファインチューニングする前に、「ステップ 2: 事前学習用のデータを準備する」に進んでください。[PAI によって処理された小規模なサンプルデータを使用する] タブのサンプルコードを使用して、JSON ファイルをダウンロードします。

  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 でトレーニングジョブを送信するときは、[起動コマンド] パラメーターに次のコマンドを入力します。他のパラメーターの詳細については、このトピックの「モデルの事前学習」セクションをご参照ください。

    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. トレーニング前のモデルディレクトリにあるすべての JSON ファイルと tokenizer.model ファイルを、トレーニング後に生成された出力モデルファイルのディレクトリにコピーします。その後、ファイルは {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.model /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

    次の表に、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

    Megatron 形式のトレーニング済みモデルのディレクトリ (iter_* フォルダを含む)。例: ${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_*******

    重要
    • このディレクトリを実際のモデルディレクトリに置き換えてください。

    • 事前学習済みモデルの形式を変換する必要がある場合は、モデルディレクトリ内のすべての distrib_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. オープンソースの Hugging Face モデルの /mnt/workspace/qwen-ckpts/qwen-7b-hf ディレクトリにある .json.py、および .tiktoken ファイルを /mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1 ディレクトリにコピーして、モデルが適切に使用できるようにします。

    重要

    pytorch_model.bin.index.json ファイルをコピーする必要はないことに注意してください。

Hugging Face モデルをオフライン推論に使用する

変換された Hugging Face モデルを Hugging Face と DeepSpeed に基づいてオフライン推論に使用できます。たとえば、ターミナルタブの 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. PAI コンソールにログインします。ページの上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。

  2. [サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。

  3. [カスタムデプロイ] ページで、次の表で説明されているパラメーターを設定します。他のパラメーターにはデフォルト値を使用できます。

    パラメーター

    説明

    基本情報

    サービス名

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

    環境情報

    デプロイ方法

    この例では、[イメージベースのデプロイ][Web アプリを有効にする] を選択します。

    イメージ設定

    [イメージアドレス] を選択し、フィールドに eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.4-vllm を入力します。

    ストレージのマウント

    [汎用型 NAS] を選択し、[汎用 NAS] をクリックして次のパラメーターを設定します:

    • ファイルシステム: データセットが作成されたベースとなる汎用型 NAS ファイルシステム。

    • マウントポイント: データセットが作成されたベースとなるマウントポイント。

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

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

    コマンド

    この例では、次のコマンドが実行されます: python webui/webui_server.py --port=8000 --model-path=/qwen-7b --tensor-parallel-size 1 --backend=vllm

    ここで:

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

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

    ポート番号

    この例では、ポート 8000 が使用されます。

    リソース情報

    リソースタイプ

    この例では、[リソースクォータ] が選択されています。

    リソースクォータ

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

    インスタンス

    Qwen-7B モデルの場合、各インスタンスは次のリソースを使用します:

    • VCPU: 16

    • メモリ (GB): 64

    • GPU: 1

    VPC 設定

    VPC

    NAS マウントポイントパラメーターを設定すると、システムは指定された NAS ファイルシステムの VPC、vSwitch、およびセキュリティグループを自動的に照合します。

    vSwitch

    セキュリティグループ名

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

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

モデルサービスを呼び出す

モデルサービスがデプロイされた後、サービスを呼び出して推論を実行できます。次の手順を実行します:

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

    image

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