使用API进行模型微调

您将通过 API 完成通义万相图生视频模型的微调任务,涵盖数据集上传、模型训练和模型部署,并调用微调后的模型生成视频。

重要

本文档仅适用于中国大陆版(北京地域)。

前提条件

支持微调的模型

模型服务

模型名称

微调方式

图生视频-基于首帧

wan2.2-i2v-flash

SFT-LoRA高效微调

wan2.5-i2v-preview

SFT-LoRA高效微调

微调任务及效果

当前仅支持图生视频-基于首帧”模型进行微调。

本文将以训练一个“金钱雨特效”模型为例。期望的效果是,无需输入提示词,只需输入一张静态图片,模型就能自动为其生成一段带有“金钱雨特效”的视频。

输入首帧图像

image_3

输出视频(微调前)

基模无法通过提示词每次生成固定运动的“金钱雨”特效(运动画面不可控)。

输出视频(微调后)

微调后的模型无需提示词即能稳定复现训练集中的特定“金钱雨”特效。

微调模型并部署

步骤一:上传数据集

首先,将本地的数据集(.zip 格式)上传到阿里云百炼平台,并获取唯一的文件ID(file_id)。

1. 准备本地文件

训练集:图生视频-基于首帧

数据集样例wan-i2v-training-dataset.zip

图生视频训练集需要打包成一个 .zip 压缩文件,其包含训练首帧图片、训练视频和标注文件(data.jsonl)。

data.jsonl 文件的每一行是一个 JSON 对象。一行训练数据展开后结构如下:

{
    "prompt": "视频开头展示了一位年轻女性站在一堵爬满常春藤的砖墙前。她有着一头柔顺的红棕色长发,穿着一件白色的无袖连衣裙,佩戴着一条闪亮的银色项链,面带微笑。背景中的砖墙被绿色的藤蔓覆盖,显得古朴而自然。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她。钞票持续落下,她双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。",
    "first_frame_path": "image_1.jpeg", //图片相对路径
    "video_path": "video_1.mp4"         //视频相对路径
}

2. 将数据集上传至阿里云百炼

批量上传请参见上传文件API

HTTP

请求示例

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/files' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'files=@"./wan-i2v-training-dataset.zip"' \
--form 'purpose="fine-tune"'\
--form 'descriptions="a fine-tune training data file for wan"'

响应示例

请复制并保存 file_id,这是上传数据集的唯一标识。

{
    "data": {
        "uploaded_files": [
            {
                "name": "wan-i2v-training-dataset.zip",
                "file_id": "3bff1ef7-f72d-4285-bb75-xxxxxx"
            }
        ],
        "failed_uploads": []
    },
    "request_id": "1f3f1c5b-7418-4976-aaea-xxxxxx"
}

关键参数说明
下面仅介绍关键参数,更多参数请参见上传文件API
入参描述

字段

传参方式

类型

必选

描述

示例值

files

form-data

file

本地数据集文件(.zip格式)。

传参时需使用格式 files=@"<文件路径>",路径可以是相对或绝对路径。

@"./wan-i2v-training-dataset.zip"

purpose

form-data

string

微调任务固定为 fine-tune。

fine-tune

descriptions

form-data

string

数据集的描述信息。

a fine-tune training data file for wan

出参描述

字段

类型

描述

示例值

file_id

string

文件在平台内的唯一标识符,用于创建微调任务。

3bff1ef7-f72d-4285-bb75-xxxxxx

步骤二:创建微调任务

基于指定的基准模型和上传的数据集,启动一个模型微调训练任务,并获取任务ID(job_id)。

HTTP

请求示例

请将<替换为训练数据集的file_id>完整替换为步骤一获取的file_id

wan2.2模型

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model":"wan2.2-i2v-flash",
    "training_file_ids":[
        "<替换为训练数据集的file_id>"
    ],
    "training_type":"efficient_sft",
    "task":"i2v",
    "hyper_parameters":{
        "n_epochs":400,
        "batch_size":4,
        "learning_rate":2e-5,
        "split":0.9,
        "eval_epochs": 20,
        "max_pixels": 262144
    }
}'

wan2.5模型

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model":"wan2.5-i2v-preview",
    "training_file_ids":[
        "<替换为训练数据集的file_id>"
    ],
    "training_type":"efficient_sft",
    "task":"i2v",
    "hyper_parameters":{
        "n_epochs":400,
        "batch_size":2,
        "learning_rate":2e-5,
        "split":0.9,
        "eval_epochs": 20,
        "max_pixels": 36864
    }
}'

响应示例

创建微调任务成功后,需要关注 output 中的三个关键参数:

  • job_id:任务ID。请复制并保存job_id,这是本次训练任务的唯一标识。

  • finetuned_output:训练出的新模型的名称,是后续模型部署和调用的必要参数。

  • status:任务状态。创建微调任务后,此时状态为PENDING,表示训练待开始。

{
    "request_id": "0eb05b0c-02ba-414a-9d0c-xxxxxxxxx",
    "output": {
        "job_id": "ft-202511111122-xxxx",
        "job_name": "ft-202511111122-xxxx",
        "status": "PENDING",
        "finetuned_output": "wan2.2-i2v-flash-ft-202511111122-xxxx",
        "model": "wan2.2-i2v-flash",
        "base_model": "wan2.2-i2v-flash",
        "training_file_ids": [
            "3bff1ef7-f72d-4285-bb75-xxxxxxxxx"
        ],
        "validation_file_ids": [],
        "hyper_parameters": {
            "n_epochs": 400,
            "batch_size": 4,
            "learning_rate": 2e-5,
            "split": 0.9,
            "eval_epochs": 20
        },
        "training_type": "efficient_sft",
        "create_time": "2025-11-11 11:22:22",
        "workspace_id": "llm-xxxxxxxxx",
        "user_identity": "xxxxxxxxx",
        "modifier": "xxxxxxxxx",
        "creator": "xxxxxxxxx",
        "group": "llm",
        "max_output_cnt": 20
    }
}

入参说明

基础参数

字段

类型

必选

描述

示例值

model

string

指定微调所用的基准模型。

当前仅支持图生视频任务,模型名称可选值为:wan2.2-i2v-flash、wan2.5-i2v-preview。

wan2.2-i2v-flash

training_file_ids

array[string]

训练集file_id数组,可传入多个file_id。

["3bff1ef7-f72d-4285-bb75-xxxxxx"]

validation_file_ids

array[string]

验证集file_id数组,可传入多个file_id。若不提供,系统会从训练集中自动划分。

-

training_type

string

微调类型,当前仅支持efficient_sft(LoRA高效微调)。

efficient_sft

task

string

任务类型,图生视频任务固定为 i2v

i2v

超参数(hyper_parameters
初次训练时,推荐使用默认的超参数。若模型效果不佳或训练不收敛,可以尝试调整 n_epochslearning_rate等参数。

字段

类型

必选

描述

默认值

batch_size

int

批次大小

一次性送入模型进行训练的数据条数。

  • wan2.2-i2v-flash:推荐使用默认值,固定为4。

  • wan2.5-i2v-preview:推荐使用默认值,固定为2。

wan2.2:4

wan2.5:2

n_epochs

int

训练循环次数。

训练总步数(steps)由训练轮数(n_epochs)、数据集大小和批大小(batch_size)共同决定,计算公式为:steps = n_epochs × 向上取整(数据集大小 / batch_size)。

为确保模型充分训练,建议总训练步数不少于 800 步。推荐的最小训练轮数可按此公式估算:n_epochs = 800 / 向上取整(数据集大小 / batch_size)

例如:数据集有10条数据,batch_size4,则每轮训练步数=向上取整(10/4)= 3,所需最小训练轮数n_epochs = 800 / 3 ≈ 267。此值为推荐最小值,可根据实际需求适当调高。

400

learning_rate

float

学习率。控制模型权重更新的幅度。

过高可能导致模型变差,过低则变化不明显。推荐使用默认值。

2e-5

split

float

训练集划分比例。取值范围为 (0, 1]。

仅在未指定validation_file_ids时生效。

此参数用于从训练集中自动按比例拆分出验证集。例如,0.9表示90%训练集,10%验证集。最终验证集的数量还会受到max_split_val_dataset_sample的限制。

0.9

max_split_val_dataset_sample

int

自动划分验证集的最大样本数。取值需≥1。

仅在未指定validation_file_ids时生效。

该参数为通过split参数划分出的验证集数量设置了一个上限,具体为:

系统会取 (数据集总数×(1-split)) 和该值中的较小值作为最终的验证集数量。

例如:数据集共100条,split0.9 (即取10%作验证集),max_split_val_dataset_sample5。计算出的验证集为10条(100×0.1),但由于上限为5,最终只会使用5条数据作为验证集。

5

eval_epochs

int

验证间隔。取值需≥10。

训练期间每隔多少个epoch进行一次验证评估,用于阶段性评估模型训练效果。

20

max_pixels

int

训练视频的最大分辨率

设置训练集中输入视频分辨率的像素总数(宽×高)限制。系统仅对超过该值的视频进行缩放处理,未超限的视频将保持原样。

  • wan2.2-i2v-flash:默认 262144。取值范围:65536 (256×256) ~ 262144 (512×512)。

  • wan2.5-i2v-preview:默认 36864。取值范围:16384 (128×128) ~ 36864 (192×192)。

wan2.2:262144

wan2.5:36864

出参描述

字段

类型

描述

示例值

output.job_id

string

模型微调任务唯一标识,用于后续查询任务状态。

ft-202511111122-xxxx

output.status

string

微调训练任务的状态。

  • PENDING:训练待开始。

  • QUEUING:训练正在排队(同时只有一个训练任务可以进行)。

  • RUNNING:训练正在进行中。

  • CANCELING:训练正在取消中。

  • SUCCEEDED:训练成功。

  • FAILED:训练失败。

  • CANCELED:训练已经取消。

PENDING

output.finetuned_output

string

微调后产出的新模型名称,部署时需要用到。

wan2.2-i2v-flash-ft-202511111122-xxxx

步骤三:查询微调任务状态

模型训练需要一定时间。通过上一步获得的 job_id 定期查询任务进度,直到任务成功完成。

说明

本文示例的微调任务训练耗时约6~8个小时,请耐心等待。

HTTP

请求示例

请将 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'

响应示例

请持续轮询此接口,重点关注 status 字段。当它的值变为 SUCCEEDED 时,表示模型已训练完毕,可以进行下一步的部署。

{
    "request_id": "9bbb953c-bef2-4b59-9fc5-xxxxxxxxx",
    "output": {
        "job_id": "ft-202511111122-xxxx",
        "job_name": "ft-202511111122-xxxx",
        "status": "SUCCEEDED",
        "finetuned_output": "wan2.2-i2v-flash-ft-202511111122-xxxx",
        "model": "wan2.2-i2v-flash",
        "base_model": "wan2.2-i2v-flash",
        "training_file_ids": [
            "3bff1ef7-f72d-4285-bb75-xxxxxxxxx"
        ],
        "validation_file_ids": [],
        "hyper_parameters": {
            "n_epochs": 400,
            "batch_size": 4,
            "learning_rate": 2e-5,
            "split": 0.9,
            "eval_epochs": 20
        },
        "training_type": "efficient_sft",
        "create_time": "2025-11-11 11:22:22",
        "workspace_id": "llm-xxxxxxxxx",
        "user_identity": "xxxxxxxxx",
        "modifier": "xxxxxxxxx",
        "creator": "xxxxxxxxx",
        "end_time": "2025-11-11 16:49:01",
        "group": "llm",
        "usage": 4096000,
        "max_output_cnt": 20,
        "output_cnt": 20
    }
}

关键参数说明

出参描述

字段

类型

描述

示例值

output.usage

int

训练任务消耗的Token数量,用于模型部署计量计费。

4096000

output.output_cnt

int

训练过程中产出的checkpoint数量。

20

output.finetuned_output

string

微调后产出的新模型名称,部署时需要用到。

wan2.2-i2v-flash-ft-202511111122-xxxx

output.status

string

微调训练任务的状态。

  • PENDING:训练待开始。

  • QUEUING:训练正在排队(同时只有一个训练任务可以进行)。

  • RUNNING:训练正在进行中。

  • CANCELING:训练正在取消中。

  • SUCCEEDED:训练成功。

  • FAILED:训练失败。

  • CANCELED:训练已经取消。

SUCCEEDED

步骤四:部署模型为在线服务

训练完成后,将模型发布为一个在线API服务。

HTTP

请求示例

请将请求体中的 <替换为模型名称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>",
    "aigc_config": {
        "prompt": "根据图像内容提供视频描述,描述必须包含“然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她(他)。钞票持续落下,同时镜头缓缓拉进,她(他)双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中”。\n输出模版:\n视频开头展示了[主体描述]。[环境描述]。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她(他)。钞票持续落下,同时镜头缓缓拉进,她(他)双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。\n示例:\n视频开头展示了一位年轻女性在海滩上的场景。她的头发湿漉漉的,呈现出深棕色,卷曲且略显凌乱。她的脸上带着灿烂的笑容。背景是波涛汹涌的海浪和远处的山脉。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她。钞票持续落下,同时镜头缓缓拉进,她双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。",
        "lora_prompt_default": "然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕主角。钞票持续落下,同时镜头缓缓拉进,主角双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。"
    },
    "capacity": 1,
    "plan": "lora"
}'

响应示例

部署请求提交成功后,初始状态为 PENDING(排队部署中)。同时返回model_name参数,后续将在模型查询和模型调用中使用。

{
    "request_id": "96020b2e-9072-4c8a-9981-xxxxxxxxx",
    "output": {
        "deployed_model": "wan2.2-i2v-flash-ft-202511111122-xxxx",
        "gmt_create": "2025-11-11T17:46:53.294",
        "gmt_modified": "2025-11-11T17:46:53.294",
        "status": "PENDING",
        "model_name": "wan2.2-i2v-flash-ft-202511111122-xxxx",
        "base_model": "wan2.2-i2v-flash",
        "workspace_id": "llm-xxxxxxxxx",
        "charge_type": "post_paid",
        "creator": "xxxxxxxxx",
        "modifier": "xxxxxxxxx",
        "plan": "lora"
    }
}

关键参数说明

入参描述

字段

类型

必选

描述

示例值

model_name

string

微调模型名称。

创建微调任务后,填写接口响应中 output.finetuned_output 字段的值。

wan2.2-i2v-flash-ft-202511111122-xxxx

capacity

int

部署的模型实例数量。推荐设置为1。

1

plan

string

部署方式。LoRA高效微调固定为lora

lora

aigc_config.prompt

string

预置prompt模版。

模型会根据这个模板和输入图片自动生成符合特效的prompt。

推荐设置。设置后,在模型调用时无需填写prompt,填写prompt也不生效。

根据图像内容提供视频描述,描述必须包含"然后开始展示s86b5p金钱雨特效..."。

输出模版:

视频开头展示了[主体描述]。[环境描述]。然后开始展示s86b5p金钱雨特效...

示例:

视频开头展示了一位年轻女性在海滩上的场景...

aigc_config.lora_prompt_default

string

默认兜底prompt。

当使用aigc_config.prompt生成失败时,将使用此参数来生成视频。

然后开始展示s86b5p金钱雨特效...

出参描述

字段

类型

描述

示例值

output.model_name

string

部署的模型名称,用于查询部署状态和模型调用。

等同于创建微调任务接口输出参数 output.finetuned_output 值。

wan2.2-i2v-flash-ft-202511111122-xxxx

output.deployed_model

string

部署的微调模型名称。

wan2.2-i2v-flash-ft-202511111122-xxxx

output.status

string

部署任务的初始状态,为 PENDING(排队部署中)。

PENDING

步骤五:查询模型部署状态

与训练任务类似,需要轮询查询部署状态,确认模型服务已成功启动并准备好接收请求。

说明

本文示例的微调模型,部署过程预计需要 15~20分钟

HTTP

请求示例

请将<替换为模型名称model_name>完整替换为上一步输出参数model_name的值。

curl --location 'https://dashscope.aliyuncs.com/api/v1/deployments/<替换为模型名称model_name>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' 

响应示例

轮询此查询接口,关注返回结果中的status字段。当状态变为 RUNNING 时,表示模型已部署成功,可以开始调用了。

{
    "request_id": "66d15f35-0772-409f-bc70-xxxxxxxxx",
    "output": {
        "deployed_model": "wan2.2-i2v-flash-ft-202511111122-xxxx",
        "gmt_create": "2025-11-11T17:46:53",
        "gmt_modified": "2025-11-11T18:02:24",
        "status": "RUNNING",
        "model_name": "wan2.2-i2v-flash-ft-202511111122-xxxx",
        "base_model": "wan2.2-i2v-flash",
        "workspace_id": "llm-xxxxxxxxx",
        "charge_type": "post_paid",
        "creator": "xxxxxxxxx",
        "modifier": "xxxxxxxxx",
        "plan": "lora"
    }
}

步骤六:调用微调后的模型

调用部署好的模型服务来生成视频。预期是:只需输入一张静态图片,模型就能自动为其生成一段带有“金钱雨特效”的视频,无需额外输入提示词。

HTTP

由于视频生成耗时较长,API 采用异步模式,调用流程分两步:

1. 创建任务

创建视频生成任务,并获得任务ID(task_id)。

请求示例

请将<替换为模型名称model_name>完整替换为上一步输出的model_name值。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--header 'X-DashScope-Async: enable' \
--data '{
    "model": "<替换为模型名称model_name>",
    "input": {
        "img_url": "https://img.alicdn.com/imgextra/i4/O1CN015obBUk1FAJkNAbeXg_!!6000000000446-2-tps-928-1232.png"
    },
    "parameters": {
        "resolution": "480P",
        "prompt_extend": false
    }
}'

响应示例

请复制并保存task_id,用于下一步结果查询。

{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

关键参数说明(输入参数)

调用微调后的LoRA模型时,大部分输入参数的用法与基础的图生视频-基于首帧API完全一致。

下表仅重点列出在调用LoRA模型时,有特殊用法或限制的参数。其他未提及的参数(如duration(默认为5秒)等),请直接参考基础模型的API文档。

字段

类型

必选

描述

示例值

model

string

模型名称。

必须使用已成功部署且状态为RUNNING的微调模型。

wan2.2-i2v-flash-ft-202511111122-xxxx

input.prompt

string

文本提示词。

通常无需传入。由于在模型部署时已预置了prompt,模型会根据输入图像自动生成prompt。

-

parameters.resolution

string

生成的视频分辨率档位。

当前微调模型支持 480P、720P。默认720P。

720P

parameters.prompt_extend

boolean

是否开启prompt智能改写。

调用微调的LoRA模型时,建议关闭,即设置为false。

false

2. 根据任务ID查询结果

使用task_id轮询任务状态,直到 task_status 变为 SUCCEEDED,并获取视频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": "c87415d2-f436-41c3-9fe8-xxxxxx",
    "output": {
        "task_id": "a017e64c-012b-431a-84fd-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-11-12 11:03:33.672",
        "scheduled_time": "2025-11-12 11:03:33.699",
        "end_time": "2025-11-12 11:04:07.088",
        "orig_prompt": "",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxxx"
    },
    "usage": {
        "duration": 5,
        "video_count": 1,
        "SR": 480
    }
}

进阶:挑选最佳Checkpoint进行部署

在训练过程中,系统会定期保存模型的“快照”,我们称之为 Checkpoint。默认情况下,系统会使用最后一个Checkpoint作为最终模型。但有时,中间某个Checkpoint的效果可能才是最好的。您可以从中挑选出最满意的一个进行部署。

默认自动划分验证集

创建微调任务时,若未传入validation_file_ids参数,系统将根据以下两个超参数,自动从训练集中划分出一部分作为验证集:

  • split: 训练集划分比例。例如,0.9 表示将90%的数据用于训练,剩余的10%用作验证。

  • max_split_val_dataset_sample: 自动划分验证集的最大样本数。这是一个上限,最终验证集的数量会取 (数据集总数 * (1-split)) 和该值中的较小者

此外,系统会按照超参数eval_epochs设定的间隔,在验证集上运行Checkpoint并生成预览视频。这些预览视频可以用来判断Checkpoint效果好坏的依据。

查看Checkpoint验证效果

1. 查询已通过验证的Checkpoint列表

该接口仅返回在训练中通过验证集验证、且成功生成预览视频的 Checkpoint;验证失败的不会列出。

说明

该接口需在模型微调训练完成后调用,否则将返回空列表。

HTTP

请求示例

请将<替换为微调任务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"
        },
        {
            "checkpoint": "checkpoint-20"
        },
        {
            "checkpoint": "checkpoint-40"
        },
        {
            "checkpoint": "checkpoint-60"
        }
    ]
}

2. 查询Checkpoint对应的验证集结果

从上一步返回的 Checkpoint 列表中选择一个(例如“checkpoint-160”),查看其生成的视频效果。

HTTP

请求示例

  • <替换为微调任务job_id>:完整替换为创建微调任务接口的输出参数job_id的值。

  • <替换为选择的checkpoint>:完整替换为在上一步列表中选定的Checkpoint名称,例如“checkpoint-160”。

接口支持分页查询,可通过 page_no 和 page_size 参数控制分页。
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"

响应示例

通过返回的 video_path,可以直接下载该Checkpoint生成的视频。重复此步骤,比较多个Checkpoint的效果,找出最满意的一个。

{
    "request_id": "375b3ad0-d3fa-451f-b629-xxxxxxx",
    "output": {
        "page_no": 1,
        "page_size": 10,
        "total": 1,
        "list": [
            {
                "video_path": "https://finetune-swap-wulanchabu.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?Expires=xxxx",
                "prompt": "视频开头展示了一位年轻男性坐在咖啡馆的场景。他穿着一件米色的Polo衫,神情专注且略显沉思,手指轻轻托着下巴。他的面前摆放着一杯热气腾腾的咖啡,背景是木质条纹的墙壁和一个装饰牌。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕他。钞票持续落下,他双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。",
                "first_frame_path": "https://finetune-swap-wulanchabu.oss-cn-wulanchabu.aliyuncs.com/xxx.jpeg"
            }
        ]
    }
}
video_path有效期为24小时,请及时下载视频。

导出并部署最佳Checkpoint

假设checkpoint-160 的验证效果最佳,接下来的目标就是将它导出,并部署为在线服务。

1. 导出模型

将选定的Checkpoint正式转换为一个可部署的独立模型。

HTTP

请求示例

  • <替换为微调任务job_id>:完整替换为创建微调任务接口的输出参数job_id的值。

  • <替换为模型名称model_name>:完整替换创建微调任务接口的输出参数finetuned_output的值。

  • <替换为待导出的checkpoint>:完整替换为checkpoint的值,例如“checkpoint-160”。

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/export/<替换为待导出的checkpoint>?model_name=<替换为模型名称model_name>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

响应示例

output.true表示导出请求已成功创建。

{
    "request_id": "0817d1ed-b6b6-4383-9650-xxxxx",
    "output": true
}
2. 查询模型列表和状态

导出操作需要一些时间。您需要查询所有Checkpoint的状态,确认导出已完成,并获取它专属的、用于部署的新模型名称(model_name)。

HTTP

请求示例

请将<替换为微调任务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)。

当它的状态变为 SUCCEEDED 时,表示成功导出Checkpoint,并会包含model_name字段,未导出的Checkpoint则没有此字段。后续将使用model_name进行模型部署和调用。

{
    "request_id": "b0e33c6e-404b-4524-87ac-xxxxxx",
    "output": [
         ......,
        {
            "create_time": "2025-11-11T13:42:31",
            "full_name": "ft-202511111122-496e-checkpoint-180",
            "job_id": "ft-202511111122-496e",
            "checkpoint": "checkpoint-180",
            "status": "PENDING" // 未导出的checkpoint,没有model_name字段
        },
        {
            "create_time": "2025-11-11T13:27:29",
            "full_name": "ft-202511111122-496e-checkpoint-160",
            "job_id": "ft-202511111122-496e",
            "checkpoint": "checkpoint-160",                             
            "model_name": "wan2.2-i2v-flash-ft-202511111122-xxxx-c160", // 重要字段,将用于模型部署和调用
            "model_display_name": "wan2.2-i2v-flash-ft-202511111122-xxxx", 
            "status": "SUCCEEDED" // 成功导出的checkpoint
        },
        ......
        
    ]
}
3. 部署和调用模型

接下来,只需返回主流程,重复步骤四到步骤六,在所有需要填写模型名称(model_name)的地方,都使用这个全新的model_name即可。

使用自定义验证集(可选)

如果您希望使用一套固定的、自己精心准备的数据来评估Checkpoint,而不是依赖系统随机划分,可以使用自定义验证集。步骤如下:

  1. 准备验证集:将验证数据打包成一个独立的 .zip 文件。

    查看验证集示例

    SFT-图生视频-验证集

    数据集样例wan-i2v-valid-dataset.zip

    图生视频验证集为zip格式,包括首帧图片、标注文件(data.jsonl)。

    data.jsonl 文件的每一行是一个 JSON 对象。一行训练数据展开后结构如下:

    {
        "prompt": "视频开头展示了一位年轻男性站在城市景观前的场景。他穿着黑白格子外套,内搭黑色连帽衫,面带微笑,神情自信。背景是夕阳下的城市天际线,远处可以看到著名的圆顶建筑和错落有致的屋顶,天空中云层密布,呈现出温暖的橙黄色调。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕他。钞票持续落下,同时镜头缓缓拉进,他双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。",
        "first_frame_path": "image_1.jpg"  //图片相对路径
    }
  2. 上传验证集:调用上传数据集接口,上传这个验证集 .zip 文件,获得一个专属的 file_id

  3. 创建任务时指定验证集file_id:在调用创建微调任务接口时,将这个 file_id 填入 validation_file_ids 参数中。

    {
        "model":"wan2.2-i2v-flash",
        "training_file_ids":[ "<训练集的file_id>" ],
        "validation_file_ids": [ "<自定义验证集的file_id>" ],
        ...
    }
    注意:一旦提供了validation_file_ids,系统将不再从训练集中自动划分验证集,split 和 max_split_val_dataset_sample 参数也会被忽略。

完成以上操作后,后续模型部署和调用、以及挑选Checkpoint效果与导出的流程与前述完全一致。

微调任务管理API(可选)

以下接口的参数说明请参见模型调优 API参考

1. 查询微调任务日志

HTTP

请求示例

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/logs' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

响应示例

{
    "request_id": "b7ecb456-6dd1-4f35-a581-xxxxxx",
    "output": {
        "total": 25,
        "logs": [
            "2025-11-11 11:23:37,315 - INFO - data process succeeded, start to fine-tune",
            " Actual number of consumed tokens is 215040 !",
            " Actual number of consumed tokens is 419840 !",
            " Actual number of consumed tokens is 624640 !",
            " Actual number of consumed tokens is 829440 !",
            " Actual number of consumed tokens is 1034240 !",
            " Actual number of consumed tokens is 1239040 !",
            " Actual number of consumed tokens is 1443840 !",
            " Actual number of consumed tokens is 1648640 !",
            " Actual number of consumed tokens is 1853440 !",
            " Actual number of consumed tokens is 2058240 !",
            " Actual number of consumed tokens is 2263040 !",
            " Actual number of consumed tokens is 2467840 !",
            " Actual number of consumed tokens is 2672640 !",
            " Actual number of consumed tokens is 2877440 !",
            " Actual number of consumed tokens is 3082240 !",
            " Actual number of consumed tokens is 3287040 !",
            " Actual number of consumed tokens is 3491840 !",
            " Actual number of consumed tokens is 3696640 !",
            " Actual number of consumed tokens is 3901440 !",
            "2025-11-11 16:31:40,760 - INFO - fine-tuned output got, start to transfer it for inference",
            "2025-11-11 16:32:29,162 - INFO - transfer for inference succeeded, start to deliver it for inference",
            "2025-11-11 16:40:28,784 - INFO - start to save checkpoint",
            "2025-11-11 16:49:01,738 - INFO - finetune-job succeeded",
            "2025-11-11 16:49:02,234 - INFO - ##FT_COMPLETE##"
        ]
    }
}

2. 查询微调任务列表

HTTP

请求示例

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

响应示例

{
    "request_id": "bf4d3475-f50c-42e2-a263-xxxxxxxxx",
    "output": {
        "page_no": 1,
        "page_size": 10,
        "total": 1,
        "jobs": [
            {
                "job_id": "ft-202511111122-xxxx",
                "job_name": "ft-202511111122-xxxx",
                "status": "SUCCEEDED",
                "finetuned_output": "wan2.2-i2v-flash-ft-202511111122-xxxx",
                "model": "wan2.2-i2v-flash",
                "base_model": "wan2.2-i2v-flash",
                "training_file_ids": [
                    "3bff1ef7-f72d-4285-bb75-596d3e1356ef"
                ],
                "validation_file_ids": [],
                "hyper_parameters": {
                    "n_epochs": 400,
                    "batch_size": 4,
                    "learning_rate": 2e-5,
                    "split": 0.9,
                    "eval_epochs": 20
                },
                "training_type": "efficient_sft",
                "create_time": "2025-11-11 11:22:22",
                "workspace_id": "llm-xxxxxxxxx",
                "user_identity": "xxxxxxxxx",
                "modifier": "xxxxxxxxx",
                "creator": "xxxxxxxxx",
                "end_time": "2025-11-11 16:49:01",
                "group": "llm",
                "usage": 4096000,
                "max_output_cnt": 20,
                "output_cnt": 20
            }
        ]
    }
}

3. 取消微调任务

HTTP

请求示例

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>/cancel' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' 

响应示例

{
    "request_id": "d8dab938-e32e-40bf-83ab-xxxxxx",
    "output": {
        "status": "success"
    }
}

4. 删除微调任务

HTTP

请求示例

curl --location --request DELETE 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' 

响应示例

{
    "request_id": "1301136c-12f2-4504-880a-xxxxxx",
    "output": {
        "status": "success"
    }
}