このトピックは、基礎モデル開発者が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
データセットは、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モデルの準備
このベストプラクティスに記載されている方法のいずれかを使用して、モデルをダウンロードできます。 以下の手順を実行します。
DSWの開発環境に移動します。
PAIコンソールにログインします。
ページの左上隅で、中国 (Ulanqab) リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
管理するDSWインスタンスを検索し、アクション列の開くをクリックします。
上部のナビゲーションバーで、[ターミナル] をクリックします。 このタブで、[ターミナルの作成] または右上隅のプラス (+) アイコンをクリックします。
Qwenモデルをダウンロードします。
ModelScopeコミュニティからモデルをダウンロード
ターミナルタブで次のコマンドを実行してModelScopeをインストールします。
次のコマンドを実行して、Python環境に移動します。
次のサンプルコードは、Qwen-7Bモデルのパッケージをダウンロードします。
Ctrl + D
キーを押してPython環境を終了します。次のコマンドを実行して、ダウンロードしたモデルを対応するフォルダーに移動します。
pip install modelscope
python
# ### 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
# 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
プロセスデータを自分で
オープンソースの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
[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
[ターミナル] タブで次のコマンドを実行し、データを複数のグループに分割し、生成された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
事前トレーニングに使用されるデータセットをMMAP形式で生成します。
MMAPは、データが予めトークン化されたファイル形式である。 これにより、特に大量のデータを処理する場合に、トレーニングおよび微調整中にデータセットからデータを読み取るのに必要な時間が短縮されます。 以下の手順を実行します。
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
[ターミナル] タブで次のコマンドを実行して、データセットを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 | テンソルの並列度のサイズ。トレーニングのサイズと同じでなければなりません。 サイズは、モデルパラメータの数によって異なります。 モデル形式を変換するときは、サイズを変更する必要があります。
|
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サーバーでモデルをトレーニングするように分散ジョブを構成できます。 以下の手順を実行します。
ジョブの作成ページに移動します。
PAI コンソールにログインします。 リージョンとワークスペースを選択します。 次に、[ディープラーニングコンテナ (DLC) の入力] をクリックします。
[ディープラーニングコンテナ (DLC)] ページで、[ジョブの作成] をクリックします。
[ジョブの作成] ページで、次の表に示すパラメーターを設定します。 他のパラメーターにはデフォルト値を使用します。 詳細については、「トレーニングジョブの送信」をご参照ください。
パラメーター
説明
基本情報
ジョブ名
トレーニングジョブの名前。 この例では、値は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/
と入力します。
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を入力します。
[OK] をクリックします。 Deep Learning Containers (DLC) ページに移動します。 ジョブの状態がSucceededに変わると、トレーニングジョブが実行されます。
監視付き微調整の実行
スタンドアロンジョブを送信してDSWでモデルを微調整したり、分散ジョブを送信してDLCの複数のマルチGPUサーバーでモデルを微調整したりできます。 微調整プロセスは約2時間続きます。 ジョブの実行後、モデルファイルは /mnt/workspace/output_megatron_qwen/
ディレクトリにエクスポートされます。
モデルを微調整する前に、ステップ2: 事前トレーニング用のデータの準備に進みます。 JSONファイルをダウンロードするには、Use the small-scale sample data processing by PAIタブのサンプルコードを使用します。
モデルを微調整します。
スタンドアロンジョブを実行して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に基づくモデルを使用してオフライン推論を実行し、モデルの効果を評価できます。 以下の手順を実行します。
テストサンプルを含むpred_input.jsonlファイルをダウンロードし、DSWの
/mnt/workspace
ディレクトリにアップロードします。 詳細については、「データファイルのアップロードまたはダウンロード」をご参照ください。説明推論に使用されるデータは、微調整の場合と同じ方法で整理する必要があります。
トレーニング前の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.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
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に変換するかどうかを指定します。
をコピーします。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ファイルをコピーする必要はありません。
手順6: モデルをモデルサービスとしてデプロイし、モデルサービスを呼び出す
オフライン推論を実行し、モデルの効果を評価した後、変換されたHugging Faceモデルをオンラインモデルサービスとしてデプロイし、実際の運用環境でモデルサービスを呼び出して推論を実行できます。 以下の手順を実行します。
モデルをモデルサービスとして展開
PAI コンソールにログインします。 ページ上部のリージョンを選択します。 次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) の入力] をクリックします。
[サービスのデプロイ] をクリックします。 [カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、次の表に示すパラメーターを設定します。 他のパラメーターにはデフォルト値を使用します。
パラメーター
説明
基本情報
サービス名
モデルサービスのカスタム名。 名前はリージョン内で一意である必要があります。 この例では、値はtest_qwenに設定されています。
環境情報
デプロイ方法
この例では、[イメージベースのデプロイ] および [Webアプリの有効化] を選択します。
イメージ設定
画像アドレスを選択し、フィールドに
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/llm-inference:vllm-0.2.1-v4
と入力します。モデル設定
[汎用NAS] を選択し、次のパラメーターを設定します。
ファイルシステムの選択: データセットの作成に基づく汎用NASファイルシステム。
マウントターゲット: データセットの作成に基づくマウントターゲット。
ファイルシステムパス: 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が使用されます。
リソースの配置
リソースタイプ
この例では、[リソースクォータ] が選択されています。
リソースクォータ
購入したLingjunリソースに対して作成されたリソースクォータを選択します。
[インスタンス数]
Qwen-7Bモデルの場合、各インスタンスは次のリソースを使用します。
vCPU: 16
メモリ (GB): 64
GPU: 1
VPC設定
[VPC]
NASマウントターゲットパラメーターを設定すると、システムは指定されたNASファイルシステムの仮想プライベートクラウド (VPC) 、vSwitch、およびセキュリティグループと自動的に一致します。
vSwitch
セキュリティグループ名
[デプロイ] をクリックします。
サービスの状態が [実行中] に変わると、サービスがデプロイされます。
モデルサービスの呼び出し
モデルサービスのデプロイ後、サービスを呼び出して推論を実行できます。 以下の手順を実行します。
[推論サービス] タブで、呼び出すサービスを見つけ、[サービスの種類] 列の [Webアプリの表示] をクリックします。
WebUIページで、推論を実行します。