すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:PAI-ChatLearn: Qwen3 強化学習のベストプラクティス

最終更新日:Jan 29, 2026

このトピックでは、Qwen3 モデルを例として使用します。PAI の PAI-ChatLearn トレーニングフレームワークと Lingjun リソースを使用して、大規模言語モデル (LLM) の効率的な分散強化学習を実行し、トレーニング済みモデルをデプロイする方法について説明します。

1. 事前準備

1.1 開発環境の準備

開始する前に、次のタスクが完了していることを確認してください:

  1. PAI を有効化し、デフォルトのワークスペースを作成します

  2. Lingjun リソースを購入し、リソースクォータを作成します。ノード仕様が ml.gx8xf.8xlarge-gu108 のマシンが 2 台必要です。Lingjun リソースのノード仕様の詳細については、「AI コンピューティングリソースの課金」をご参照ください。

  3. データセットを作成し、必要なトレーニングファイルと結果ファイルを保存します。

    • Dataset TypeBasic を選択します。

    • Storage Type: ファイルストレージクラスを選択します。このトピックでは、汎用型 NAS ファイルシステムを使用します。NAS ファイルシステムがない場合は、「ファイルシステムの作成」をご参照ください。

      説明

      トレーニングタスクで高い読み書き速度とパフォーマンスが必要な場合は、[File Storage (CPFS)] を使用してください。

    • Default Mount Path: デフォルト値の /mnt/data/ を使用します。

  4. Data Science Workshop (DSW) インスタンスを作成し、以下の主要なパラメーターを設定します。

    • Resource Type[リソースクォータ] を選択します。

    • Resource Quota: 作成した Lingjun リソースのリソースクォータを選択します。

    • Instance Type: 次のリソース仕様を構成します。

      • GPUs: 8 以上。

      • vCPUs: 90。

      • Memory (GiB): 1024。

      • Shared Memory (GiB): 1024。

    • Image InformationImage 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[カスタムデータセット] をクリックし、作成したデータセットを選択して、デフォルトのマウントパスを使用します。

  5. Resource Access Management (RAM) ユーザーを使用して以下の操作を実行する場合、RAM ユーザーに DSW、Deep Learning Containers (DLC)、または EAS の権限を付与する必要があります。詳細については、「プロダクトの依存関係と権限: DSW」、「プロダクトの依存関係と権限: DLC」、または「プロダクトの依存関係と権限: EAS」をご参照ください。

1.2 コードリポジトリのダウンロード

  1. PAI-DSW 開発環境に入ります。

    1. PAI コンソールにログインします。ページの左上隅でリージョンを選択します。中国 (ウランチャブ) を推奨します。

    2. 左側のナビゲーションウィンドウで、[ワークスペースリスト] をクリックします。[ワークスペースリスト] ページで、目的のワークスペースの名前をクリックして開きます。

    3. 左側のナビゲーションウィンドウで、Model Training > Data Science Workshop (DSW) を選択します。対象のインスタンスを見つけ、Actions 列の [開く] をクリックします。

  2. 上部のメニューバーで [ターミナル] をクリックします。新しいタブで [ターミナルを作成] をクリックします。

  3. 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-8B

1.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-lighteval

2. 強化学習トレーニング

説明

まず、DSW 環境で開発とデバッグを行います。その後、DLC 環境でマルチノード、マルチ GPU の分散トレーニングタスクを送信します。

この例では、FSDP をトレーニングエンジンとして使用します。Megatron を使用してトレーニングを高速化する方法については、「tutorial_grpo_mcore」をご参照ください。

2.1 DSW でのシングルノードトレーニング

引き続き DSW 環境で次のコマンドを実行してトレーニングを開始します。トレーニング済みのモデルは、後のデプロイメントのためにマウントされたデータセットに保存されます。

bash examples/fsdp/scripts/train_grpo_qwen3.sh
説明

train_grpo_qwen3.sh のデフォルトパラメーターでは、トレーニングには 2〜3 時間かかると予想されます。

2.2 DLC でのマルチノードトレーニング

シングルノードで開発とデバッグを行った後、DLC 環境でマルチノード、マルチ GPU の分散タスクを構成して、モデルのトレーニングを高速化できます。手順は次のとおりです:

  1. [タスクの作成] ページに移動します。

    1. PAI コンソールにログインします。ページの上部で、ターゲットリージョンとターゲットワークスペースを選択し、[DLC に入る] をクリックします。

    2. Deep Learning Containers (DLC) ページで、[タスクの作成] をクリックします。

  2. 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.sh

    Resource 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

  3. OK をクリックします。[Deep Learning Containers (DLC)] ページにリダイレクトされます。タスク名をクリックして、[タスク詳細] ページでタスクの実行ステータスを表示できます。[ステータス][成功] に変わると、トレーニングタスクは完了です。

    説明

    DLC タスクが ray.exceptions.RpcError: Timed out while waiting for GCS to become available. というエラーで失敗した場合でも、トレーニングタスクは完了しています。保存されたモデルを使用してサービスをデプロイできます。

2.3 主要なパラメーターの説明

クリックして train_grpo_qwen3.sh で構成する主要なパラメーターを表示します。

パラメーター

説明

model_path

モデルの重みのパス

output_dir

ログ、モデル、データを保存する出力パス

train_data_path

トレーニングデータセットのパス

eval_data_path

評価データセットのパス

sp_size

長文コンテキストモデルトレーニングのための Ulysses シーケンス並列処理構成

tensor_model_parallel_size

vLLM 推論サービスのためのテンソル並列処理構成

gpu_memory_utilization

vLLM 推論サービスによって事前割り当てされる VRAM の割合

seq_length

最大シーケンス長 (プロンプト長 + 生成長)

max_new_tokens

最大生成長

num_inference_per_prompt

各プロンプトに対して生成される応答の数

sample_per_episode

各反復でトレーニングされるサンプル数 = プロンプト数 × num_inference_per_prompt

train_micro_batch_size

トレーニング中のフォワード推論のバッチサイズ

enable_eval_before_training

トレーニング前に評価を実行するかどうかを指定します

num_episode

強化学習のトレーニングエポック数

eval_episode_interval

評価エポック間の間隔

save_episode_interval

モデル保存エポック間の間隔

3. モデルのデプロイと呼び出し

モデルのトレーニングが完了したら、モデルをオンラインサービスとしてデプロイし、本番環境で呼び出すことができます。

3.1 モデルサービスのデプロイ

  1. PAI コンソールにログインします。ページの上部で、ターゲットリージョンとターゲットワークスペースを選択し、[EAS に入る] をクリックします。

  2. Deploy Service をクリックします。Custom Model Deployment セクションで、Custom Deployment をクリックします。

  3. 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

  4. Deploy をクリックします。サービスのデプロイには約 6 分かかります。[サービスステータス][実行中] に変わると、サービスのデプロイは完了です。

3.2 サービスの呼び出し

  1. サービスのエンドポイントとトークンを取得します。Inference Service タブで、対象のサービスを見つけ、Overview ページに移動します。Basic Information セクションで、View Endpoint Information をクリックします。image

  2. 次のコードを使用してサービスを呼び出します。<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 ユニット

ml.gu7xf.c96m1600.8-gu108 または

ml.gu7ef.c96m1600.8-gu100 または

ml.gx8xf.8xlarge-gu108

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)