本文档以千问模型的调优操作为例进行说明,通过 API (HTTP)和 命令行(Shell)两种方式,使用阿里云百炼提供的模型调优功能。模型调优包含模型微调(SFT)、继续预训练(CPT)、模型偏好训练(DPO)三种模型训练方式。
前提条件
通过 API 创建的训练任务仅支持按 Token 计费,暂不支持使用模型训练单元(预付费或后付费)。如需使用训练单元,请通过控制台创建任务。
上传调优文件
准备调优文件
SFT 训练集
SFT ChatML(Chat Markup Language)格式训练数据,支持多轮对话和多种角色设置。
不支持OpenAI 的name、weight参数,所有的 assistant 输出都会被训练。
# 一行训练数据(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格式示例.jsonl、SFT-ChatML格式示例.xlsx(xls、xlsx 格式只支持单轮对话)。
单条训练数据的所有 assistant 行都支持"loss_weight"参数,用于设置该行在训练时的相对重要性。(设置范围0.0 ~ 1.0,数值越大,重要性越高)
该参数属于邀测参数,如需使用,请联系您的商务经理。
{"role": "assistant", "content": "期望的模型输出1", "loss_weight": 1.0},
{"role": "assistant", "content": "期望的模型输出2", "loss_weight": 0.5}也可以前往百炼控制台下载数据模板。 |
|
将调优文件上传至阿里云百炼
OpenAI 兼容 - FIle 接口
import os
from pathlib import Path
from openai import OpenAI
client = OpenAI(
# 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
# 新加坡和北京地域的API Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 以下为新加坡地域url,若使用北京地域的服务,需将url替换为:https://dashscope.aliyuncs.com/compatible-mode/v1
base_url="https://dashscope-intl.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 Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 以下为新加坡地域url,若使用北京地域的服务,需将url替换为:https://dashscope.aliyuncs.com/compatible-mode/v1
.baseUrl("https://dashscope-intl.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 Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下为新加坡地域url,若使用北京地域的服务,需将url替换为:https://dashscope.aliyuncs.com/compatible-mode/v1/files
# === 执行时请删除该注释 ===
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"test.jsonl"' \
--form 'purpose="fine-tune"'使用限制:
单个文件大小最大为300MB
所有的有效文件(未删除)总使用空间配额为5GB
所有的有效文件(未删除)总数量配额为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":[
"<替换为训练数据集的file_id1>",
"<替换为训练数据集的file_id2>"
],
"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 | 是 | Array | Body | 训练集文件列表。 |
validation_file_ids | 否 | Array | Body | 验证集文件列表。 |
model | 是 | String | Body | 用于调优的基础模型 ID,或其他调优任务产出的模型 ID。 |
hyper_parameters | 否 | Map | Body | 用于调优模型的超参数。不同模型支持的参数及其默认值不同,请在控制台选择相同的模型和训练方式查看实际默认值。 以下参数影响训练费用,必须填写: |
training_type | 否 | String | Body | 调优方法,可选值为:
|
job_name | 否 | String | Body | 调优任务名称 |
model_name | 否 | String | Body | 调优产生的模型名称(并非模型 ID,模型 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
}
}支持的基础模型ID(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 | String | Path Parameter | 是 | 要查询的调优任务的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 | 训练正在排队(同时只有一个训练任务可以进行) |
RUNNING | 训练正在进行中。 |
CANCELING | 训练正在取消中。 |
SUCCEEDED | 训练成功。 |
FAILED | 训练失败。 |
CANCELED | 训练已经取消。 |
训练成功后,finetuned_output指的是调优成功后的模型 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)支持保存和发布其中间状态的模型参数快照(Checkpoint)。
查询调优任务的参数快照列表
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 | String | Path Parameter | 是 | 要查询的调优任务的ID。 |
返回成功样例
checkpoint指的是 Checkpoint ID,用于在模型发布(可选) API 中指定要发布的快照;model_name指的是模型 ID,可用于模型部署。(finetuned_output 输出的是最后一个 checkpoint 的 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"
}
]
}快照发布状态 (status) | 含义 |
PENDING | |
PROCESSING | 快照(Checkpoint)发布中。 |
SUCCEEDED | 快照(Checkpoint)发布成功。可直接进行模型部署&调用。 |
FAILED | 快照(Checkpoint)发布失败。 |
模型发布(可选)
在百炼平台上,模型调优完成后可以导出参数快照,导出后才能基于此版本的参数快照在百炼上进行模型部署。
导出的参数快照保存在云存储中,暂不支持访问或下载。
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 | String | Path Parameter | 是 | 要查询的调优任务的 ID。 |
checkpoint_id | String | Path Parameter | 是 | 要发布的 Checkpoint ID。 |
model_name | String | Path Parameter | 是 | 发布后期望的模型 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时,可以像调用其他模型一样使用调优后的模型。
也可以前往模型部署控制台界面获取模型code。
更多使用方法和参数设置请前往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": "<替换为部署任务成功后的模型实例 ID>",
"input":{
"messages":[
{
"role": "user",
"content": "你是谁?"
}
]
},
"parameters": {
"result_format": "message"
}
}'