このトピックは、基盤モデル開発者が PAI-Lingjun AI Computing Service を使い始め、Qwen-7B、Qwen-14B、Qwen-72B の基盤モデルを開発するのに役立つことを目的としています。開発プロセスには、分散トレーニング、ファインチューニング、オフライン推論、オンラインデプロイメントが含まれます。この例では、Qwen-7B モデルを使用して、PAI-Lingjun AI Computing Service で 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 億
それぞれ 8 つの gu7xf GPU または 8 つの gu7ef GPU を搭載した 4 台のサーバー
6 つの NVIDIA V100 GPU (32 GB メモリ) または 2 つの gu7xf GPU
TP8 および PP2
トレーニングに必要なファイルと結果ファイルを保存するために、File Storage NAS の汎用 NAS ファイルシステムに基づいてデータセットが作成されていること。デフォルトのマウントディレクトリは
/mnt/data/nasです。詳細については、「データセットの作成と管理」をご参照ください。以下の主要なパラメーターに基づいて DSW インスタンスが作成されていること。詳細については、「DSW インスタンスの作成」をご参照ください。
Resource Quota:購入した Lingjun リソース用に作成されたリソースクォータを選択します。
Instance Type:次のリソース仕様を設定します。
vCPUs: 90
Memory (GiB):1024
Shared Memory (GiB):1024
GPUs:8 以上
Dataset Mounting:Custom Dataset をクリックし、作成したデータセットを選択してから、デフォルトのマウントディレクトリを指定します。
Image Configuration:Image Address をクリックし、次のイメージ URL を入力します:
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm。
このベストプラクティスの操作を Resource Access Management (RAM) ユーザーとして実行する場合、RAM ユーザーに DSW、DLC、および EAS に対する必要な権限が付与されていること。詳細については、「クラウド製品の依存関係と権限付与:DSW」、「クラウド製品の依存関係と権限付与:DLC」、および「EAS の使用に必要な権限の付与」をご参照ください。
制限事項
このベストプラクティスは、中国 (ウランチャブ) リージョンでのみサポートされています。
ステップ 1:Qwen モデルの準備
このベストプラクティスで説明されているいずれかの方法を使用してモデルをダウンロードできます。次の手順を実行します。
DSW の開発環境に移動します。
PAI コンソールにログインします。
ページ左上の隅で、中国 (ウランチャブ) リージョンを選択します。
左側のナビゲーションウィンドウで、Workspaces をクリックします。ワークスペースページで、管理したいワークスペースの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
管理したい DSW インスタンスを見つけ、Actions 列の Open をクリックします。
上部のナビゲーションバーで、[ターミナル] をクリックします。このタブで、create a terminal または右上のプラス (+) アイコンをクリックします。
Qwen モデルをダウンロードします。
ModelScope コミュニティからモデルをダウンロード
ターミナルタブで次のコマンドを実行して ModelScope をインストールします。
次のコマンドを実行して、Python 環境に移動します:
以下は、Qwen-7B モデルのパッケージをダウンロードするサンプルコードです。
Python 環境を終了するには、
Ctrl+Dを押します。以下のコマンドを実行して、ダウンロードしたモデルを対応するフォルダに移動します:
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-pp1Hugging 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 サーバーでモデルをトレーニングするための分散ジョブを設定できます。次の手順を実行します。
[ジョブの作成] ページに移動します。
PAI コンソールにログインし、ページ上部で対象のリージョンとワークスペースを選択し、[Deep Learning Containers (DLC)] をクリックします。
Deep Learning Containers (DLC) ページで、[ジョブの作成] をクリックします。
Create Job ページで、次の表に記載されているパラメーターを設定します。他のパラメーターにはデフォルト値を使用できます。詳細については、「トレーニングジョブの作成」をご参照ください。
パラメーター
説明
Basic Information
Job Name
トレーニングジョブの名前。この例では、値は test_qwen_dlc に設定されています。
Environment Information
Image Configuration
Image Address をクリックし、フィールドに次のイメージ URL を入力します:
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm。Mount dataset
Custom Dataset をクリックし、次のパラメーターを設定します。
Custom Dataset:File Storage NAS の汎用 NAS ファイルシステムに基づいて作成されたデータセットを選択します。
Mount Path:
/mnt/workspace/を入力します。
Startup Command
次のコマンドを入力します。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/Resource Information
Resource Type
[Lingjun リソース] を選択します。
Source
[リソースクォータ] を選択します。
リソースクォータ
購入した Lingjun リソース用に作成されたリソースクォータを選択します。
Framework
[PyTorch] を選択します。
Job Resource
ワーカーノードに次のパラメーターを設定します。
Nodes:2 を入力します。より多くのサーバーでモデルをトレーニングしたい場合は、Nodes パラメーターの値を増やします。
GPUs:8 を入力します。
vCPUs:90 を入力します。
説明CPU コアの数は 96 を超えることはできません。
Memory (GiB):1024 を入力します。
Shared Memory (GiB):1024 を入力します。
OK をクリックします。Deep Learning Containers (DLC) ページに移動します。ジョブの状態が Succeeded に変わると、トレーニングジョブが実行されます。
教師ありファインチューニングの実行
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)] をクリックします。
-
[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
Custom Deployment ページで、次の表に記載されているパラメーターを設定します。他のパラメーターにはデフォルト値を使用できます。
パラメーター
説明
Basic Information
Service Name
モデルサービスのカスタム名。名前はリージョン内で一意である必要があります。この例では、値は test_qwen に設定されています。
Environment Information
Deployment Method
この例では、Image-based Deployment と Enable Web App を選択します。
Image Configuration
Image Address を選択し、フィールドに
eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.4-vllmを入力します。Directly Mount
Standard NAS をクリックし、次のパラメーターを設定します。
Select File System: データセットの作成元となる汎用型 NAS です。
Mount Target: データセットの作成元となるマウントポイント。
File System Path:NAS ファイルシステムに保存されている変換済み Hugging Face モデルのディレクトリ。この例では、
/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1ディレクトリが使用されます。Mount Path:モデルのマウントディレクトリ。この例では、値は
/qwen-7bに設定されています。
Command
この例では、次のコマンドが実行されます:
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 に設定します。
Port Number
この例では、ポート 8000 が使用されます。
Resource Information
Resource Type
この例では、Resource Quota が選択されています。
Resource Quota
購入した Lingjun リソース用に作成されたリソースクォータを選択します。
Instance Count
Qwen-7B モデルの場合、各インスタンスは次のリソースを使用します。
vCPUs: 16
Memory (GB):64
GPUs: 1
[VPC 設定]
VPC
NAS マウントポイントパラメーターを設定すると、システムは指定された NAS ファイルシステムの VPC、vSwitch、およびセキュリティグループを自動的に照合します。
vSwitch
Security Group Name
Deploy をクリックします。
Service Status が Running に変更されると、サービスはデプロイされています。
モデルサービスの呼び出し
モデルサービスがデプロイされた後、サービスを呼び出して推論を実行できます。次の手順を実行します。
[推論サービス] タブで、呼び出したいサービスを見つけ、View Web App をクリックします。

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