このトピックでは、Qwen3 モデルを例として使用します。PAI の PAI-ChatLearn トレーニングフレームワークと Lingjun リソースを使用して、大規模言語モデル (LLM) の効率的な分散強化学習を実行し、トレーニング済みモデルをデプロイする方法について説明します。
1. 事前準備
1.1 開発環境の準備
開始する前に、次のタスクが完了していることを確認してください:
Lingjun リソースを購入し、リソースクォータを作成します。ノード仕様が
ml.gx8xf.8xlarge-gu108のマシンが 2 台必要です。Lingjun リソースのノード仕様の詳細については、「AI コンピューティングリソースの課金」をご参照ください。データセットを作成し、必要なトレーニングファイルと結果ファイルを保存します。
Dataset Type: Basic を選択します。
Storage Type: ファイルストレージクラスを選択します。このトピックでは、汎用型 NAS ファイルシステムを使用します。NAS ファイルシステムがない場合は、「ファイルシステムの作成」をご参照ください。
説明トレーニングタスクで高い読み書き速度とパフォーマンスが必要な場合は、[File Storage (CPFS)] を使用してください。
Default Mount Path: デフォルト値の /mnt/data/ を使用します。
Data Science Workshop (DSW) インスタンスを作成し、以下の主要なパラメーターを設定します。
Resource Type: [リソースクォータ] を選択します。
Resource Quota: 作成した Lingjun リソースのリソースクォータを選択します。
Instance Type: 次のリソース仕様を構成します。
GPUs: 8 以上。
vCPUs: 90。
Memory (GiB): 1024。
Shared Memory (GiB): 1024。
Image Information: Image Address を選択し、イメージを
dsw-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-training-algorithm/chatlearn:torch2.5.1-vllm0.6.6-ubuntu22.04-cuda12.6-py310に設定します。イメージアドレスのリージョンは、現在のリージョンに合わせて変更する必要があります。たとえば、上海で DSW インスタンスを起動する場合、イメージアドレスのリージョンをcn-shanghaiに変更します。Dataset Mounting: [カスタムデータセット] をクリックし、作成したデータセットを選択して、デフォルトのマウントパスを使用します。
Resource Access Management (RAM) ユーザーを使用して以下の操作を実行する場合、RAM ユーザーに DSW、Deep Learning Containers (DLC)、または EAS の権限を付与する必要があります。詳細については、「プロダクトの依存関係と権限: DSW」、「プロダクトの依存関係と権限: DLC」、または「プロダクトの依存関係と権限: EAS」をご参照ください。
1.2 コードリポジトリのダウンロード
PAI-DSW 開発環境に入ります。
PAI コンソールにログインします。ページの左上隅でリージョンを選択します。中国 (ウランチャブ) を推奨します。
左側のナビゲーションウィンドウで、[ワークスペースリスト] をクリックします。[ワークスペースリスト] ページで、目的のワークスペースの名前をクリックして開きます。
左側のナビゲーションウィンドウで、Model Training > Data Science Workshop (DSW) を選択します。対象のインスタンスを見つけ、Actions 列の [開く] をクリックします。
上部のメニューバーで [ターミナル] をクリックします。新しいタブで [ターミナルを作成] をクリックします。
ChatLearn コードリポジトリをダウンロードします。
git clone https://github.com/alibaba/ChatLearn.git && cd ChatLearn && git checkout 4ad5912306df5d4a814dc2dd5567fcb26f5d473b
1.3 Qwen3 モデルの準備
ModelScope から Qwen3 モデルの重みをダウンロードします。
modelscope download --model Qwen/Qwen3-8B --local_dir Qwen3-8B1.4 トレーニングデータセットの準備
この例では、MATH-lighteval データセットを使用して、ChatLearn の強化学習ワークフローをデモンストレーションします。
これは、固定ルールを使用して報酬スコアを計算する数学的推論データセットです。
カスタムタスクで強化学習トレーニングを実行するには、ChatLearn コードリポジトリの
examples/fsdp/models/rule_reward.pyファイルに基づいて、カスタム報酬スコアリング関数を実装できます。
# データセットをダウンロードします
mkdir -p dataset
modelscope download --dataset AI-ModelScope/MATH-lighteval --local_dir dataset/MATH-lighteval
# データセットを前処理します
python examples/fsdp/data/data_preprocess/math_lighteval.py --input_dir dataset/MATH-lighteval --local_dir dataset/MATH-lighteval2. 強化学習トレーニング
まず、DSW 環境で開発とデバッグを行います。その後、DLC 環境でマルチノード、マルチ GPU の分散トレーニングタスクを送信します。
この例では、FSDP をトレーニングエンジンとして使用します。Megatron を使用してトレーニングを高速化する方法については、「tutorial_grpo_mcore」をご参照ください。
2.1 DSW でのシングルノードトレーニング
引き続き DSW 環境で次のコマンドを実行してトレーニングを開始します。トレーニング済みのモデルは、後のデプロイメントのためにマウントされたデータセットに保存されます。
bash examples/fsdp/scripts/train_grpo_qwen3.shtrain_grpo_qwen3.sh のデフォルトパラメーターでは、トレーニングには 2〜3 時間かかると予想されます。
2.2 DLC でのマルチノードトレーニング
シングルノードで開発とデバッグを行った後、DLC 環境でマルチノード、マルチ GPU の分散タスクを構成して、モデルのトレーニングを高速化できます。手順は次のとおりです:
[タスクの作成] ページに移動します。
PAI コンソールにログインします。ページの上部で、ターゲットリージョンとターゲットワークスペースを選択し、[DLC に入る] をクリックします。
Deep Learning Containers (DLC) ページで、[タスクの作成] をクリックします。
Create Job ページで、次の主要なパラメーターを構成します。その他のパラメーターはデフォルト値を使用します。詳細については、「トレーニングタスクの作成」をご参照ください。
パラメーター
説明
Basic Information
Job Name
カスタムのタスク名を入力します。この例では test_qwen3_dlc を使用します。
Environment Information
Image Information
Image Address を選択し、テキストボックスに dsw-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-training-algorithm/chatlearn:torch2.5.1-vllm0.6.6-ubuntu22.04-cuda12.6-py310 を入力します。イメージアドレスのリージョンは、現在のリージョンに基づいて変更する必要があります。
Mount dataset
[カスタムデータセット] をクリックし、作成したデータセットを選択して、デフォルトのマウントパス
/mnt/data/を使用します。Startup Command
次のコマンドを構成します。train_grpo_qwen3.sh スクリプトの起動パラメーターは、DSW シングルノードの事前学習済みモデルのものと同じです。
cd /mnt/data/ChatLearn && bash examples/fsdp/scripts/train_grpo_qwen3.shResource Information
Resource Type
[Lingjun インテリジェントコンピューティング] を選択します。
Source
[リソースクォータ] を選択します。
Resource Quota
この例では、作成した Lingjun リソースのリソースクォータを使用します。
Framework
[PyTorch] を選択します。
Job Resource
ワーカーノード構成タブで、次のパラメーターを構成します:
Quantity: 2。マルチノードトレーニングの場合、[ノード数] を必要なマシン数に設定します。
GPUs: 8
vCPUs: 90
Memory (GiB): 1024
Shared Memory (GiB): 1024
OK をクリックします。[Deep Learning Containers (DLC)] ページにリダイレクトされます。タスク名をクリックして、[タスク詳細] ページでタスクの実行ステータスを表示できます。[ステータス] が [成功] に変わると、トレーニングタスクは完了です。
説明DLC タスクが
ray.exceptions.RpcError: Timed out while waiting for GCS to become available.というエラーで失敗した場合でも、トレーニングタスクは完了しています。保存されたモデルを使用してサービスをデプロイできます。
2.3 主要なパラメーターの説明
3. モデルのデプロイと呼び出し
モデルのトレーニングが完了したら、モデルをオンラインサービスとしてデプロイし、本番環境で呼び出すことができます。
3.1 モデルサービスのデプロイ
PAI コンソールにログインします。ページの上部で、ターゲットリージョンとターゲットワークスペースを選択し、[EAS に入る] をクリックします。
Deploy Service をクリックします。Custom Model Deployment セクションで、Custom Deployment をクリックします。
Custom Deployment ページで、次の主要なパラメーターを構成します。その他のパラメーターはデフォルト値を使用します。
パラメーター
説明
Basic Information
Service Name
モデルサービスのカスタム名を入力します。名前は同じリージョン内で一意である必要があります。この例では test_qwen3 を使用します。
Environment Information
Deployment Method
この例では Image-based Deployment を使用します。
Image Configuration
Image Address を選択し、テキストボックスにイメージアドレス
eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/vllm:v0.8.5.post1を入力します。イメージアドレスのリージョンは、現在のリージョンに基づいて変更する必要があります。Mount storage
汎用型 NAS を選択し、次のパラメーターを構成します:
[ファイルシステムの選択]: データセットの作成に使用した NAS ファイルシステムを選択します。
[ファイルシステムのマウントポイント]: データセットの作成に使用したマウントポイントを選択します。
[ファイルシステムパス]: NAS に保存されている Hugging Face フォーマットのモデルのパスに設定します。この例では
/ChatLearn/output/qwen3-grpo/save_model/policy_trainer/20/huggingface/を使用します。Mount Path: マウント後のパスを指定します。この例では
/qwen3_rlhfを使用します。
Command
コマンドを
vllm serve /qwen3_rlhf --host 0.0.0.0 --port 8000 --max-model-len 8192に設定します。説明V100 インスタンスにデプロイする場合は、実行コマンドを
vllm serve /qwen3_rlhf --host 0.0.0.0 --port 8000 --max-model-len 8192 --dtype=halfに設定します。Port Number
これを 8000 に設定します。
Resource Information
Resource Type
この例では [パブリックリソース] を使用します。
Number of Replicas
このパラメーターは、モデルと選択したリソースに基づいて構成します。8B モデルの場合、これを 1 に設定します。
Deployment
リソース仕様には、A10 または V100 を選択します。この例では
ecs.gn7i-c32g1.8xlargeを使用します。Network Information
VPC
NAS マウントポイントを構成すると、システムは自動的に VPC と vSwitch をプリセットの NAS ファイルシステムと一致させます。必要に応じてセキュリティグループを設定します。
vSwitch
Security group
Deploy をクリックします。サービスのデプロイには約 6 分かかります。[サービスステータス] が [実行中] に変わると、サービスのデプロイは完了です。
3.2 サービスの呼び出し
サービスのエンドポイントとトークンを取得します。Inference Service タブで、対象のサービスを見つけ、Overview ページに移動します。Basic Information セクションで、View Endpoint Information をクリックします。

次のコードを使用してサービスを呼び出します。<YOUR EAS URL> をステップ 1 で取得したエンドポイントに置き換えます。トークンは環境変数として設定することを推奨します。
import os from openai import OpenAI # トークンを環境変数として設定します。 openai_api_key = os.environ.get("Token") # <YOUR EAS URL> をサービスのエンドポイントに置き換えます。 openai_api_base = "<YOUR EAS URL>/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) chat_response = client.chat.completions.create( model="/qwen3_rlhf", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Find the smallest positive integer solution to $\\tan{19x^{\\circ}}=\\dfrac{\\cos{96^{\\circ}}+\\sin{96^{\\circ}}}{\\cos{96^{\\circ}}-\\sin{96^{\\circ}}}$. Let's think step by step and output the final answer within \\boxed{}."}, ], temperature=0.7, top_p=0.8, presence_penalty=1.5, extra_body={ "top_k": 20, "chat_template_kwargs": {"enable_thinking": False}, } ) print("Chat response:", chat_response)
付録: トレーニングとデプロイメントのリソース仕様リファレンス
次の表に、さまざまなモデルサイズでサポートされているリソース仕様を示します。
モデルサイズ | フルパラメータートレーニングリソース (最小) | 推論リソース (最小) | |
数量 | 仕様 | ||
Qwen3-8B | 1 ユニット |
| 1 × V100 (32 GB VRAM) / 1 × A10 (24 GB VRAM) |
Qwen3-32B | 2 ユニット | 4 × V100 (32 GB VRAM) / 4 × A10 (24 GB VRAM) | |
Qwen3-30B-A3B | 2 ユニット | 4 × V100 (32 GB VRAM) / 4 × A10 (24 GB VRAM) | |