本文档以千问模型的调优操作为例进行说明,通过 API (HTTP)的方式,使用阿里云百炼提供的模型调优(微调)功能。
本文档仅适用于国际版(新加坡地域)。
前提条件
了解模型调优(微调)的基本概念、流程及数据格式要求。
已开通服务并配置了 API-KEY, 请参考获取API Key。
模型调优介绍
模型调优作为重要的模型效果优化方式,可以:
提升模型在特定行业/业务表现
降低模型输出延迟
抑制模型幻觉
对齐人类的价值观或偏好
使用调优后的轻量级模型替代规模更大的模型
模型在调优过程中,会学习训练数据中的知识、语气、表达习惯、自我认知等业务/场景特征。也由于已经在训练过程中学习到了大量特定行业/场景的样例,训练后模型 One-Shot 或者 Zero-Shot 的 Prompt 效果会比训练前 Few-Shot 效果更好,这样可以节省大量输入 token,从而降低模型输出延迟。
整体流程
支持的模型
文本生成
模型名称 | 模型代码 | SFT全参训练 (sft) | SFT高效训练 (efficient_sft) |
千问3-32B | qwen3-32b | ||
千问3-14B | qwen3-14b | ||
千问3-VL-8B-Instruct | qwen3-vl-8b-instruct | ||
千问3-VL-8B-Thinking | qwen3-vl-8b-thinking |
训练模式对比
全参训练 | 高效训练 (LoRA,推荐) | |
适用场景 | • 需要模型学习新能力 • 追求全局效果最优 | • 优化模型特定场景下的效果 • 对训练时间和成本敏感的场景 |
训练时间 | 较长,收敛速度较慢。 | 较短,收敛速度快。 |
模型调优计费说明
计费方式 | 按训练的数据量计费 |
计费公式 | 模型训练费用 = (训练数据 Token 总数 + 混合训练数据 Token 总数)× 循环次数 × 训练单价(最小计费单位:1 token) |
数据集构建技巧
数据集的规模要求
对于 SFT 来说,数据集最少需要上千条优质调优数据。如果数据调优后的模型评测结果不佳,最简单的改进方法是收集更多数据进行训练。
如果您缺乏数据,建议构建智能体应用,使用知识库索引来增强模型能力。当然在很多复杂的业务场景,可以综合采用模型调优和知识库检索结合的技术方案。
以客服场景为例,可以借助模型调优解决客服回答的语气、表达习惯、自我认知等问题,场景涉及的专业知识可以结合知识库,动态引入到模型上下文中。
阿里云百炼推荐您可以先构建 RAG 应用试运行,在收集到足够的应用数据后再通过模型调优继续提升模型表现。
您也可以采用以下策略扩充数据集:
让大模型模拟生成特定业务/场景的相关内容,辅助您生成更多用于调优数据。(生成模型建议选取表现优异、规模更大的模型)
通过应用场景收集、网络爬虫、社交媒体和在线论坛、公开数据集、合作伙伴与行业资源、用户贡献等各种方式,人工获取更多数据。
数据的多样性与均衡性
模型调优有不同场景,针对具体业务场景时,专业性更重要;而针对问答场景时通用性更重要。您需要根据模型负责的业务模块或使用场景进行数据用例设计。因此训练效果好坏并不是仅取决于数据量,更需要考虑针对场景的专业性和多样性。
这里以智能 AI 对话场景为例,介绍一个专业、多样的数据集应该包含的各种业务场景:
具体业务 | 多样化场景/业务 |
电商客服 | 活动推送、售前咨询、售中引导、售后服务、售后回访、投诉处理等。 |
金融服务 | 贷款咨询、投资理财顾问、信用卡服务、银行账户管理等。 |
在线医疗 | 病症咨询、挂号预约、就诊须知、药品信息查询、健康小建议等。 |
AI 秘书 | IT 信息、行政信息、HR 信息、员工福利解答、公司日历查询等。 |
旅游出行助手 | 旅行规划、出入境指南、旅行保险咨询、目的地风土人情介绍等。 |
企业法律顾问 | 合同审核、知识产权保护、合规性检查、劳动法律答疑、跨境交易咨询、个案法律分析等。 |
还请特别注意的是各个场景/业务的数据数量应相对均衡,数据比例符合实际场景比例,避免某一类数据过多导致模型偏向于学习该类特征,影响模型的泛化能力。
上传训练数据集
准备数据集
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}SFT 思考模型(thinking)
训练数据支持多轮对话和多种角色设置,但只能针对最后的 assistant 输出进行训练:
思考标签前后的若干个\n必须要保留。# 一行训练数据(json 格式),展开后典型结构如下:
{"messages": [
{"role": "system", "content": "系统输入1"},
{"role": "user", "content": "用户输入1"},
{"role": "assistant", "content": "模型输出1"}, --中间的 assitant 输出不应添加 <think> 标签
...
{"role": "user", "content": "用户输入2"},
{"role": "assistant", "content": "<think>\n期望的思考内容2\n</think>\n\n期望的输出2"} --思考内容只能包含在最后一个 assistant 输出中。
]}system/user/assistant 区别请参见文本生成模型概述,训练数据集样例:SFT- 深度思考内容示例.jsonl。
也可以在训练样本中设置模型不输出<think>标签, 如果使用这种输出方式,模型训练完成后不建议再开启思考模式进行调用。
{"role": "assistant", "content": "期望的模型输出2"} --告诉模型不开启思考单条训练数据最后的 assistant 行支持"loss_weight"参数,用于设置该条数据在训练时的相对重要性。(设置范围0.0 ~ 1.0,数值越大,重要性越高)
该参数属于邀测参数,如需使用,请联系您的商务经理。
{"role": "assistant", "content": "<think>\n期望的思考内容2\n</think>\n\n期望的输出2", "loss_weight": 1.0}SFT 图像理解(千问VL)
不支持OpenAI 的name、weight参数,所有的 assistant 输出都会被训练。
system/user/assistant 区别请参见文本生成模型概述。ChatML 格式训练数据样例:
# 一行训练数据(json 格式),展开后典型结构如下:
{"messages":[
{"role":"user",
"content":[
{"text":"用户输入1"},
{"image":"图像文件名1"}]},
{"role":"assistant",
"content":[
{"text":"模型期望输出1"}]},
{"role":"user",
"content":[
{"text":"用户输入2"}]},
{"role":"assistant",
"content":[
{"text":"模型期望输出2"}]},
...
...
...
]}如果训练思考模型(Thinking),也需要遵循SFT 思考模型(thinking)的数据格式要求。
压缩包要求:
压缩包格式:ZIP。最大支持 2 GB, ZIP 包内文件夹、文件名仅支持 ASCII 字符集中的字母 (a-z, A-Z)、数字 (0-9)、下划线 (_)、连字符 (-)。
训练文本数据固定为 data.jsonl,并且位于压缩包的根目录下,应确保压缩后打开 zip 文件,直接就能看到
data.jsonl文件。图片单张尺寸的宽度和高度均不得超过 1024px,最大不超过10MB,支持
.bmp,.jpeg /.jpg,.png,.tif /.tiff,.webp格式。图片文件的名称不能重复,即使分布在不同的文件夹中。
压缩包目录结构:
单层目录(推荐)
图片文件与
data.jsonl文件均位于压缩包根目录下。Trainingdata_vl.zip |--- data.jsonl #注意:外层不能再包裹文件夹 |--- image1.png |--- image2.jpg多层目录
data.jsonl 必须在压缩包根目录下。
data.jsonl 内只需要声明图像文件名,不需要声明文件路径。例如:
正确示例:
image1.jpg;错误示例:jpg_folder/image1.jpg。图像文件名应在压缩包内全局唯一。
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"'使用限制:
单个文件大小最大为 1GB
所有有效文件(未删除)总使用空间配额为5GB
所有有效文件(未删除)总数量配额为100个
文件存储没有时间限制
更多 API 使用详细信息请参见 OpenAI兼容-File。
返回结果:
{
"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":[
"<替换为训练数据集的file_id1>",
"<替换为训练数据集的file_id2>"
],
"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 | 是 | 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-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 | 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-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 | 训练正在排队(同时只有一个训练任务可以进行) |
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)支持保存和发布其中间状态的模型参数快照(Checkpoint)。
查询调优任务的参数快照列表
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 | String | Path Parameter | 是 | 要查询的调优任务的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"
}
]
}快照发布状态 (status) | 含义 |
PENDING | 快照(Checkpoint)待导出。 |
PROCESSING | 快照(Checkpoint)导出中。 |
SUCCEEDED | 快照(Checkpoint)导出成功。 |
FAILED | 快照(Checkpoint)导出失败。 |
checkpoint指的是 Checkpoint ID,用于在模型发布 API 中指定要导出的快照;model_name指的是模型 ID,可用于模型部署。(finetuned_output 输出的是最后一个 checkpoint 的 model_name)
模型发布
在百炼平台上,模型调优完成后可以导出参数快照,导出后才能基于此版本的参数快照在百炼上进行模型部署。
导出的参数快照保存在云存储中,暂不支持访问或下载。
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 | 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-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 兼容、Dashscope及Assistant SDK进行调用。
在调用已部署成功的模型时,model的取值应为模型部署成功后的模型code。请前往模型部署控制台(新加坡)界面获取模型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": "<替换为部署任务成功后的模型实例 Code>",
"input":{
"messages":[
{
"role": "user",
"content": "你是谁?"
}
]
},
"parameters": {
"result_format": "message"
}
}'常见问题
可以上传和部署自己的模型吗?
暂不支持上传和部署自有模型,建议您持续关注阿里云百炼最新动态。
此外,阿里云人工智能平台 PAI 提供了部署自有模型的功能,您可以参考PAI-LLM大语言模型部署了解部署方法。