Alibaba Cloud Model Studio で HTTP API を使用して Qwen をファインチューニングします。
このトピックは、国際版 (シンガポールリージョン) にのみ適用されます。
前提条件
ファインチューニングの概念、手順、データ形式の要件を理解していること。
Model Studio を有効化し、API キーを取得済みであること。詳細については、「API キーの取得」をご参照ください。
ファインチューニングの概要
ファインチューニングはモデルのパフォーマンスを向上させます:
特定の業界やビジネス向けのパフォーマンス向上
出力レイテンシの削減
ハルシネーションの抑制
人間の価値観やプリファレンスに合わせた出力の調整
大規模モデルをファインチューニングされた軽量モデルに置き換え
ファインチューニング中、モデルはトレーニングデータからドメイン知識、トーン、コミュニケーションスタイル、自己認識など、ビジネスやシナリオに特化した特徴を学習します。モデルは事前学習の段階で既に多くの業界やシナリオ固有の例を学習しているため、ファインチューニング後のゼロショットまたはワンショットのパフォーマンスは、ベースモデルのフューショットのパフォーマンスを上回ります。これにより、入力トークンが削減され、出力レイテンシが低下します。
全体的な手順
サポートされているモデル
テキスト生成
名前 | モデルコード | フルパラメーター SFT (sft) | 効率的な SFT (efficient_sft) |
Qwen3-32B | qwen3-32b | ||
Qwen3-14B | qwen3-14b | ||
Qwen3-VL-8B-Instruct | qwen3-vl-8b-instruct | ||
Qwen3-VL-8B-Thinking | qwen3-vl-8b-thinking |
トレーニングモードの比較
フルパラメーター トレーニング | 効率的なトレーニング (LoRA、推奨) | |
シナリオ | • 新しい能力を学習する。 • 最適な全体的パフォーマンスを達成する。 | • 特定のシナリオでのパフォーマンスを最適化する。 • 時間とコストに敏感な場合。 |
トレーニング期間 | より長く、収束が遅い。 | より短く、収束が速い。 |
課金
方法 | トレーニングデータの量に基づいて課金されます。 |
計算式 | モデルトレーニング料金 = (トレーニングデータの合計トークン数 + 混合トレーニングデータの合計トークン数) × エポック数 × トレーニング単価 (最小課金単位:1 トークン) |
データセットのヒント
サイズ要件
SFT データセットには、少なくとも 1,000 件の高品質なエントリが必要です。評価結果が満足のいくものでない場合は、さらにトレーニングデータを収集してください。
データが不足している場合は、ナレッジベースを持つ エージェントアプリケーション の構築を検討してください。多くの複雑なビジネスシナリオでは、ファインチューニングとナレッジベースの検索を組み合わせるのが最も効果的です。
例えば、カスタマーサービスシナリオでは、モデルをファインチューニングしてトーン、表現の癖、自己認識を調整し、ナレッジベースを使用してドメイン知識を動的にコンテキストに注入します。
まず検索拡張生成 (RAG) を試し、十分なデータを収集した後、ファインチューニングを使用してパフォーマンスをさらに向上させます。
以下の戦略を使用してデータセットを拡張できます:
より大規模で高性能なモデルを使用して、特定のビジネスやシナリオ向けのコンテンツを生成する。
アプリケーションシナリオ、ウェブスクレイピング、ソーシャルメディア、フォーラム、パブリックデータセット、パートナー、業界リソース、ユーザー投稿など、さまざまなソースから手動でデータを収集する。
データの多様性とバランス
ドメイン固有のユースケースでは、ドメインの専門知識が最も重要な要素です。Q&A シナリオでは、汎化性能がより重要になります。ビジネスモジュールやシナリオに基づいてデータサンプルを設計してください。トレーニングの品質は、データ量、ドメインの特異性、多様性に依存します。
例えば、AI アシスタントシナリオでは、専門的で多様なデータセットには以下が含まれるべきです:
ビジネス | 多様なシナリオとユースケース |
E コマースカスタマーサービス | プロモーションのプッシュ、販売前相談、販売中ガイダンス、アフターサービス、フォローアップ訪問、苦情処理など。 |
金融サービス | ローン相談、投資・金融アドバイス、クレジットカードサービス、銀行口座管理など。 |
オンラインヘルスケア | 症状相談、予約スケジューリング、受診案内、薬剤情報クエリ、健康に関するヒントなど。 |
AI 秘書 | IT 情報、管理情報、人事情報、従業員福利厚生に関する Q&A、会社カレンダーのクエリなど。 |
旅行アシスタント | 旅行計画、出入国ガイド、旅行保険相談、目的地の習慣や文化の紹介など。 |
企業法務顧問 | 契約レビュー、知的財産保護、コンプライアンスチェック、労働法に関する Q&A、越境取引相談、ケース別の法的分析など。 |
実際の使用率に合わせてシナリオ間のデータ量のバランスを取ります。これにより、単一の特徴タイプへの偏りを防ぎ、汎化性能を向上させます。
トレーニングデータセットのアップロード
データセットの準備
SFT トレーニングセット
SFT は Chat Markup Language (ChatML) 形式のトレーニングデータを使用します。これはマルチターン対話と複数のロール設定をサポートします。
OpenAI のnameおよびweightパラメーターはサポートされていません。すべてのアシスタントの出力がトレーニングされます。
# トレーニングデータの1行 (JSON 形式)、展開すると典型的な構造は次のようになります:
{"messages": [
{"role": "system", "content": "システム入力 1"},
{"role": "user", "content": "ユーザー入力 1"},
{"role": "assistant", "content": "期待されるモデル出力 1"},
{"role": "user", "content": "ユーザー入力 2"},
{"role": "assistant", "content": "期待されるモデル出力 2"}
...
]}`system`、`user`、および `assistant` ロールの詳細については、「テキスト生成モデルの概要」をご参照ください。サンプルのトレーニングセット:SFT-ChatML_format_example.jsonl および SFT-ChatML_format_example.xlsx。XLS および XLSX 形式は、単一ターンの対話のみをサポートします。
単一のトレーニングエントリに対して、すべてのアシスタント行は "loss_weight" パラメーターをサポートしており、トレーニング中の相対的な重要度を設定します。有効値の範囲は 0.0 から 1.0 です。値が高いほど重要度が高くなります。
このパラメーターは招待制プレビューです。使用するには、アカウントマネージャーにお問い合わせください。
{"role": "assistant", "content": "期待されるモデル出力 1", "loss_weight": 1.0},
{"role": "assistant", "content": "期待されるモデル出力 2", "loss_weight": 0.5}思考モデルの SFT
トレーニングデータはマルチターン対話と複数のロール設定をサポートしますが、トレーニングされるのは最後のアシスタント出力のみです。
\n 文字は、「think」タグの前後で保持する必要があります。# トレーニングデータの1行 (JSON 形式)、展開すると典型的な構造は次のようになります:
{"messages": [
{"role": "system", "content": "システム入力 1"},
{"role": "user", "content": "ユーザー入力 1"},
{"role": "assistant", "content": "モデル出力 1"}, --中間アシスタント出力には <think> タグを含めないでください
...
{"role": "user", "content": "ユーザー入力 2"},
{"role": "assistant", "content": "<think>\n期待される思考内容 2\n</think>\n\n期待される出力 2"} --思考内容は最後のアシスタント出力にのみ含めることができます。
]}`system`、`user`、および `assistant` ロールの詳細については、「テキスト生成モデルの概要」をご参照ください。サンプルのトレーニングセット:SFT-deep_thinking_content_example.jsonl。
モデルがトレーニングサンプル内の <think> タグを省略するように設定できます。この出力方法を使用する場合、モデルのトレーニング後に呼び出しの思考モードを有効にしないでください。
{"role": "assistant", "content": "期待されるモデル出力 2"} --モデルに思考を有効にしないように指示します単一のトレーニングエントリの最後のアシスタント行は "loss_weight" パラメーターをサポートしており、トレーニング中の相対的な重要度を設定します。有効値の範囲は 0.0 から 1.0 です。値が高いほど重要度が高くなります。
このパラメーターは招待制プレビューです。使用するには、アカウントマネージャーにお問い合わせください。
{"role": "assistant", "content": "<think>\n期待される思考内容 2\n</think>\n\n期待される出力 2", "loss_weight": 1.0}画像理解のための SFT (Qwen-VL)
OpenAI のnameおよびweightパラメーターはサポートされていません。すべてのアシスタントの出力がトレーニングされます。
`system`、`user`、および `assistant` ロールの違いに関する詳細については、「テキスト生成モデルの概要」をご参照ください。ChatML 形式のサンプルトレーニングデータ:
# トレーニングデータの1行 (JSON 形式)、展開すると典型的な構造は次のようになります:
{"messages":[
{"role":"user",
"content":[
{"text":"ユーザー入力 1"},
{"image":"画像ファイル名 1"}]},
{"role":"assistant",
"content":[
{"text":"期待されるモデル出力 1"}]},
{"role":"user",
"content":[
{"text":"ユーザー入力 2"}]},
{"role":"assistant",
"content":[
{"text":"期待されるモデル出力 2"}]},
...
...
...
]}思考モデルをトレーニングする場合、「思考モデルの SFT」のデータ形式要件に従う必要があります。
ZIP ファイルの要件は次のとおりです:
形式:ZIP。最大サイズ:2 GB。ZIP ファイル内のフォルダ名とファイル名には、ASCII 文字 (a–z、A–Z)、数字 (0–9)、アンダースコア (_)、およびハイフン (-) のみを含める必要があります。
トレーニングテキストデータファイルは
data.jsonlという名前で、ZIP ファイルのルートディレクトリに配置する必要があります。ZIP ファイルを開くとすぐに data.jsonl ファイルが表示されることを確認してください。単一の画像の幅または高さは 1024 ピクセルを超えることはできません。最大サイズは 10 MB です。サポートされている形式:
.bmp、.jpeg /.jpg、.png、.tif /.tiff、および.webp。画像ファイル名は、異なるフォルダに保存されていても重複させることはできません。
ZIP ファイルのディレクトリ構造:
単一レベルのディレクトリ (推奨)
画像ファイルと
data.jsonlファイルは、ZIP ファイルのルートディレクトリに存在します。Trainingdata_vl.zip |--- data.jsonl # 注:外側のフォルダでラップしないでください |--- image1.png |--- image2.jpg複数レベルのディレクトリ
data.jsonl ファイルは ZIP ファイルのルートディレクトリにある必要があります。
data.jsonl ファイルでは、画像ファイル名のみを宣言でき、ファイルパスは宣言できません。例:
正しい:
image1.jpg。誤り:jpg_folder/image1.jpg。画像ファイル名は、ZIP ファイル内でグローバルに一意でなければなりません。
Trainingdata_vl.zip |--- data.jsonl # 注:外側のフォルダでラップしないでください |--- jpg_folder | └── image1.jpg |--- png_folder └── image2.png
トレーニングファイルのアップロード
HTTP
Windows CMD の場合、${DASHSCOPE_API_KEY}を%DASHSCOPE_API_KEY%に置き換えることができます。PowerShell の場合は、$env:DASHSCOPE_API_KEY
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"path/to/your/sample.jsonl"' \
--form 'purpose="fine-tune"'使用制限:
最大ファイルサイズは 1 GB です。
すべてのアクティブな (削除されていない) ファイルの合計ストレージクォータは 5 GB です。
アクティブな (削除されていない) ファイルの最大数は 100 です。
ファイルストレージに時間制限はありません。
詳細については、「OpenAI 互換 - ファイル」をご参照ください。
応答:
{
"id": "file-ft-e73cafa11cef43a0ab75fb8e",
"object": "file",
"bytes": 23149,
"filename": "qwen-fine-tune-sample.jsonl",
"purpose": "fine-tune",
"status": "processed",
"created_at": 1769138847
}ファインチューニング
ファインチューニングジョブの作成
HTTP
Windows CMD の場合、${DASHSCOPE_API_KEY}を%DASHSCOPE_API_KEY%に置き換えることができます。PowerShell の場合は、$env:DASHSCOPE_API_KEY
curl --location "https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes" \
--header "Authorization: Bearer ${DASHSCOPE_API_KEY}" \
--header 'Content-Type: application/json' \
--data '{
"model":"qwen3-14b",
"training_file_ids":[
"<トレーニングデータセット 1 のファイル ID に置き換えてください>",
"<トレーニングデータセット 2 のファイル ID に置き換えてください>"
],
"hyper_parameters":
{
"n_epochs": 1,
"batch_size": 16,
"learning_rate": "1.6e-5",
"split": 0.9,
"warmup_ratio": 0.0,
"eval_steps": 1,
"save_strategy": "epoch",
"save_total_limit": 10
},
"training_type":"sft"
}'入力パラメーター
フィールド | 必須 | タイプ | 場所 | 説明 |
training_file_ids | はい | 配列 | 本文 | トレーニングセットのファイル ID。 |
validation_file_ids | いいえ | 配列 | 本文 | 検証データセットのファイル ID。 |
model | はい | 文字列 | 本文 | ベースモデル ID、または以前のファインチューニングジョブで生成されたモデルの ID。 |
hyper_parameters | いいえ | マップ | 本文 | ファインチューニングのハイパーパラメーター。省略した場合はデフォルト値が使用されます。 |
training_type | いいえ | 文字列 | 本文 | ファインチューニングメソッド。有効な値:
|
job_name | いいえ | 文字列 | 本文 | ジョブ名。 |
model_name | いいえ | 文字列 | 本文 | ファインチューニングされたモデルの名前。モデル ID はシステムによって生成されます。 |
応答の例
{
"request_id": "635f7047-003e-4be3-b1db-6f98e239f57b",
"output":
{
"job_id": "ft-202511272033-8ae7",
"job_name": "ft-202511272033-8ae7",
"status": "PENDING",
"finetuned_output": "qwen3-14b-ft-202511272033-8ae7",
"model": "qwen3-14b",
"base_model": "qwen3-14b",
"training_file_ids":
[
"9e9ffdfa-c3bf-436e-9613-6f053c66aa6e"
],
"validation_file_ids":
[],
"hyper_parameters":
{
"n_epochs": 1,
"batch_size": 16,
"learning_rate": "1.6e-5",
"split": 0.9,
"warmup_ratio": 0.0,
"eval_steps": 1,
"save_strategy": "epoch",
"save_total_limit": 10
},
"training_type": "sft",
"create_time": "2025-11-27 20:33:15",
"workspace_id": "llm-8v53etv3hwb8orx1",
"user_identity": "1654290265984853",
"modifier": "1654290265984853",
"creator": "1654290265984853",
"group": "llm",
"max_output_cnt": 10
}
}サポートされている hyper_parameters の設定
ジョブ詳細のクエリ
返された job_id を使用してジョブステータスをクエリします。
HTTP
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'入力パラメーター
フィールド | タイプ | 場所 | 必須 | 説明 |
job_id | 文字列 | パスパラメーター | はい | ジョブ ID。 |
成功した応答の例
{
"request_id": "d100cddb-ac85-4c82-bd5c-9b5421c5e94d",
"output":
{
"job_id": "ft-202511272033-8ae7",
"job_name": "ft-202511272033-8ae7",
"status": "RUNNING",
"finetuned_output": "qwen3-14b-ft-202511272033-8ae7",
"model": "qwen3-14b",
"base_model": "qwen3-14b",
"training_file_ids":
[
"9e9ffdfa-c3bf-436e-9613-6f053c66aa6e"
],
"validation_file_ids":
[],
"hyper_parameters":
{
"n_epochs": 1,
"batch_size": 16,
"learning_rate": "1.6e-5",
"split": 0.9,
"warmup_ratio": 0.0,
"eval_steps": 1,
"save_strategy": "epoch",
"save_total_limit": 10
},
"training_type": "sft",
"create_time": "2025-11-27 20:33:15",
"workspace_id": "llm-8v53etv3hwb8orx1",
"user_identity": "1654290265984853",
"modifier": "1654290265984853",
"creator": "1654290265984853",
"group": "llm",
"max_output_cnt": 10
}
}ジョブステータス | 意味 |
PENDING | トレーニングが開始されようとしています。 |
QUEUING | ジョブはキューに入っています。一度に実行できるジョブは 1 つだけです。 |
RUNNING | ジョブは実行中です。 |
CANCELING | ジョブはキャンセル中です。 |
SUCCEEDED | ジョブは成功しました。 |
FAILED | ジョブは失敗しました。 |
CANCELED | ジョブはキャンセルされました。 |
トレーニングが成功すると、finetuned_output にはファインチューニングされたモデルの ID が含まれ、モデルデプロイに使用できます。
ジョブログの取得
HTTP
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/logs?offset=0&line=1000' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' `offset` と `line` パラメーターを使用して、特定の範囲のログを取得します。`offset` パラメーターは開始位置を指定し、`line` はログエントリの最大数を指定します。
応答の例:
{
"request_id":"1100d073-4673-47df-aed8-c35b3108e968",
"output":{
"total":57,
"logs":[
"{ログ出力 1}",
"{ログ出力 2}",
...
...
...
]
}
}チェックポイントのクエリと公開
SFT ファインチューニング (efficient_sftおよびsft) のみ、中間状態のチェックポイントの保存と公開をサポートします。
チェックポイントのクエリ
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/checkpoints' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'入力パラメーター
フィールド | タイプ | 場所 | 必須 | 説明 |
job_id | 文字列 | パスパラメーター | はい | ジョブ ID。 |
成功した応答の例
{
"request_id": "c11939b5-efa6-4639-97ae-ed4597984647",
"output": [
{
"create_time": "2025-11-11T16:25:42",
"full_name": "ft-202511272033-8ae7-checkpoint-20",
"job_id": "ft-202511272033-8ae7",
"checkpoint": "checkpoint-20",
"model_name": "qwen3-14b-instruct-ft-202511272033-8ae7",
"status": "SUCCEEDED"
}
]
}スナップショット公開ステータス | 説明 |
PENDING | チェックポイントはエクスポート待ちです。 |
PROCESSING | チェックポイントはエクスポート中です。 |
SUCCEEDED | チェックポイントはエクスポートされました。 |
FAILED | チェックポイントのエクスポートに失敗しました。 |
checkpoint パラメーターはチェックポイント ID を指し、モデル公開 API でエクスポートするチェックポイントを指定するために使用されます。model_name パラメーターはモデル ID を指し、モデルデプロイに使用できます。finetuned_output パラメーターは、最後のチェックポイントの model_name を返します。
モデルの公開
ファインチューニングが完了した後、チェックポイントをエクスポートできます。Model Studio でモデルをデプロイする前に、チェックポイントをエクスポートしてください。
エクスポートされたチェックポイントはクラウドストレージに保存され、アクセスやダウンロードはできません。
curl --request GET 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/export/<checkpoint_id>?model_name=<model_name>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'入力パラメーター
フィールド | タイプ | 場所 | 必須 | 説明 |
job_id | 文字列 | パスパラメーター | はい | ジョブ ID。 |
checkpoint_id | 文字列 | パスパラメーター | はい | チェックポイント ID。 |
model_name | 文字列 | パスパラメーター | はい | エクスポート後の期待されるモデル ID。 |
成功した応答の例
{
"request_id": "ed3faa41-6be3-4271-9b83-941b23680537",
"output": true
}エクスポートは非同期です。チェックポイントリストをクエリして、エクスポートステータスを監視してください。
追加操作
ジョブのリスト表示
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' ジョブのキャンセル
実行中のファインチューニングジョブを終了します。
curl --request POST 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/cancel' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' ジョブの削除
実行中のジョブは削除できません。
curl --request DELETE 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' モデルデプロイ
ファインチューニングされたモデルは、モデルユニットデプロイのみをサポートします。
モデルデプロイコンソール (シンガポール) に移動してモデルをデプロイします。課金やその他の詳細については、「使用期間による課金 (モデルユニット)」をご参照ください。
モデルの呼び出し
モデルをデプロイした後、OpenAI 互換 API、Dashscope、または Assistant SDK を使用して呼び出します。
model パラメーターをモデルの code に設定します。モデルデプロイコンソール (シンガポール) に移動して、モデルコード を表示します。
curl 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' \
--data '{
"model": "<正常にデプロイされた後のモデルインスタンスのコードに置き換えてください>",
"input":{
"messages":[
{
"role": "user",
"content": "あなたは誰ですか?"
}
]
},
"parameters": {
"result_format": "message"
}
}'よくある質問
独自のモデルをアップロードしてデプロイできますか?
現在、独自のモデルのアップロードとデプロイはサポートされていません。Alibaba Cloud Model Studio の最新情報にご注意ください。
ただし、Platform for AI (PAI) は独自のモデルのデプロイをサポートしています。詳細については、「PAI-LLM での大規模言語モデルのデプロイ」をご参照ください。