当使用万相进行 图像生成 时,若通过 Prompt 优化 仍无法满足对 特定风格、IP形象或画面效果 的定制需求,请使用 模型微调 。
适用范围
-
适用部署模式及地域:本文描述的功能仅在华北2(北京)地域可用,且必须使用该地域的API Key。
-
支持微调的方式:SFT-LoRA高效微调。
-
支持微调的模型:
- 图像生成(文生图/图生图):wan2.7-image-pro、wan2.7-image。
如何微调模型
文生图
微调目标:训练一个人物LoRA模型。
预期效果:输入一段提示词,模型自动生成特定人物在符合提示词场景下的描述。
| 输入提示词 人物在拥挤的早高峰地铁车厢内,抓着扶手,背景是模糊的乘客和车窗外的隧道灯光,身穿普通的上班族白衬衫和黑色西裤,人物站立面向镜头,半身照,写实抓拍感。 | 输出图像(微调前-文生图)![]()
| 输出图像(微调后)![]()
|
图生图
微调目标:训练一个"末日废土红黑机甲+骨架姿势"LoRA模型。
预期效果:输入一张人物图像,一张骨架图像,无需提示词,模型自动生成人物“末日废土红黑机甲”风格的图像。
输入图像![]() | 输出图像(微调前)![]()
| 输出图像(微调后)![]()
|
步骤1:上传数据集
将本地的数据集(.zip 格式)上传到阿里云百炼平台,并获取文件 ID (file_id)。
训练集样例数据:格式请参见训练集。
- 图像生成-文生图:wan-image-t2i-training-dataset.zip
- 图像生成-图生图:wan-image-i2i-training-dataset.zip
本示例使用文生图,仅上传训练集,系统将自动从训练集中划分一部分作为验证集。
curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/files' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'files=@"./wan-image-t2i-training-dataset.zip"' \
--form 'purpose="fine-tune"' \
--form 'descriptions="a fine-tune training data file for wan"'
响应示例
请保存 file_id,这是上传数据集的唯一标识。
{
"data": {
"uploaded_files": [
{
"name": "wan-image-t2i-training-dataset.zip",
"file_id": "3bff1ef7-f72d-4285-bb75-xxxxxx"
}
],
"failed_uploads": []
},
"request_id": "1f3f1c5b-7418-4976-aaea-xxxxxx"
}
步骤2:微调模型
步骤2.1 创建微调任务
使用步骤1中的文件ID启动训练任务。
请求示例请将<替换为训练数据集的文件id>完整替换为上一步获取的file_id。完整参数说明与格式约束请参见超参数。
超参数
字段 | 类型 | 必选 | 描述 | 推荐值 |
|---|---|---|---|---|
max_steps | int | 是 | 训练总步数。控制训练时长的核心参数。max_steps 决定训练迭代次数,max_token_length 决定每步处理的数据量。建议不少于 500 步以确保模型充分收敛;大数据集可适当增加步数。 | 800 |
eval_steps | int | 是 | 验证间隔。取值需≥0。训练期间每隔多少个 steps 进行一次验证评估,用于阶段性评估模型训练效果。同时保存当前 step 的模型文件。 | 200 |
learning_rate | float | 是 | 学习率。控制模型权重更新的幅度。过高可能导致模型变差,过低则变化不明显。推荐使用默认值。 | 3e-5 |
generation_type | string | 是 | 生成模式。 | t2i |
max_pixels | string | 是 | 训练图片的最大分辨率。例如 "1k"、"2k"(1K 即 1024×1024,2K 即 2048×2048)。设置训练集中图片分辨率的像素总数(宽×高)上限,系统仅对超过该值的图片进行缩放处理,未超限的图片保持原样。建议三个分辨率参数(max_pixels、max_token_length、val_img_size)保持一致。 | 文生图:"2k" |
val_img_size | string | 是 | 验证图生成分辨率。例如 "1k"、"2k"(1K 即 1024×1024,2K 即 2048×2048)。训练过程中验证评估时生成图片的目标分辨率。 | 文生图:"2k" |
max_token_length | string | 是 | 每步训练的最大 Token 长度。例如 "1k"、"2k"。与 max_steps 共同控制训练过程:max_steps 决定迭代次数,max_token_length 决定每步处理的数据量。 | 文生图:"2k" |
gradient_clip | float | 是 | 梯度裁剪。对所有可训练参数做全局梯度范数裁剪的阈值,防止梯度爆炸。设为 -1 表示不裁剪。 | 0.5 |
weight_decay | float | 是 | 权重衰减。AdamW 解耦式权重衰减系数,对所有可训练参数生效,用于正则化防止过拟合。 | 0.02 |
lora_rank | int | 是 | LoRA 低秩矩阵的维数。该值决定了微调参数量的大小。数值越大,模型拟合能力越强,但训练速度会变慢。取值必须为 2n(如 16、32、64)。 | 32 |
save_total_limit | int | 否 | Checkpoint 保存数量上限。限制最多保存的模型数量。系统将始终只保存训练生成的最后 N 个 Checkpoint(N 为该参数值)。 | 10 |
split | float | 否 | 训练集划分比例。取值范围为 (0, 1)。仅在未指定 | 0.9 |
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "wan2.7-image-pro",
"training_datasets": [
{
"data_source_type": "file_id",
"file_id": "<替换为训练数据集的文件id>"
}
],
"training_type": "efficient_sft",
"hyper_parameters": {
"learning_rate": 3e-5,
"max_steps": 800,
"eval_steps": 200,
"max_token_length": "1k",
"gradient_clip": 0.5,
"weight_decay": 0.02,
"max_pixels": "1k",
"val_img_size": "1k",
"generation_type": "t2i",
"lora_rank": 32,
"save_total_limit": 10
}
}'
除使用步骤 1 获取的文件 ID 外,您还可以通过 OSS 挂载方式加载训练数据集,请求示例如下:
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "wan2.7-image-pro",
"training_datasets": [
{
"data_source_type": "oss_mount",
"mount_storage": {
"region": "cn-beijing",
"bucket": "example_bucket",
"file_path": "dataset/data.jsonl"
}
}
],
"training_type": "efficient_sft",
"hyper_parameters": {
"learning_rate": 3e-5,
"max_steps": 800,
"eval_steps": 200,
"max_token_length": "1k",
"gradient_clip": 0.5,
"weight_decay": 0.02,
"max_pixels": "1k",
"val_img_size": "1k",
"generation_type": "t2i",
"lora_rank": 32,
"save_total_limit": 10
}
}'
说明使用 OSS 挂载方式加载数据集时,需将未经压缩的数据集文件夹整体上传到 OSS Bucket(如 dataset 文件夹下包含 data.jsonl 及对应的图片文件),不支持 zip 文件;挂载时指定 data.jsonl 的文件路径即可,无需单独指定图片文件。OSS Bucket 所属地域支持北京(cn-beijing)和新加坡(ap-southeast-1)。
说明训练耗时(仅供参考):
- 文生图(t2i):2K,300 步,约 77 分钟。
- 图生图(i2i):2K,300 步,约 110 分钟。
关注 output 中的三个关键参数:
job_id:任务ID,用于查询进度。finetuned_output:微调后的新模型名称,后续部署和调用时必须使用此名称。status:模型训练状态。创建微调任务后,初始状态为PENDING,表示训练待开始。
{
...
"output": {
"job_id": "ft-202511111122-xxxx",
"status": "PENDING",
"finetuned_output": "xxxx-ft-202511111122-xxxx",
...
}
}
步骤2.2 查询微调任务状态
通过步骤2.1获得的 job_id 查询任务进度,轮询以下接口直到 status 变为 SUCCEEDED。
请将 URL 中的 <替换为微调任务job_id> 完整替换为job_id的值。
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json'
响应示例
关注output 字段的两个参数:
status:当它的值变为 SUCCEEDED 时,表示模型已训练完毕,可以进行模型部署。usage:模型训练消耗的总Token数量,用于模型训练计费。
{
...
"output": {
"job_id": "ft-202511111122-xxxx",
"status": "SUCCEEDED",
"usage": 432000,
...
}
}
步骤3:部署微调后的模型
步骤3.1 部署模型为在线服务
当微调任务的状态为 SUCCEEDED 后,将模型部署为在线服务。
请求示例请将<替换为模型名称model_name> 完整替换为创建微调任务的输出参数finetuned_output的值。
curl --location 'https://dashscope.aliyuncs.com/api/v1/deployments' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model_name": "<替换为模型名称model_name>",
"capacity": 1,
"plan": "lora"
}'
响应示例
关注 output 中的两个参数:
deployed_model:部署的模型名称,用于查询部署状态和调用模型。status:模型部署状态。部署微调模型后,初始状态为PENDING,表示部署未开始。
{
...
"output": {
"deployed_model": "wan2.7-image-pro-xxxxxxxxxxxx",
"status": "PENDING",
...
}
}
步骤3.2 查询部署状态
查询部署状态,轮询以下接口直到 status 变为 RUNNING。
说明本文示例的微调模型,部署过程预计需要 5~10分钟。
请将<替换为deployed_model>完整替换为步骤3.1输出参数deployed_model的值。
curl --location 'https://dashscope.aliyuncs.com/api/v1/deployments/<替换为deployed_model>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json'
响应示例
关注output字段的两个参数:
status:当状态变为 RUNNING 时,表示模型已部署成功,可以开始调用。deployed_model:部署的模型名称。
{
...
"output": {
"status": "RUNNING",
"deployed_model": "wan2.7-image-pro-xxxxxxxxxxxx",
...
}
}
步骤4:调用模型生成图像
模型部署成功后(即部署状态status为 RUNNING ),即可发起调用。
说明当前部署后的图像模型仅支持异步调用,且返回响应的message.content中无type字段。
步骤4.1:创建图像生成任务,并获取task_id
请将<替换为部署名称deployed_model>完整替换为上一步输出的deployed_model值。
文生图
输入一段包含触发词的文本描述,模型自动生成符合训练风格的图像。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "X-DashScope-Async: enable" \
--data '{
"model": "<替换为部署名称deployed_model>",
"input": {
"messages": [
{
"role": "user",
"content": [
{"text": "s86b5p, 人物在拥挤的早高峰地铁车厢内,抓着扶手,背景是模糊的乘客和车窗外的隧道灯光,身穿普通的上班族白衬衫和黑色西裤,人物站立面向镜头,半身照,写实抓拍感。"}
]
}
]
},
"parameters": {
"size": "2K",
"n": 1
}
}'
图生图
输入一张参考图像和编辑指令,模型基于参考图像生成符合训练风格的图像。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "X-DashScope-Async: enable" \
--data '{
"model": "<替换为部署名称deployed_model>",
"input": {
"messages": [
{
"role": "user",
"content": [
{"image": "<替换为参考图像URL>"},
{"text": "s86b5p, Change the background to an elevator with red lighting. Change the character clothing to red tight-fitting mech armor with black stripe decorations."}
]
}
]
},
"parameters": {
"size": "2K",
"n": 1
}
}'
请复制并保存task_id,用于下一步结果查询。
{
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx",
"output": {
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx",
"task_status": "PENDING"
}
}
输入参数说明说明调用微调后的 LoRA 模型时,输入参数用法与万相-图像生成与编辑2.7 API保持一致。
下表仅列出 LoRA 模型调用时的关键参数说明。
字段 | 类型 | 必选 | 描述 | 示例值 |
|---|---|---|---|---|
model | string | 是 | 模型名称。必须使用已成功部署且部署状态为RUNNING的微调模型。 | wan2.7-image-pro-xxxxxxxxxxxx |
input.messages[].content[].text | string | 是 | 文本提示词。建议包含触发词以激活 LoRA 风格。 | s86b5p, 人物在午后静谧的私人图书馆... |
parameters.size | string | 否 | 输出图片分辨率。
| 2K |
parameters.n | integer | 否 | 生成图像数量,取值范围 1~4,默认为 1。 | 1 |
步骤4.2:根据task_id查询结果
使用task_id轮询任务状态,直到 task_status 变为 SUCCEEDED,从output.choices[].message.content[].image获取图像URL。
请将
86ecf553-d340-4e21-xxxxxxxxx替换为真实的task_id。
curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
响应示例图像URL有效期为24小时,请及时下载图像。
{
"request_id": "3f2ebb4e-3d47-97b5-xxxx-xxxxxx",
"output": {
"task_id": "aeea547c-e24e-4acb-xxxx-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2026-05-29 17:35:23.826",
"scheduled_time": "2026-05-29 17:35:23.865",
"end_time": "2026-05-29 17:36:32.498",
"finished": true,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-7c2c.oss-accelerate.aliyuncs.com/xxx.png?Expires=xxxxxx"
}
]
}
}
]
},
"usage": {
"size": "2048*2048",
"total_tokens": 770,
"image_count": 1,
"output_tokens": 691,
"input_tokens": 79
}
}
构建自定义数据集
除了使用本文示例数据体验微调流程外,您也可以构建自己的数据集进行微调。
数据集应包含 训练集(必须)和 验证集(可选,支持从训练集自动划分)。所有文件请打包为.zip格式,文件名建议仅使用英文、数字、下划线或短横线。
数据集格式
训练集:必须提供
文生图
训练集包括训练目标图像和标注文件(data.jsonl)。
- 训练集样例:wan-image-t2i-training-dataset.zip
- zip包目录结构:
wan-image-t2i-training-dataset.zip
├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB
├── 1_0.png # 训练目标图像,最大分辨率4096*4096,单张≤20MB,支持PNG/JPG/JPEG/WEBP/BMP
├── 1_1.png # 文件名仅支持英文字符,平铺结构(禁止子目录)
└── 1_2.png
- 标注文件(data.jsonl):每一行代表一条训练数据,必须为 JSON 对象。
{
"prompt": "s86b5p, 人物在午后静谧的私人图书馆,身后是高耸的深色胡桃木书架,阳光透过百叶窗洒下条纹状的光影,身穿柔软的米色绞花针织毛衣,人物站立面向镜头,半身照,画面具有细腻的胶片颗粒感。",
"img_path": "./1_0.png"
}
单图生图
训练集包括参考图像(输入)、训练目标图像(输出)和标注文件(data.jsonl)。
- 训练集样例:wan-image-i2i-training-dataset.zip
- zip包目录结构:
wan-image-i2i-training-dataset.zip
├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB
├── 1_0.jpg # 训练目标图像(输出)
├── 1_1.jpg # 参考图像(输入)
├── 6_0.jpg # 训练目标图像(输出)
└── 6_1.jpg # 参考图像(输入)
- 标注文件(data.jsonl):每一行代表一条训练数据,必须为 JSON 对象。
{
"prompt": "s86b5p, Change the background to an elevator with red lighting, featuring large floor-to-ceiling windows. Change the character's clothing to red tight-fitting mech armor with black stripe decorations.",
"input_img": "./1_1.jpg",
"img_path": "./1_0.jpg"
}
多图生图
训练集包括多张参考图像(输入)、训练目标图像(输出)和标注文件(data.jsonl)。与单图生图不同,多图生图支持同时输入多张参考图像(如人物照片+姿态图,最多支持9张参考图),模型基于多张参考图的综合信息生成目标图像。
说明
- 多图生图使用
input_imgs(数组),单图生图使用input_img(字符串),请注意区分。 input_imgs数组中的图像顺序应与训练意图一致(如第一张为人物参考,第二张为姿态参考)。
- 训练集样例:wan-image-i2i-training-dataset.zip
- zip包目录结构:
wan-image-multi-i2i-training-dataset.zip
├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB
├── 1_0.jpg # 训练目标图像(输出)
├── 1_ref.jpg # 参考图像1(如人物照片)
├── 1_pose.jpg # 参考图像2(如姿态图)
├── 2_0.jpg # 训练目标图像(输出)
├── 2_ref.jpg # 参考图像1
└── 2_pose.jpg # 参考图像2
- 标注文件(data.jsonl):每一行代表一条训练数据,必须为 JSON 对象。使用
input_imgs字段传入多张参考图像路径。
{
"prompt": "s86b5p, Change the background to an elevator with red lighting, featuring large floor-to-ceiling windows. Outside the windows, there is a post-apocalyptic scene with red mist. Change the character's clothing to red tight-fitting mech armor with black stripe decorations. Standing with both arms stretched horizontally to form a T-shape.",
"input_imgs": ["./1_ref.jpg", "./1_pose.jpg"],
"img_path": "./1_0.jpg"
}
说明
- data.jsonl 必须为 Line-delimited JSONL 格式(每行一个独立 JSON 对象),禁止使用 JSON 数组格式(即文件首字符不能是
[)。 - zip 包内文件必须平铺放置,禁止使用子目录。文件名仅支持英文字符(禁止中文、空格、特殊字符)。
验证集:可选
验证集包括标注文件(data.jsonl)和可选的参考图像(图生图模式需要),无需提供目标图像。训练任务会在每个评估节点,自动调用模型服务,使用验证集的 Prompt(和参考图像)生成预览图像。
-
验证集:
-
zip包目录结构:
wan-image-i2i-valid-dataset.zip
├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB
├── input_001.png # 可选,图生图模式的参考图像
└── input_002.png
-
标注文件(data.jsonl):每一行代表一条验证数据,必须为 JSON 对象。
文生图
{ "prompt": "s86b5p, 人物在拥挤的早高峰地铁车厢内,抓着扶手,背景是模糊的乘客和车窗外的隧道灯光,身穿普通的上班族白衬衫和黑色西裤,人物站立面向镜头,半身照,写实抓拍感。" }图生图
{ "prompt": "s86b5p, Change the background to an elevator with red lighting, featuring large floor-to-ceiling windows. Change the character's clothing to red tight-fitting mech armor with black stripe decorations.", "input_img": "./input_001.png" }多图生图
多图生图验证集使用
input_imgs(数组)传入多张参考图像路径,最多支持9张。{ "prompt": "s86b5p, Change the background to an elevator with red lighting, featuring large floor-to-ceiling windows. Outside the windows, there is a post-apocalyptic scene with red mist. Change the character's clothing to red tight-fitting mech armor with black stripe decorations. Standing with both arms stretched horizontally to form a T-shape.", "input_imgs": ["./input_001.png", "./input_002.png"] }
数据规模与限制
-
数据量:建议至少提供 25张 图像(推荐 50 张以上效果更佳)。要求同一角色/风格,多场景多角度,内容描述一致。
-
Zip压缩包:通过 API 上传时,总包大小 ≤ 1GB。
-
训练图像要求:
- 图像格式支持BMP、JPEG、PNG、WEBP。
- 图像分辨率 ≤ 4096×4096。
- 单个图像文件大小 ≤ 20MB。
数据收集和清洗
1. 确定微调场景
万相支持图像生成的微调场景包括:
- IP角色风格化:让模型学会特定IP角色的绘画风格,如二次元人物、吉祥物形象等。
- 固定画面风格:提升模型对特定艺术风格的复现度,如扁平插画、水墨画、像素风等。
- 特定场景生成:复刻特定的构图模式或场景模板,如商品展示图、海报版式等。
2. 获取原始素材
- AI 生成筛选:利用"万相"基础模型批量生成图像,再人工挑选出最符合目标效果的优质样本。这是最常用的方法。
- 真实拍摄:如果您的目标是追求高真实感的场景(如产品实拍、人物摄影等),使用实拍素材是最佳选择。
- 三维软件渲染:对于需要控制细节的场景或3D渲染风格,建议使用 3D 软件(如 Blender、C4D)制作素材。
3. 清洗数据
维度 | 正面要求 | 负面案例 |
|---|---|---|
一致性 | 核心特征必须高度统一。 例如:训练"扁平插画风格",所有图像必须都是相同的线条粗细和配色方案。 | 风格混杂。 数据集中既有厚涂风格,又有扁平风格。模型不知道该学哪种风格。 |
多样性 | 主体与场景越丰富越好。 覆盖不同主体(男女老少、猫狗建筑)和不同构图(远景、近景、特写)。同时,分辨率和长宽比应尽可能多样化。 | 单一场景或主体。 所有图像都是"穿红衣的人在白墙前"。模型会误以为"红衣"和"白墙"是风格的一部分,换了场景就不会生成了。 |
均衡性 | 各类型数据比例均衡。 如果包含多种风格,数量应大致相等。 | 比例严重失调。 90%是人像图像,10%是风景图像。模型可能在生成风景图像时效果不佳。 |
纯净度 | 画面干净清晰。 使用无干扰的原始素材。 | 有干扰元素。 图像中带有水印、明显的黑边或噪点。模型可能会把水印当成风格学进去。 |
分辨率 | 分辨率适中。 建议训练图像分辨率不超过 2048×2048,过大的图像会增加训练时间。 | 分辨率差异过大。 训练集中既有 256×256 的小图,又有 4096×4096 的大图,会影响训练稳定性。 |
图像标注:为图像编写Prompt
在数据集的标注文件(data.jsonl)中,每张图像都有对应的一段 Prompt。Prompt 是用来描述目标图像的画面内容,Prompt 的质量直接决定模型"学什么"。
Prompt编写公式
Prompt = [主体描述] + [背景描述] + [触发词] + [风格描述]Prompt描述项 | 说明 | 填写建议 | 示例 |
|---|---|---|---|
主体描述 | 描述画面中原本存在的人或物 | 必填 | 一位年轻女性身着红色中式长衫... |
背景描述 | 描述画面中主体所处的环境 | 必填 | 背景是被绿色的藤蔓覆盖的砖墙... |
触发词 | 一个无实际意义的稀有词汇 | 推荐填写 | s86b5p 或 m01aa |
风格描述 | 详细描述目标图像的艺术风格和画面特征 | 推荐填写 | 采用扁平化插画风格,以简洁流畅的线条、鲜明平涂色彩突出主体立体感与现代设计感。 |
使用验证集评估模型
指定验证集
微调任务必须包含训练集,验证集则是可选项。您可以选择由系统自动划分或手动上传验证集,具体指定方式如下:
方式一:未上传验证集(系统自动划分)
在创建微调任务时,如果没有单独上传验证集(即未传入validation_datasets参数),系统将根据split从训练集划分验证集,默认 0.9。即 90% 用于训练,10% 用作验证。
方式二:主动上传验证集(通过 validation_datasets 指定)
如果您希望使用一套自己准备的数据来评估Checkpoint,而不是依赖系统随机划分,可以上传自定义验证集。
注意:一旦选择主动上传,系统将完全忽略上述自动划分规则,仅使用您上传的数据进行验证。
挑选最佳Checkpoint进行部署
在训练过程中,系统会定期保存模型的"快照"(即 Checkpoint)。默认情况下,系统会输出最后一个Checkpoint作为最终的微调模型。但中间过程产出的Checkpoint效果可能优于最终版本,您可以从中挑选出最满意的一个进行部署。
系统将按照超参数eval_steps设定的间隔,在验证集上运行Checkpoint并生成预览图像。
- 如何评估:通过直接观察生成的预览图像来判断效果。
- 挑选标准:找到效果最好、且风格最贴合的那个 Checkpoint 。
操作步骤
步骤1:查看Checkpoint生成的预览效果
步骤1.1 查询已通过验证的Checkpoint列表
该接口仅返回通过验证集验证、且成功生成预览图像的 Checkpoint,验证失败的不会列出。
请求示例<替换为微调任务job_id>:完整替换为创建微调任务接口的输出参数job_id。
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/validation-results' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json'
响应示例此接口返回一个仅包含成功通过验证的Checkpoint名称的列表。
{
"request_id": "da1310f5-5a21-4e29-99d4-xxxxxx",
"output": [
{
"checkpoint": "checkpoint-160"
},
...
]
}
步骤1.2 查询Checkpoint对应的验证集结果
从上一步返回的 Checkpoint 列表中选择一个(例如"checkpoint-160"),查看其生成的图像效果。
请求示例<替换为微调任务job_id>: 完整替换为创建微调任务输出参数job_id的值。<替换为待导出的checkpoint>:完整替换为checkpoint的值,例如"checkpoint-160"。
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/validation-details/<替换为选择的checkpoint>?page_no=1&page_size=10' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
响应示例预览图像URL为img_path,有效期为24小时,请及时下载图像并查看效果。重复此步骤,比较多个Checkpoint的效果,找出最满意的一个。
{
"request_id": "375b3ad0-d3fa-451f-b629-xxxxxxx",
"output": {
"page_no": 1,
"page_size": 10,
"total": 5,
"list": [
{
"img_path": "https://finetune-result.oss-cn-wulanchabu.aliyuncs.com/xxx.png?Expires=xxxxxx",
"prompt": "s86b5p, Change the background to an elevator equipped with a white ceiling lighting, featuring large floor-to-ceiling windows. Change the character's clothing to red tight-fitting mech armor with black stripe decorations.",
"input_img": "https://finetune-result.oss-cn-wulanchabu.aliyuncs.com/val_dataset/input_001.png?Expires=xxxxxx"
},
...
]
}
}
步骤2:导出Checkpoint,并获取待部署的模型名称
步骤2.1 导出模型
假设"checkpoint-160"的效果最佳,接下来是将其导出。
请求示例<替换为微调任务job_id>: 完整替换为创建微调任务输出参数job_id的值。<替换为待导出的checkpoint>:完整替换为checkpoint的值,例如"checkpoint-160"。<替换为控制台展示的导出模型名称>:完整替换为自定义的模型名称,仅用于控制台展示,例如"wan2.5-checkpoint-160"。该名称必须全局唯一,不支持重复名称多次导出,参数填写请参见导出Checkpoint。
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/export/<替换为待导出的checkpoint>?model_name=<替换为控制台展示的导出模型名称>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
响应示例响应参数output=true,表示导出请求已成功创建。
{
"request_id": "0817d1ed-b6b6-4383-9650-xxxxx",
"output": true
}
步骤2.2 查询部署后的新模型名称
查询所有Checkpoint的状态,确认导出已完成,并获取它专属的、用于部署的新模型名称(model_name)。
<替换为微调任务job_id>:完整替换为创建微调任务输出参数job_id的值。
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/checkpoints' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
响应示例在返回列表中定位导出的 Checkpoint(如 checkpoint-160)。当其 status 变为 SUCCEEDED 时,表示导出成功;此时返回的 model_name 字段即为导出后的新模型名称。
{
"request_id": "b0e33c6e-404b-4524-87ac-xxxxxx",
"output": [
...,
{
"create_time": "2025-11-11T13:27:29",
"full_name": "ft-202511111122-496e:checkpoint-160",
"job_id": "ft-202511111122-496e",
"checkpoint": "checkpoint-160",
"model_name": "xxxx-ft-202511111122-xxxx-c160", // 重要字段,将用于模型部署和调用
"model_display_name": "xxxx-ft-202511111122-xxxx",
"status": "SUCCEEDED" // 成功导出的checkpoint
},
...
]
}
步骤3:部署并调用模型
在成功导出 Checkpoint 并获取 model_name 后,请按照以下步骤执行后续操作:
-
模型部署:在输入参数
model_name,填入导出后获取到的具体值。 -
模型调用:参照接口说明,调用已部署模型,详情请参见万相-图像生成与编辑2.7。
当前部署后的图像模型仅支持异步调用,且返回响应的
message.content中无type字段。
计费说明
-
模型训练:收费。详情请参见模型训练计费。
- 费用 = 训练 Tokens 总量 × 单价。
- 训练结束后,在查询微调任务状态接口
usage字段查看训练消耗的总 Token 数。
下表列出了wan2.7-image、wan2.7-image-pro不同生成类型训练中常见训练步数及预估费用。该数据仅供参考,实际训练效果请以最终交付为准,费用请以正式账单为准。详细计费公式请参见模型训练计费。
generation_type
图片分辨率
常见Step步数
Token消耗预估
费用预估(元)
t2i(文生图)
1K
500
6,400,000
512
1000
12,800,000
1,024
2000
25,600,000
2,048
2K
500
11,610,000
928.8
1000
23,220,000
1,857.6
2000
46,440,000
3,715.2
i2i(图生图)
1K
500
11,610,000
928.8
1000
23,220,000
1,857.6
2000
46,440,000
3,715.2
2K
500
16,000,000
1,280
1000
32,000,000
2,560
2000
64,000,000
5,120
-
模型部署与调用:部署免费,调用按微调的基础模型的标准调用价格计费。
模型名称
Lora部署调用价格
wan2.7-image-pro
0.50元/张
wan2.7-image
0.20元/张
API文档
常见问题
Q:如何设计一个好的触发词?
A: 规则如下:
- 推荐使用无实际语义的稀有字符组合,如 s86b5p、m01aa、EVEAven638123。确保在基模词表中无语义含义。
- 避免使用常用英语单词(如 beautiful, fire, dance),否则会污染模型原本对这些词的理解。




