このトピックでは、Platform for AI (PAI) の ChatLearn を使用して、Llama2-7B モデルのアライメントトレーニングを実行する方法について説明します。
背景情報
PAI の ChatLearn は、大規模アライメントのための柔軟で使いやすく、効率的なトレーニングフレームワークです。ChatLearn は、強化学習による人間フィードバック (RLHF)、直接選好最適化 (DPO)、OnlineDPO、グループ相対ポリシー最適化 (GRPO) などのアライメントトレーニングメソッドを提供します。ChatLearn は、モデルのカスタムパイプラインもサポートしています。異なるバックエンドを組み合わせてモデルを構築できます。たとえば、Megatron-LM を使用してトレーニングを高速化し、vLLM を使用して推論を高速化できます。
前提条件
このトピックで説明されている操作を実行する前に、以下の要件が満たされていることを確認してください。
ワークスペースが作成されていること。詳細については、「ワークスペースを作成する」をご参照ください。
凌群リソースクォータが準備されていること。この例では、ml.gu7xf.c96m1600.8-gu108 などの gu7xf インスタンスタイプが使用されます。凌群リソースの購入方法については、「リソースグループを作成し、凌群リソースを購入する」をご参照ください。凌群リソースクォータの作成方法については、「凌群リソースクォータ」をご参照ください。
汎用 NAS ファイルシステムが作成されていること。詳細については、「ファイルシステムを作成する」をご参照ください。
トレーニングに必要なファイルと結果ファイルを保存するために、汎用 NAS ファイルシステムに基づいてデータセットが作成されていること。デフォルトのマウントパスは
/mnt/data/
として構成されています。詳細については、「データセットの作成と管理」をご参照ください。
制限事項
このベストプラクティスは、中国 (ウランチャブ) リージョンでのみサポートされています。
凌群リソース、NAS ファイルシステム、Deep Learning Containers (DLC) ジョブは、同じリージョンに存在する必要があります。
凌群リソースクォータと NAS ファイルシステムは、同じ VPC に存在する必要があります。
準備を行う
コードを準備する
ターミナルで、次のコマンドを実行してコードをダウンロードします。
ChatLearn コードをダウンロードします。
git clone https://github.com/alibaba/ChatLearn.git
Megatron-LM コードをダウンロードします。
説明Megatron-LM フレームワークに基づいて配置トレーニングを実行する場合は、Megatron-LM コードをダウンロードする必要があります。
git clone https://github.com/NVIDIA/Megatron-LM.git # パスを実際の値に置き換えます。 cd /**/Megatron-LM git checkout 5161b1689
ダウンロードしたコードファイルを、ディレクトリ階層に基づいて汎用 NAS ファイルシステムのルートディレクトリ(/)にアップロードします。詳細については、「NAT ゲートウェイを使用してデータセンターから NAS ファイルシステムにアクセスする」をご参照ください。独自のメソッドを使用してコードファイルを NAS ファイルシステムにアップロードすることもできます。
トレーニング データを準備する
ChatLearn 配置トレーニング用の以下のデータを準備し、トレーニングデータを NAS ファイルシステムにアップロードします。データの準備方法の詳細については、「Data」をご参照ください。詳細については、「NAT ゲートウェイを使用してデータセンターから NAS ファイルシステムにアクセスする」をご参照ください。
教師ありファインチューニング ( SFT ) トレーニングデータを準備し、NAS の
/sft
ディレクトリにアップロードします。報酬トレーニングデータを準備し、NAS の
/rm
ディレクトリにアップロードします。RLHF 配置トレーニングデータを準備し、NAS の
/alignment
ディレクトリにアップロードします。
手順
ステップ 1: SFT トレーニングを実行する
SFT は、ラベル付きデータを使用して、事前学習済み large 言語モデル(LLM)を微調整します。この例では、事前学習済みモデルをダウンロードし、SFT トレーニングを開始する必要があります。モデルをトレーニングするには、次の手順を実行します。
1. 事前トレーニング済みモデルをダウンロードして変換する
事前トレーニング チェックポイントをダウンロードします。
Hugging Face Hub の Llama-2-7b-hf など、Hugging Face Transformers のモデルを使用できます。また、オンプレミス マシンに保存されている SFT モデルを使用することもできます。この例では、llama-2-7b-hf を使用します。
ダウンロードした Llama2 モデルを、ディレクトリ階層に基づいて汎用 NAS ファイルシステムのルートディレクトリ (
/
) にアップロードします。詳細については、「NAT ゲートウェイを使用してデータセンターから NAS ファイルシステムにアクセスする」をご参照ください。Hugging Face Transformers モデルを Megatron-LM モデルフォーマットに変換します。
[ジョブの作成] ページに移動します。
PAI コンソール にログオンします。リージョンとワークスペースを選択します。次に、[deep Learning Containers (DLC) に入る] をクリックします。
[deep Learning Containers (DLC)] ページで、[ジョブの作成] をクリックします。
[ジョブの作成] ページで、パラメーターを構成します。次の表でパラメーターについて説明します。その他のパラメーターについては、「トレーニングジョブを送信する」をご参照ください。
パラメーター
説明
環境情報
ノードイメージ
[イメージアドレス] を選択し、フィールドに次のイメージアドレスを入力します。
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
データセット
[カスタムデータセット] をクリックし、次のパラメーターを構成します。
カスタムデータセット: 汎用 NAS ベースのデータセットを選択します。
マウントパス: デフォルトのマウントパス
/mnt/data/
を使用します。
起動コマンド
次のコマンドを構成します。
export MEGATRON=path-to-megatron-lm export CHATLEARN=path-to-chatlearn cd ${CHATLEARN}/examples/megatron/ TP=$num_of_tp \ PP=$num_of_pp \ LOAD_PATH=path-to-hf-model \ TOKENIZER_MODEL=$LOAD_PATH/tokenizer.model \ SAVE_PATH=path-to-megatron-model \ bash scripts/convert_hf_to_megatron.sh
次のパラメーターに注意してください。
MEGATRON: クローンされた Megatron-LM コードリポジトリのパス。この例では、
/mnt/data/Megatron-LM
パスを使用します。CHATLEARN: クローンされた ChatLearn コードリポジトリのパス。この例では、
/mnt/data/ChatLearn
パスを使用します。LOAD_PATH: Llama2 モデルのパス。この例では、
/mnt/data/llama-2-7b-hf
パスを使用します。SAVE_PATH: 変換された Megatron-LM モデルのパス。この例では、
/mnt/data/llama-2-7b-hf-to-megatron
パスを使用します。次のセクションでは、TP (tensor_model_parallel_size) パラメーターと PP (
pipeline_model_parallel_size
) パラメーターを構成する方法について説明します。Llama2-7B モデルの場合、システムはモデルを
TP が 4、PP が 1
に設定されたチェックポイントに変換します。Llama2-13B モデルの場合、システムはモデルを
TP が 8、PP が 1
に設定されたチェックポイントに変換します。Llama2-70B モデルの場合、システムはモデルを
TP が 8、PP が 4
に設定されたチェックポイントに変換します。
リソース情報
リソースタイプ
[凌雲 (lingjun) AI コンピューティングサービス] を選択します。
ソース
[リソースクォータ] を選択します。
リソースクォータ
リソースクォータを選択します。
フレームワーク
[pytorch] を選択します。
ジョブリソース
ワーカーノードに対して次のパラメーターを構成します。
ノード数: 1
Vcpu: 80
メモリ (gib): 800
共有メモリ (gib): 800
GPU: 1
[確認] をクリックします。
[Deep Learning Containers (DLC)] ページが表示されます。ジョブが正常に実行されると、モデル変換は成功します。
2. SFT トレーニングを有効にする
[ジョブの作成] ページに移動します。
PAI コンソール にログインします。 リージョンとワークスペースを選択します。 次に、[deep Learning Containers (DLC) に入る] をクリックします。
[deep Learning Containers (DLC)] ページで、[ジョブの作成] をクリックします。
[ジョブの作成] ページで、パラメーターを構成します。 次の表でパラメーターについて説明します。 その他のパラメーターの詳細については、「トレーニングジョブを送信する」をご参照ください。
パラメーター
説明
環境情報
ノードイメージ
[イメージアドレス] を選択し、フィールドに次のイメージアドレスを入力します:
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
.データセット
[カスタムデータセット] をクリックし、次のパラメーターを構成します:
カスタムデータセット: 汎用 NAS ベースのデータセットを選択します。
マウントパス: デフォルトのマウントパス
/mnt/data/
を使用します。
起動コマンド
次のコマンドを構成します:
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B LOAD_PATH=$MEGATRON_LLAMA2_CKPT_PATH \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ DATASET_PATH=$DATASET_ROOT/sft/ \ bash scripts/train_sft_llama.sh
次のパラメーターに注意してください:
MEGATRON: クローンされた Megatron-LM コードリポジトリのパス。 この例では、
/mnt/data/Megatron-LM
パスが使用されます。CHATLEARN: クローンされた ChatLearn コードリポジトリのパス。 この例では、
/mnt/data/ChatLearn
パスが使用されます。LOAD_PATH: 変換された Megatron-LM モデルのパス。 この例では、
/mnt/data/llama-2-7b-hf-to-megatron
パスが使用されます。TOKENIZER_MODEL: Llama2 トークナイザーに必要な tokenizer.model ファイルのパス。 この例では、
/mnt/data/llama-2-7b-hf/tokenizer.model
パスが使用されます。DATASET_PATH: SFT トレーニングデータセットのパス。 この例では、
/mnt/data/sft/
パスが使用されます。
デフォルトでは、トレーニング中に生成されたログとトレーニング済みモデルは、
${CHATLEARN}/output/sft
パスに保存されます。 CHECKPOINT_PATH 環境変数を使用して、トレーニング済みモデルのパスを構成できます。 詳細については、${CHATLEARN}/examples/megatron/scripts/
パスにある train_sft_llama.sh スクリプトをご参照ください。リソース情報
リソースタイプ
[凌駿 AI コンピューティングサービス] を選択します。
ソース
[リソースクォータ] を選択します。
リソースクォータ
リソースクォータを選択します。
フレームワーク
PyTorch を選択します。
ジョブリソース
ワーカーノードに対して次のパラメーターを構成します:
ノード数: 1
Vcpu: 80
メモリ (gib): 800
共有メモリ (gib): 800
GPU: 8
トレーニングスクリプトには、次のリソース構成が必要です。 ビジネス要件に基づいてパラメーターを変更できます。
llama2-7B RLHF: 8 GPU
llama2-13B RLHF: 8 GPU を搭載した 2 グループ
llama2-70B RLHF: 8 GPU を搭載した 4 グループ
[確認] をクリックします。
ステップ 2: 報酬モデルをトレーニングする
報酬モデルの目標は、RLHF においてモデルの応答が人間のプリファレンスにどの程度一致しているかを評価することです。報酬モデルは、プロンプトと応答を入力として受け取り、応答の品質を示す単一の値を返します。
DPO トレーニング メソッドでは、報酬モデルのトレーニングは必要ありません。
[ジョブの作成] ページに移動します。
PAI コンソール にログインします。 リージョンとワークスペースを選択します。 次に、[deep Learning Containers (DLC) に入る] をクリックします。
[deep Learning Containers (DLC)] ページで、[ジョブの作成] をクリックします。
[ジョブの作成] ページで、パラメーターを構成します。 次の表でパラメーターについて説明します。 その他のパラメーターについては、「トレーニングジョブを送信する」をご参照ください。
パラメーター
説明
環境情報
ノードイメージ
[イメージアドレス] を選択し、フィールドに次のイメージアドレスを入力します:
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
.データセット
[カスタムデータセット] をクリックし、次のパラメーターを構成します:
カスタムデータセット: 汎用 NAS ベースのデータセットを選択します。
マウントパス: デフォルトのマウントパス
/mnt/data/
を使用します。
起動コマンド
次のコマンドを構成します:
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm cd ${CHATLEARN}/examples/megatron/ LOAD_PATH=path-to-sft-ckpt \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ DATASET_PATH=$DATASET_ROOT/rm \ bash scripts/train_reward_llama.sh
次のパラメーターに注意してください:
MEGATRON: クローンされた Megatron-LM コードリポジトリのパス。 この例では、
/mnt/data/Megatron-LM
パスが使用されています。CHATLEARN: クローンされた ChatLearn コードリポジトリのパス。 この例では、
/mnt/data/ChatLearn
パスが使用されています。LOAD_PATH: SFT によって生成されたチェックポイントパスです。 この例では、
${CHATLEARN}/output/sft/
パスが使用されています。TOKENIZER_MODEL: Llama2 トークナイザーに必要な tokenizer.model ファイルのパス。 この例では、
/mnt/data/llama-2-7b-hf/tokenizer.model
パスが使用されています。DATASET_PATH: 報酬トレーニングデータセットのパス。 この例では、
/mnt/data/rm
パスが使用されています。
デフォルトでは、トレーニング中に生成されたログとトレーニング済みモデルは、
${CHATLEARN}/output/reward
パスに保存されます。 CHECKPOINT_PATH 環境変数を使用して、トレーニング済みモデルのパスを構成できます。 詳細については、${CHATLEARN}/examples/megatron/scripts/
パスにある train_reward_llama.sh スクリプトをご参照ください。リソース情報
リソースタイプ
[凌駿 AI コンピューティングサービス] を選択します。
ソース
[リソースクォータ] を選択します。
リソースクォータ
リソースクォータを選択します。
フレームワーク
[pytorch] を選択します。
ジョブリソース
ワーカーノードに対して次のパラメーターを構成します:
ノード数: 1
Vcpu: 80
メモリ (gib): 800
共有メモリ (gib): 800
GPU: 8
トレーニングスクリプトには、次のリソース構成が必要です。 ビジネス要件に基づいてパラメーターを変更できます。
llama2-7B RLHF: 8 GPU
llama2-13B RLHF: 8 GPU を搭載した 2 グループ
llama2-70B RLHF: 8 GPU を搭載した 4 グループ
[確認] をクリックします。
ステップ 3: 配置トレーニングを実行する
RLHF トレーニング方法
ChatLearn は、RLHF、DPO、OnlineDPO、GRPO など、複数の配置トレーニングメソッドをサポートしています。この例では、Llama2-7B モデルを使用して、配置トレーニングを実行する方法について説明します。配置トレーニングを実行するには、次の手順を実行します。
[ジョブの作成] ページに移動します。
PAI コンソール にログオンします。 リージョンとワークスペースを選択します。 次に、[deep Learning Containers (DLC) に入る] をクリックします。
[deep Learning Containers (DLC)] ページで、[ジョブの作成] をクリックします。
[ジョブの作成] ページで、パラメーターを構成します。 次の表でパラメーターについて説明します。 その他のパラメーターの詳細については、「トレーニングジョブを送信する」をご参照ください。
パラメーター
説明
環境情報
ノードイメージ
[イメージアドレス] を選択し、フィールドに次のイメージアドレスを構成します:
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/pytorch-training:2.4.0-gpu-py3.10-cu12.5-ngc24.06-ubuntu22.04
.データセット
[カスタムデータセット] をクリックし、次のパラメーターを構成します:
カスタムデータセット: 汎用 NAS ベースのデータセットを選択します。
マウントパス: デフォルトのマウントパス
/mnt/data/
を使用します。
起動コマンド
次のコマンドを構成します:
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/alignment/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ REWARD_LOAD=path-to-rm-ckpt \ REWARD_LOAD_ITERATION=1000 \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ tokenizer_load=${HF_MODEL_DIR} bash scripts/train_rlhf_llama.sh
次のパラメーターに注意してください:
MEGATRON: クローンされた Megatron-LM コードリポジトリのパス。 この例では、
/mnt/data/Megatron-LM
パスが使用されます。CHATLEARN: クローンされた ChatLearn コードリポジトリのパス。 この例では、
/mnt/data/ChatLearn
パスが使用されます。DATASET_PATH: 配置トレーニングデータセットのパス。 この例では、
/mnt/data/alignment/train.jsonl
パスが使用されます。POLICY_LOAD: SFT によって生成されたチェックポイントパス。 ポリシーモデルと参照モデルは、SFT からのチェックポイントを使用して初期化されます。 この例では、
${CHATLEARN}/output/sft/hh_sft***/
パスが使用されます。REWARD_LOAD: 報酬モデルのトレーニングによって生成されたチェックポイントパス。 この例では、
${CHATLEARN}/output/reward/reward_hh***
パスが使用されます。REWARD_LOAD_ITERATION: チェックポイントのロードに使用される反復回数。 報酬モデルと値モデルは、報酬モデルの重みに基づいて初期化されます。
TOKENIZER_MODEL: Llama2 トークナイザーに必要な tokenizer.model ファイルのパス。 この例では、
/mnt/data/llama-2-7b-hf/tokenizer.model
パスが使用されます。tokenizer_load: ダウンロードした Hugging Face モデルのパス。 この例では、
/mnt/data/llama-2-7b-hf
パスが使用されます。model_size: この例では、Llama2-7B モデルが使用されます。 llama2-13B または llama2-70B モデルをトレーニングするには、上記のトレーニングスクリプトの
export model_size=llama2-7B
をexport model_size=llama2-13B
またはexport model_size=llama2-70B
に置き換えるだけです。
トレーニングされたモデルは、
${CHATLEARN}/output/**-rlhf
パスに保存されます。リソース情報
リソースタイプ
[凌駿 AI コンピューティングサービス] を選択します。
ソース
[リソースクォータ] を選択します。
リソースクォータ
リソースクォータを選択します。
フレームワーク
[pytorch] を選択します。
ジョブリソース
ワーカーノードに対して次のパラメーターを構成します:
ノード数: 1
Vcpu: 80
メモリ (gib): 800
共有メモリ (gib): 800
GPU: 8
トレーニングスクリプトには、次のリソース構成が必要です。 ビジネス要件に基づいてパラメーターを変更できます。
llama2-7B RLHF: 8 GPU
llama2-13B RLHF: 8 GPU を搭載した 2 つのグループ
llama2-70B RLHF: 8 GPU を搭載した 4 つのグループ
パラメーターを構成した後、[確認] をクリックします。
Deep Learning Containers (DLC) ページで、ジョブ名をクリックして [ジョブの詳細] ページに移動し、ジョブステータスを表示できます。
その他の配置トレーニング メソッド
他の配置トレーニング メソッドは、RLHF トレーニング メソッドと同じです。トレーニング ジョブを作成するときに、起動コマンドを必要な起動コマンドに更新するだけで済みます。次のセクションでは、他の配置トレーニング メソッドの起動コマンドについて説明します。
OnlineDPO/GRPO
OnlineDPO または GRPO のトレーニングプロセスは、RLHF トレーニングプロセスと似ていますが、バリューモデルは必要ありません。次のサンプルコードは、Llama2-7B ポリシーモデルと Llama2-7B 報酬モデルのトレーニングスクリプトを提供します。
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/alignment/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ REWARD_LOAD=path-to-rm-ckpt \ REWARD_LOAD_ITERATION=1000 \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ tokenizer_load=${HF_MODEL_DIR} bash scripts/train_online_dpo_llama.sh
DATASET_PATH 環境変数を、トレーニングメソッドでサポートされているトレーニングデータセットのパスに設定する必要があります。データセットの作成方法の詳細については、「データ」をご参照ください。その他のパラメーターについては、「RLHF トレーニングメソッド」のパラメーター構成をご参照ください。
DPO
次のサンプルコードは、Llama2-7B ポリシーモデルのトレーニングスクリプトを提供します。
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/alignment/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ bash scripts/train_dpo_llama.sh
DATASET_PATH 環境変数を、トレーニングメソッドでサポートされているトレーニングデータセットのパスに設定する必要があります。データセットの作成方法の詳細については、「データ」をご参照ください。その他のパラメーターについては、「RLHF トレーニングメソッド」のパラメーター構成をご参照ください。
GRPO Math
export CHATLEARN=path-to-chatlearn export MEGATRON=path-to-megatron-lm export DATASET_PATH=$DATASET_ROOT/math/train.jsonl cd ${CHATLEARN}/examples/megatron/ export model_size=llama2-7B POLICY_LOAD=path-to-sft-ckpt \ REWARD_LOAD=path-to-rm-ckpt \ REWARD_LOAD_ITERATION=1000 \ TOKENIZER_MODEL=$LLAMA2_TOKENIZER_MODEL \ tokenizer_load=${HF_MODEL_DIR} bash scripts/train_grpo_math_llama.sh
DATASET_PATH 環境変数を、トレーニングメソッドでサポートされているトレーニングデータセットのパスに設定する必要があります。データセットの作成方法の詳細については、「データ」をご参照ください。その他のパラメーターについては、「RLHF トレーニングメソッド」のパラメーター構成をご参照ください。