このガイドでは、大規模言語モデル (LLM) 開発者が Lingjun インテリジェントコンピューティングプラットフォームを使い始めるための手順を説明します。Qwen-7B、Qwen-14B、Qwen-72B などの Qwen LLM の完全な開発ワークフローを学びます。このワークフローには、効率的な分散トレーニング、3 段階の命令チューニング、オフラインモデル推論、オンラインサービスデプロイが含まれます。このトピックでは、Qwen-7B モデルを使用してプロセスを説明します。
前提条件
このガイドでは、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 Serverless の料金詳細」をご参照ください。リソースの購入とクォータの作成方法の詳細については、「リソースグループの作成と Lingjun リソースの購入」および「リソースクォータの作成」をご参照ください。
モデルサイズ
フルパラメーター トレーニングリソース
推論リソース (最小)
Megatron トレーニングモデルセグメント
7B
8 × gu7xf GPU、8 × gu7ef GPU
1 × V100 (32 GB VRAM)、1 × A10 (24 GB VRAM)
TP: 1, PP: 1
14B
8 × gu7xf GPU、8 × gu7ef GPU
2 × V100 (32 GB VRAM)、2 × A10 (24 GB VRAM)
TP: 2, PP: 1
72B
4 × 8 gu7xf GPU、4 × 8 gu7ef GPU
6 × V100 (32 GB VRAM)、2 × gu7xf GPU
TP: 8, PP: 2
-
トレーニングファイルと結果を保存するために、汎用 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 タブで、ランタイムイメージを以下に設定します:
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 モデルの準備
このトピックでは、モデルをダウンロードする 3 つの方法を提供します。次の手順に従います。
-
PAI DSW 開発環境に移動します。
-
PAI コンソールにログインします。
-
ページ左上で、サービスを使用するリージョンとして中国 (ウランチャブ) を選択します。
-
左側のナビゲーションウィンドウで、Workspaces をクリックします。表示されたページで、管理するワークスペースの名前をクリックします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
対象のインスタンスのActions 列で、Open をクリックします。
-
-
上部のメニューバーで、[ターミナル] をクリックします。表示されたタブで、create a terminal をクリックします。
-
Qwen モデルをダウンロードします。
ModelScope コミュニティからモデルをダウンロード
-
ターミナルで、次のコマンドを実行して ModelScope をインストールします。
-
次のコマンドを実行して、Python 環境に入ります。
-
次のコードは、Qwen-7B モデルのモデルファイルをダウンロードする方法を示しています。
-
Ctrl+Dを押して Python 環境を終了します。 -
次のコマンドを実行して、ダウンロードした Qwen モデルを対応するフォルダに移動します。
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/${ckpt_folder_with_hf_suffix} mkdir -p /mnt/workspace/qwen-ckpts/qwen-7b-hf # cp -r ${path_to_downloaded_model}/* /mnt/workspace/qwen-ckpts/${ckpt_folder_with_hf_suffix} cp -r /root/.cache/modelscope/hub/qwen/Qwen-7B/* /mnt/workspace/qwen-ckpts/qwen-7b-hfHuggingFace コミュニティからモデルをダウンロード
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 インスタンスで事前学習データを準備することを推奨します。このガイドでは、研究目的のみの WuDaoCorpora2.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
自分でデータを処理
-
オープンソースの WuDaoCorpora2.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 -
ターミナルで、次のコマンドを実行して Wudao データに対してデータクレンジングとファイル形式変換を実行します。これにより、マージされた merged_wudao_cleaned.json ファイルが生成されます。
#! /bin/bash set -ex # 生データが保存されているパスを設定します。 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 # 前のセクションとは異なり、キーパラメーターが追加され、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.zst -
MMAP 形式の事前学習データセットを作成します。
MMAP は、事前トークン化済みのデータ形式であり、トレーニングおよびファインチューニング中にデータ読み取りの待機時間を短縮します。これは、特に大規模なデータを処理する場合に有利です。次の手順に従います。
-
DSW ターミナルで、次のコマンドを実行して、Megatron のモデルトレーニングツールである PAI-Megatron-Patch のソースコードを DSW の作業ディレクトリ
/mnt/workspace/にコピーします。cd /mnt/workspace/ # 方法 1: オープンソースのウェブサイトからトレーニングコードを取得します。 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
Megatron Patch コードのパス。
input_data_dir=$3
パッケージ化された WuDao データセットを含むフォルダのパス。
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 でモデルをトレーニングできます。
モデルフォーマットの変換
HuggingFace モデルファイルを 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
HuggingFace モデルを Megatron フォーマットに変換
ターミナルで、次のコマンドを実行して PAI が提供するモデル変換ツールを使用し、HuggingFace モデルファイルを 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 |
HuggingFace モデルファイルのパス。 |
|
TARGET_CKPT_PATH=$3 |
変換された Megatron モデルを保存するパス。 |
|
TP=$4 |
テンソル並列処理シャードの数。これはトレーニングに使用される数と同じでなければなりません。シャードの数はモデルサイズによって異なります。モデルを変換する際に、必要に応じてこのパラメーターを修正してください。
|
|
PP=$5 |
パイプライン並列処理シャードの数。これはトレーニングに使用される数と同じでなければなりません。シャードの数はモデルサイズによって異なります。モデルを変換する際に、必要に応じてこのパラメーターを修正してください。
|
|
MN=$6 |
モデル名:qwen-7b、qwen-14b、または qwen-72b。 |
|
EXTRA_VOCAB_SIZE=$7 |
追加の語彙サイズ。 |
|
mg2hf=$8 |
Megatron モデルを HuggingFace モデルに変換するかどうかを指定します。 |
事前学習済みモデル
単一の 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 での 1 回のトレーニング反復あたりのサンプル数: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} |
VRAM 使用量を削減するために 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 分散事前学習済みモデル
単一インスタンスでのデバッグ後、DLC 環境でマルチ GPU サーバーを使用した分散タスクを設定できます。次の手順に従います。
[ジョブの作成] ページに移動します。
「PAI コンソール」にログインします。ページ上部で対象のリージョンとワークスペースを選択し、[ディープラーニングコンテナ (DLC)] をクリックします。
ディープラーニングコンテナ (DLC) ページで、Create Job をクリックします。
-
Create Job ページで、次の主要なパラメーターを設定し、その他のパラメーターはデフォルト値のままにします。詳細については、「トレーニングタスクを作成する」をご参照ください。
パラメーター
説明
Basic Information
Job Name
カスタムタスク名を入力します。このガイドでは test_qwen_dlc を使用します。
Environment Information
Image Configuration
[Image Address] を選択し、テキストボックスに
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:作成した 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
Resource Type を選択します。
Resource Type
Lingjun リソース用に作成したリソースクォータを選択します。
Framework
PyTorch を選択します。
Job Resource
Worker ノードに次のパラメーターを設定します。
-
Nodes: 2。 マルチノードトレーニングを実行するには、Nodes を必要な台数に設定します。
-
GPUs: 8
-
vCPUs: 90
説明CPU コアの数は 96 を超えることはできません。
-
Memory (GiB): 1024
-
Shared Memory (GiB):1024
-
-
OK をクリックします。ページは自動的に Deep Learning Containers (DLC) ページに移動します。Status が 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 回のトレーニング反復あたりのサンプル数:1、2、4、または 8。
GLOBAL_BATCH_SIZE=$5
1 回のファインチューニング反復あたりのサンプル総数: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}
VRAM 使用量を削減するために 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 を以下のように設定します。その他のパラメーター設定については、「手順 2: モデルの事前学習」をご参照ください。
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
Megatron Patch コードのパス。
CHECKPOINT_PATH=$3
トレーニングフェーズでモデルが保存されたパス。
重要これをモデルのパスに置き換えてください。
MODEL_SIZE=$4
モデルサイズ:7B、14B、または 72B。
TP=$5
モデル並列処理の度合い。
重要-
このパラメーターが 1 に設定されている場合、単一の GPU を使用して推論できます。
-
このパラメーターが 1 より大きい値に設定されている場合、対応する数の GPU を使用して推論する必要があります。
BS=$6
各 GPU での 1 回の推論反復あたりのサンプル数:1、4、または 8。
SEQ_LEN=$7
シーケンス長:256、512、または 1024。
PAD_LEN=$8
PAD 長:テキストがパディングされる長さ。
EXTRA_VOCAB_SIZE=${9}
モデル変換中に追加されたトークンの数:
-
Qwen-7B: 85。
-
Qwen-14B: 213。
-
Qwen-72B: 213。
PR=${10}
推論に使用される精度:fp16 または bf16。
TOP_K=${11}
top-k フィルタリングのために保持する最も確率の高い語彙トークンの数 (0 から n):0、5、10、または 20。
INPUT_SEQ_LEN=${12}
入力シーケンス長:512。
OUTPUT_SEQ_LEN=${13}
出力シーケンス長:256。
INPUT_FILE=${14}
推論用のテキストファイル:pred_input.jsonl。各行は 1 つのサンプルです。
OUTPUT_FILE=${15}
推論用の出力ファイル:qwen_pred.txt。
TOP_P=${16}
top-p フィルタリングの累積確率 (0 から 1):0、0.85、または 0.95。
説明TOP_K と TOP_P のうち、どちらか一方のみがゼロ以外にできます。
TEMPERATURE=${17}
(サンプリング)(ポリシー) における温度ペナルティ:1–n。
REPETITION_PENALTY=${18}
繰り返しのペナルティ。値は 1 から 2 の範囲です。デフォルト値は 1.2 です。
-
ステップ 5: モデルフォーマットの変換
オフライン推論を完了し、モデルのパフォーマンスが期待どおりであれば、トレーニング済みの Megatron モデルを HuggingFace フォーマットに変換できます。その後、変換された HuggingFace モデルをオンラインサービスデプロイに使用できます。次の手順に従います。
-
ターミナルで、次のコマンドを実行して、トレーニング済みの Megatron モデルを HuggingFace フォーマットに変換します。
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/${path}/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
変換された HuggingFace モデルを保存するパス。
TP=$4
テンソル並列処理シャードの数。これはトレーニングに使用される数と同じでなければなりません。
PP=$5
パイプライン並列処理シャードの数。これはトレーニングに使用される数と同じでなければなりません。
MN=$6
モデル名:qwen-7b、qwen-14b、または qwen-72b。
EXTRA_VOCAB_SIZE=$7
追加の語彙サイズ。
mg2hf=$8
Megatron モデルを HuggingFace モデルに変換するかどうかを指定します。
-
-
オープンソースの HuggingFace モデルフォルダ
/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: モデルサービスのデプロイと呼び出し
オフライン推論を完了し、モデルのパフォーマンスを評価した後、変換された HuggingFace モデルをオンラインサービスとしてデプロイし、本番環境で推論のために呼び出すことができます。次の手順に従います。
モデルサービスのデプロイ
-
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
マウントタイプとして NAS を選択します。Standard NAS をクリックし、以下のパラメーターを設定します。
-
Select File System:データセットの作成に使用した NAS ファイルシステムを選択します。
-
Mount Target:データセットの作成に使用したマウントポイントを選択します。
-
File System Path:NAS に保存されている変換済み HuggingFace モデルのパスに設定します。このガイドでは
/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 の数に基づいて調整する必要があります。7B モデルの場合は 1 に、72B モデルの場合は 8 に設定します (8 GPU インスタンスが必要)。
Port Number
これを 8000 に設定します。
Resource Information
Resource Type
Resource Quota を選択します。
Resource Quota
Lingjun リソース用に作成したリソースクォータを選択します。
Instance Count
モデルと選択したリソースに基づいて設定します。 7B モデルの場合、Instance Count を 1 に設定します。
Deployment
7B モデルの場合、各インスタンスが使用するリソースを次のように設定します。
-
vCPUs: 16。
-
Memory (GB): 64.
-
GPUs:1。
Service Access
VPC
NAS マウントポイントを設定すると、システムは自動的に VPC、vSwitch、およびセキュリティグループをプリセットの NAS ファイルシステムと一致させます。
vSwitch
Security Group Name
-
-
Deploy をクリックします。
[Service Status]が[Running]に変わると、サービスがデプロイされます。
サービスの呼び出し
サービスがデプロイされた後、推論のために呼び出すことができます。次の手順に従います。
-
サービス一覧で、対象のサービスの名前をクリックします。ページの右上隅で、View Web App をクリックします。
-
WebUI ページで、モデル推論を実行します。