Alibaba Cloud Model Studio で API (HTTP) とコマンドライン (シェル) を使用して Qwen モデルをチューニングする方法について説明します。モデルのチューニングには、教師ありファインチューニング (SFT)、継続事前学習 (CPT)、Direct Preference Optimization (DPO) の 3 つのメソッドがあります。
前提条件
モデルファインチューニングの概要をご参照いただき、その概念、プロセス、データ要件を理解してください。
サービスを有効化し、API キーを取得します。手順については、API キーの取得をご参照ください。
API は、トレーニングジョブのトークンベースの課金のみをサポートします。モデルトレーニングユニット (プリペイドまたはポストペイド) を使用するには、コンソールでジョブを作成してください。
チューニングファイルのアップロード
ファインチューニングファイルの準備
SFT トレーニングセット
SFT ChatML (Chat Markup Language) 形式のトレーニングデータは、マルチターン対話とさまざまなロール設定をサポートします。
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}Model Studio コンソールからデータテンプレートをダウンロードすることもできます。 |
|
Model Studio へのファインチューニングファイルのアップロード
OpenAI 互換 Files API
import os
from pathlib import Path
from openai import OpenAI
client = OpenAI(
# 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換え、ご利用の Model Studio API キーを使用してください。
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得:https://www.alibabacloud.com/help/ja/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 以下はシンガポールリージョンの URL です。中国 (北京) リージョンのサービスを使用する場合は、URL を https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1 に置き換えてください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
# test.jsonl はローカルのサンプルファイルです。
file_object = client.files.create(file=Path("test.jsonl"), purpose="fine-tune")
print(file_object.model_dump_json())import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.files.*;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
// クライアントを作成し、環境変数から API キーを使用します。
OpenAIClient client = OpenAIOkHttpClient.builder()
// シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得:https://www.alibabacloud.com/help/ja/model-studio/get-api-key
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 以下はシンガポールリージョンの URL です。中国 (北京) リージョンのサービスを使用する場合は、URL を https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1 に置き換えてください。
.baseUrl("https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1")
.build();
// ファイルパスを設定します。必要に応じてパスとファイル名を変更してください。
Path filePath = Paths.get("src/main/java/org/example/test.txt");
// ファイルアップロードパラメーターを作成します。
FileCreateParams params = FileCreateParams.builder()
.file(filePath)
.purpose(FilePurpose.of("fine-tune"))
.build();
// ファイルをアップロードします。
FileObject fileObject = client.files().create(params);
System.out.println(fileObject);
}
}# ======= 重要 =======
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得:https://www.alibabacloud.com/help/ja/model-studio/get-api-key
# 以下はシンガポールリージョンの URL です。中国 (北京) リージョンのサービスを使用する場合は、URL を https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/files に置き換えてください。
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/files \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"test.jsonl"' \
--form 'purpose="fine-tune"'制限事項:
単一ファイルの最大サイズは 300 MB です。
削除されていないすべてのファイルの合計サイズは 5 GB に制限されています。
最大 100 個の削除されていないファイルを保存できます。
ファイルは無期限に保存されます。
モデルのファインチューニング
ファインチューニングジョブの作成
HTTP
Windows CMD の場合は、${DASHSCOPE_API_KEY}を%DASHSCOPE_API_KEY%に置き換えてください。PowerShell の場合は、$env:DASHSCOPE_API_KEYを使用してください。
curl --location "https://dashscope.aliyuncs.com/api/v1/fine-tunes" \
--header "Authorization: Bearer ${DASHSCOPE_API_KEY}" \
--header 'Content-Type: application/json' \
--data '{
"model":"qwen3-8b",
"training_file_ids":[
"<your_training_file_id_1>",
"<your_training_file_id_2>"
],
"hyper_parameters":
{
"n_epochs": 3,
"batch_size": 16,
"max_length": 8192,
"learning_rate": "1.6e-5",
"lr_scheduler_type": "linear",
"split": 0.9,
"warmup_ratio": 0.05,
"eval_steps": 50,
"data_augmentation": true,
"augmentation_ratio": "0.1,0.05,0.15",
"augmentation_types": "dialogue_CN,general_purpose_CN,NLP",
"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-8b-ft-202511272033-8ae7",
"model": "qwen3-8b",
"base_model": "qwen3-8b",
"training_file_ids":
[
"9e9ffdfa-c3bf-436e-9613-6f053c66aa6e"
],
"validation_file_ids":
[],
"hyper_parameters":
{
"n_epochs": 3,
"batch_size": 16,
"max_length": 8192,
"learning_rate": "1.6e-5",
"lr_scheduler_type": "linear",
"split": 0.9,
"warmup_ratio": 0.05,
"eval_steps": 50,
"data_augmentation": true,
"augmentation_ratio": "0.1,0.05,0.15",
"augmentation_types": "dialogue_CN,general_purpose_CN,NLP",
"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
}
}ベースモデル (model) とトレーニングタイプ (training_type)
hyper_parameters:サポートされている設定
ファインチューニングジョブの取得
ファインチューニングジョブの詳細を取得するには、ジョブ作成時に返された job_id を使用します。
HTTP
curl 'https://dashscope.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-8b-ft-202511272033-8ae7",
"model": "qwen3-8b",
"base_model": "qwen3-8b",
"training_file_ids":
[
"9e9ffdfa-c3bf-436e-9613-6f053c66aa6e"
],
"validation_file_ids":
[],
"hyper_parameters":
{
"n_epochs": 3,
"batch_size": 16,
"max_length": 8192,
"learning_rate": "1.6e-5",
"lr_scheduler_type": "linear",
"split": 0.9,
"warmup_ratio": 0.05,
"eval_steps": 50,
"data_augmentation": true,
"augmentation_ratio": "0.1,0.05,0.15",
"augmentation_types": "dialogue_CN,general_purpose_CN,NLP",
"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 が提供されます。この ID をモデルデプロイに使用します。
ファインチューニングジョブのログの取得
HTTP
curl 'https://dashscope.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.aliyuncs.com/api/v1/fine-tunes/<job_id>/checkpoints' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'リクエストパラメーター
パラメーター | データの型 | パラメーターの場所 | 必須 | 説明 |
job_id | 文字列 | パスパラメーター | はい | ファインチューニングジョブの ID。 |
応答例
checkpoint フィールドにはチェックポイント ID が含まれており、モデル公開 (オプション) API で公開するチェックポイントを指定します。model_name フィールドには、モデルデプロイに使用されるモデル ID が含まれています。元のファインチューニングジョブの応答の finetuned_output フィールドは、最終チェックポイントの model_name です。
{
"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-8b-instruct-ft-202511272033-8ae7",
"status": "SUCCEEDED"
}
]
}ステータス | 説明 |
PENDING | チェックポイントは公開待ちです。モデルデプロイと呼び出しに使用する前に、モデル公開 API を使用して公開する必要があります。 |
PROCESSING | チェックポイントは公開中です。 |
SUCCEEDED | チェックポイントは正常に公開されました。モデルデプロイと呼び出しに使用できるようになりました。 |
FAILED | チェックポイントの公開に失敗しました。 |
モデル公開 (オプション)
Model Studio では、ファインチューニングジョブが完了した後、モデルをデプロイする前にチェックポイントをエクスポートする必要があります。
エクスポートされたチェックポイントはクラウドストレージに保存されます。現時点では、アクセスしたりダウンロードしたりすることはできません。
curl --request GET 'https://dashscope.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
}公開タスクは非同期です。ファインチューニングジョブのチェックポイントをリスト表示 API を使用して、チェックポイントの公開ステータスをモニターします。
その他のファインチューニング操作
ファインチューニングジョブのリスト表示
curl 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' ファインチューニングジョブのキャンセル
実行中のファインチューニングジョブをキャンセルします。
curl --request POST 'https://dashscope.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.aliyuncs.com/api/v1/fine-tunes/<job_id>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' モデルデプロイと呼び出し
モデルデプロイ
モデルをデプロイするには、モデルデプロイコンソールに移動します。
モデルの呼び出し
モデルのデプロイメントステータスが RUNNING になると、他のモデルと同様にファインチューニングされたモデルを呼び出すことができます。
モデルデプロイコンソールから モデルコードを取得することもできます。
使用方法とパラメーターの詳細については、DashScope API リファレンスをご参照ください。
curl 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' \
--data '{
"model": "<your_model_instance_id>",
"input":{
"messages":[
{
"role": "user",
"content": "あなたは誰ですか?"
}
]
},
"parameters": {
"result_format": "message"
}
}'