当使用万相进行 图像生成 时,若通过 Prompt 优化 仍无法满足对 特定风格、IP形象或画面效果 的定制需求,请使用 模型微调 。
适用范围
-
适用地域:本文描述的功能仅在新加坡地域可用,且必须使用该地域的API Key。
-
支持微调的方式:SFT-LoRA高效微调。
-
支持微调的模型:
- 图像生成(文生图/图生图):wan2.7-image-pro、wan2.7-image。
如何微调模型
文生图
微调目标:训练一个人物LoRA模型。
预期效果:输入一段提示词,模型自动生成特定人物在符合提示词场景下的描述。
| 输入提示词 人物在拥挤的早高峰地铁车厢内,抓着扶手,背景是模糊的乘客和车窗外的隧道灯光,身穿普通的上班族白衬衫和黑色西裤,人物站立面向镜头,半身照,写实抓拍感。 | 输出图像(微调前-文生图)![]()
| 输出图像(微调后)![]()
|
图生图
微调目标:训练一个"末日废土红黑机甲"LoRA模型。
预期效果:输入一张人物图像,无需提示词,模型自动生成人物“末日废土红黑机甲”风格的图像。
输入图像![]() | 输出图像(微调前)![]()
| 输出图像(微调后)![]()
|
步骤1:上传数据集
将本地的数据集(.zip 格式)上传到阿里云百炼平台,并获取文件 ID (id)。
训练集样例数据:格式请参见训练集。
- 图像生成-文生图:wan-image-t2i-training-dataset.zip
- 图像生成-图生图:wan-image-i2i-training-dataset.zip
本示例使用文生图,仅上传训练集,系统将自动从训练集中划分一部分作为验证集。
curl --location --request POST 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"./wan-image-t2i-training-dataset.zip"' \
--form 'purpose="fine-tune"'
响应示例
请保存 id,这是上传数据集的唯一标识。
{
"id": "file-ft-3c67043a747c-xxxxxx",
"object": "file",
"bytes": 73310369,
"filename": "wan-image-t2i-training-dataset.zip",
"purpose": "fine-tune",
"status": "processed",
"created_at": 1782271893
}
步骤2:微调模型
步骤2.1 创建微调任务
使用步骤1中的文件ID启动训练任务。
请求示例请将<替换为训练数据集的文件id>完整替换为上一步获取的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-intl.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-intl.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": "ap-southeast-1",
"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-intl.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-intl.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-intl.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-intl.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-intl.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-intl.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, The character stands in a quiet private library in the afternoon, with tall dark walnut bookshelves behind, sunlight streaming through blinds casting striped light and shadow, wearing a soft beige cable-knit sweater, the character stands facing the camera, half-body shot, the image has a fine film grain texture.",
"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数组中的图像顺序应与训练意图一致(如第一张为人物参考,第二张为姿态参考)。
- 训练集样例:
- 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, The character is in a crowded morning rush hour subway car, holding onto a handrail, with blurred passengers in the background and tunnel lights outside the window, wearing a plain white office shirt and black trousers, the character stands facing the camera, half-body shot, realistic candid feel." }图生图
{ "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-intl.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-intl.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-intl.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-intl.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
$96
1000
12,800,000
$192
2000
25,600,000
$384
2K
500
11,610,000
$174.15
1000
23,220,000
$348.3
2000
46,440,000
$696.6
i2i(图生图)
1K
500
11,610,000
$174.15
1000
23,220,000
$348.3
2000
46,440,000
$696.6
2K
500
16,000,000
$240
1000
32,000,000
$480
2000
64,000,000
$960
-
模型部署与调用:部署免费,调用按微调的基础模型的标准调用价格计费。
模型名称
Lora部署调用价格
wan2.7-image-pro
$0.075/张
wan2.7-image
$0.03/张
API文档
常见问题
Q:如何设计一个好的触发词?
A: 规则如下:
- 推荐使用无实际语义的稀有字符组合,如 s86b5p、m01aa、EVEAven638123。确保在基模词表中无语义含义。
- 避免使用常用英语单词(如 beautiful, fire, dance),否则会污染模型原本对这些词的理解。




