このトピックは、基盤モデル開発者が 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 モデルの準備
このベストプラクティスで説明されている方法のいずれかを使用してモデルをダウンロードできます。次の手順を実行します:
DSW の開発環境に移動します。
PAI コンソールにログインします。
ページの左上隅で、中国 (ウランチャブ) リージョンを選択します。
左側のナビゲーションウィンドウで、[Workspaces] をクリックします。Workspaces ページで、管理するワークスペースの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
管理する DSW インスタンスを見つけ、[アクション] 列の [開く] をクリックします。
上部のナビゲーションバーで、[ターミナル] をクリックします。このタブで、[ターミナルの作成] または右上隅のプラス (+) アイコンをクリックします。
Qwen モデルをダウンロードします。
ModelScope コミュニティからモデルをダウンロードする
ターミナルタブで次のコマンドを実行して ModelScope をインストールします:
次のコマンドを実行して、Python 環境に移動します:
次のサンプルコードは、Qwen-7B モデルのパッケージをダウンロードします。
Ctrl+Dを押して Python 環境を終了します。次のコマンドを実行して、ダウンロードしたモデルを対応するフォルダに移動します:
pip install modelscopepython# ### モデルとトークナイザーの読み込み 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# 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-hfHugging 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データを独自に処理する
オープンソースの 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ターミナルタブで次のコマンドを実行して、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ターミナルタブで次のコマンドを実行して、生成された 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.zstMMAP 形式で事前学習に使用するデータセットを生成します。
MMAP は、データが事前にトークン化されるファイル形式です。これにより、特に大量のデータを処理する場合に、トレーニングおよびファインチューニング中にデータセットからデータを読み取るのに必要な時間が短縮されます。次の手順を実行します:
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ターミナルタブで次のコマンドを実行して、データセットを 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 | テンソル並列処理のサイズ。トレーニング用と同じである必要があります。サイズはモデルパラメーターの数によって異なります。モデル形式を変換するときにサイズを変更する必要があります。
|
PP=$5 | パイプライン並列処理のサイズ。トレーニング用と同じである必要があります。サイズはモデルパラメーターの数によって異なります。モデル形式を変換するときにサイズを変更する必要があります。
|
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 | ランタイム環境。有効な値:
|
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} | 追加の語彙のサイズ。サイズはモデルパラメーターの数によって異なります。
|
PR=${11} | トレーニング精度。有効な値: fp16 および bf16。 |
TP=${12} | テンソル並列処理のサイズ。 |
PP=${13} | パイプライン並列処理のサイズ。 |
AC=${14} | アクティベーションチェックポイントモード。有効な値:
|
DO=${15} | Megatron に ZeRO-1 オプティマイザーを使用するかどうかを指定します。有効な値:
|
FL=${16} | Flash Attention を有効にするかどうかを指定します。有効な値:
|
SP=${17} | シーケンス並列処理を使用するかどうかを指定します。有効な値:
|
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 サーバーでモデルをトレーニングできます。次の手順を実行します:
[ジョブの作成] ページで、次の表で説明されているパラメーターを設定します。他のパラメーターにはデフォルト値を使用できます。詳細については、「トレーニングジョブの作成」をご参照ください。
パラメーター
説明
基本情報
ジョブ名
トレーニングジョブの名前。この例では、値は 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 を入力します。
[OK] をクリックします。[Deep Learning Containers (DLC)] ページに移動します。ジョブの状態が [成功] に変わると、トレーニングジョブが実行されます。
教師ありファインチューニングを実行する
スタンドアロンジョブを送信して DSW でモデルをファインチューニングするか、分散ジョブを送信して DLC の複数のマルチ GPU サーバーでモデルをファインチューニングできます。ファインチューニングプロセスは約 2 時間続きます。ジョブが実行されると、モデルファイルが /mnt/workspace/output_megatron_qwen/ ディレクトリにエクスポートされます。
モデルをファインチューニングする前に、「ステップ 2: 事前学習用のデータを準備する」に進んでください。[PAI によって処理された小規模なサンプルデータを使用する] タブのサンプルコードを使用して、JSON ファイルをダウンロードします。
モデルをファインチューニングします。
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 に基づいてモデルを使用してオフライン推論を実行し、モデルの効果を評価できます。次の手順を実行します:
テストサンプルを含む pred_input.jsonl ファイルをダウンロードし、そのファイルを DSW の
/mnt/workspaceディレクトリにアップロードします。詳細については、「ファイルのアップロードとダウンロード」をご参照ください。説明推論に使用されるデータは、ファインチューニングに使用されるデータと同じ方法で整理する必要があります。
トレーニング前のモデルディレクトリにあるすべての 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/ターミナルタブで次のコマンドを実行して、モデルを使用してオフライン推論を実行します。推論結果は
/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 モデルをモデルサービスとしてデプロイできます。
ターミナルタブで次のコマンドを実行して、モデル形式を 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 に変換するかどうかを指定します。
オープンソースの 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 ファイルをコピーする必要はないことに注意してください。
ステップ 6: モデルをモデルサービスとしてデプロイし、モデルサービスを呼び出す
オフライン推論を実行してモデルの効果を評価した後、変換された Hugging Face モデルをオンラインモデルサービスとしてデプロイし、実際の生産環境でモデルサービスを呼び出して推論を実行できます。次の手順を実行します:
モデルをモデルサービスとしてデプロイする
PAI コンソールにログインします。ページの上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、次の表で説明されているパラメーターを設定します。他のパラメーターにはデフォルト値を使用できます。
パラメーター
説明
基本情報
サービス名
モデルサービスのカスタム名。名前はリージョン内で一意である必要があります。この例では、値は 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
セキュリティグループ名
[デプロイ] をクリックします。
サービスの状態が [実行中] に変わると、サービスがデプロイされます。
モデルサービスを呼び出す
モデルサービスがデプロイされた後、サービスを呼び出して推論を実行できます。次の手順を実行します:
[推論サービス] タブで、呼び出すサービスを見つけ、[Web アプリの表示] をクリックします。

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