当使用万相进行图像生成时,若通过Prompt 优化仍无法满足对特定风格、IP形象或画面效果的定制需求,请使用模型微调。
适用范围
如何微调模型
文生图
微调目标:训练一个人物LoRA模型。
预期效果:输入一段提示词,模型自动生成特定人物在符合提示词场景下的描述。
输入提示词 人物在拥挤的早高峰地铁车厢内,抓着扶手,背景是模糊的乘客和车窗外的隧道灯光,身穿普通的上班族白衬衫和黑色西裤,人物站立面向镜头,半身照,写实抓拍感。 | 输出图像(微调前-文生图)
无参考图无法生成特定人物形象。 | 输出图像(微调后)
微调后的模型能稳定复现训练集中的特定人物形象。 |
图生图
微调目标:训练一个"末日废土红黑机甲"LoRA模型。
预期效果:输入一张人物图像,无需提示词,模型自动生成人物“末日废土红黑机甲”风格的图像。
输入图像
| 输出图像(微调前)
无法通过提示词每次生成固定风格的“末日废土红黑机甲”特效。 | 输出图像(微调后)
微调后的模型无需提示词即能复现训练集中的特定“末日废土红黑机甲”特效。 |
微调目标:训练一个"IP角色风格化"LoRA模型。
预期效果:输入一段文本描述或一张参考图像,模型自动生成符合特定IP角色风格的图像。
步骤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。完整参数说明与格式约束请参见超参数。
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_file_ids": ["<替换为训练数据集的文件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
}
}'训练耗时(仅供参考):
文生图(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 ),即可发起调用。
构建自定义数据集
除了使用本文示例数据体验微调流程外,您也可以构建自己的数据集进行微调。
数据集应包含 训练集(必须)和 验证集(可选,支持从训练集自动划分)。所有文件请打包为.zip 格式,文件名建议仅使用英文、数字、下划线或短横线。
数据集格式
训练集:必须提供
文生图
训练集包括训练目标图像和标注文件(data.jsonl)。
训练集样例:wan-image-t2i-training.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.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 必须为 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" }
数据规模与限制
数据量:建议至少提供 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_file_ids参数),系统将根据split从训练集划分验证集,默认 0.9。即 90% 用于训练,10% 用作验证。
方式二:主动上传验证集(通过 validation_file_ids 指定)
如果您希望使用一套自己准备的数据来评估Checkpoint,而不是依赖系统随机划分,可以上传自定义验证集。
注意:一旦选择主动上传,系统将完全忽略上述自动划分规则,仅使用您上传的数据进行验证。
挑选最佳Checkpoint进行部署
在训练过程中,系统会定期保存模型的"快照"(即 Checkpoint)。默认情况下,系统会输出最后一个Checkpoint作为最终的微调模型。但中间过程产出的Checkpoint效果可能优于最终版本,您可以从中挑选出最满意的一个进行部署。
系统将按照超参数eval_steps设定的间隔,在验证集上运行Checkpoint并生成预览图像。
如何评估:通过直接观察生成的预览图像来判断效果。
挑选标准:找到效果最好、且风格最贴合的那个 Checkpoint 。
操作步骤
步骤1:查看Checkpoint生成的预览效果
步骤2:导出Checkpoint,并获取待部署的模型名称
步骤3:部署并调用模型
计费说明
模型训练:收费。详情请参见模型训练计费。
费用 = 训练 Tokens 总量 × 单价。
训练结束后,在查询微调任务状态接口
usage字段查看训练消耗的总 Token 数。
下表列出了wan2.7-image、wan2.7-image-pro不同生成类型训练中常见训练步数及预估费用。该数据仅供参考,实际训练效果请以最终交付为准,费用请以正式账单为准。详细计费公式请参见模型训练计费。
generation_type
图片分辨率
常见Step步数
Token消耗预估
费用预估(元)
t2i(文生图)
1K
500
64,000,000
5,120
1000
128,000,000
10,240
2000
256,000,000
20,480
2K
500
116,100,000
9,288
1000
232,200,000
18,576
2000
464,400,000
37,152
i2i(图生图)
1K
500
116,100,000
9,288
1000
232,200,000
18,576
2000
464,400,000
37,152
2K
500
160,000,000
12,800
1000
320,000,000
25,600
2000
640,000,000
51,200
模型部署与调用:部署免费,调用按微调的基础模型的标准调用价格计费。
模型名称
Lora部署调用价格
wan2.7-image-pro
0.50元/张
wan2.7-image
0.20元/张
API文档
常见问题
Q:如何设计一个好的触发词?
A: 规则如下:
推荐使用无实际语义的稀有字符组合,如 s86b5p、m01aa、EVEAven638123。确保在基模词表中无语义含义。
避免使用常用英语单词(如 beautiful, fire, dance),否则会污染模型原本对这些词的理解。




