当使用万相进行图像生成时,若通过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": "2k",
"gradient_clip": 0.5,
"weight_decay": 0.02,
"max_pixels": "2k",
"val_img_size": "2k",
"generation_type": "t2i",
"lora_rank": 32,
"lora_alpha": 32,
"save_total_limit": 10
}
}'图像生成模型的超参数与视频模型有所差异(使用 max_steps/eval_steps 而非 n_epochs/eval_epochs)。完整参数说明与格式约束请参见超参数。
响应示例
关注 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 数。
下表列出了文生图(t2i)训练中常见训练步数(Step)及预估费用。该数据仅供参考,实际训练效果请以最终交付为准,费用请以正式账单为准。详细计费公式请参见模型训练计费。
图片分辨率
常见Step步数
Token消耗预估
费用预估(元)
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
模型部署:免费。
模型调用:收费,按微调的基础模型的标准调用价格计费。
模型 ID(Model ID)
输出单价
wan2.7-image-pro
0.50元/张
API文档
常见问题
Q:如何设计一个好的触发词?
A: 规则如下:
推荐使用无实际语义的稀有字符组合,如 s86b5p、m01aa、EVEAven638123。确保在基模词表中无语义含义。
避免使用常用英语单词(如 beautiful, fire, dance),否则会污染模型原本对这些词的理解。




