Create a model fine-tuning job.
Create a fine-tuning job
For Windows CMD, replace${DASHSCOPE_API_KEY}with%DASHSCOPE_API_KEY%. In PowerShell, use$env:DASHSCOPE_API_KEY.
Text generation
curl --location --request POST "https://dashscope.aliyuncs.com/api/v1/fine-tunes" \
--header "Authorization: Bearer ${DASHSCOPE_API_KEY}" \
--header 'Content-Type: application/json' \
--data '{
"model":"qwen3-14b",
"training_file_ids":[
"86a9fe7f-dd77-43b0-9834-2170e12339ec",
"03ead352-6190-4328-8016-61821c23d4fc"
],
"hyper_parameters":{
"n_epochs":3,
"batch_size":32,
"max_length":8192,
"learning_rate":"1.6e-5",
"lr_scheduler_type":"linear",
"split":0.9
},
"training_type":"sft",
"finetuned_output_suffix":"suffix"
}'
Video generation
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": [
"<Replace with the file ID of your training dataset>"
],
"training_type": "efficient_sft",
"hyper_parameters": {
"n_epochs": 400,
"batch_size": 2,
"learning_rate": 2e-5,
"split": 0.9,
"max_split_val_dataset_sample": 5,
"eval_epochs": 50,
"max_pixels": 36864,
"save_total_limit": 10,
"lora_rank": 32,
"lora_alpha": 32
}
}'
Image generation
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": ["<your-training-dataset-file-id>"],
"validation_file_ids": ["<your-validation-dataset-file-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
}
}'
Input parameters
|
Parameter |
Required |
Type |
Location |
Description |
|
training_file_ids |
Yes |
Array |
Body |
A list of file IDs for the training set. File IDs are generated by the File Management API. |
|
validation_file_ids |
No |
Array |
Body |
A list of file IDs for the validation set. File IDs are generated by the File Management API. |
|
model |
Yes |
String |
Body |
The ID of the model to fine-tune. This can be a base model ID or the ID of a model from a previous tuning job. Video/image generation models support the following
|
|
hyper_parameters |
No |
Map |
Body |
An object that contains the hyperparameters for the tuning job. The supported parameters and their default values vary by model. To view the default values, select the model and tuning method in the console.
|
|
training_type |
No |
String |
Body |
The tuning method. Valid values are |
|
job_name |
No |
String |
Body |
A name for the tuning job. |
|
model_name |
No |
String |
Body |
The name of the resulting fine-tuned model. |
Text generation model
hyper_parameters: Supported settings
CosyVoice
These parameters apply only to the cosyvoice-v3-flash model. They are distinct from the n_epochs, batch_size, and max_length parameters for text generation models.
|
Parameter |
Required |
Recommended |
Value |
Description |
|
lm_max_epoch |
Yes |
60 |
[1, 2147483647] |
Number of epochs for LM tuning. |
|
lm_step |
Yes |
5 |
[1, 2147483647] |
Interval, in epochs, for saving LM checkpoints. |
|
lm_num |
Yes |
3 |
[1, 2147483647] |
Maximum number of LM checkpoints to keep. |
|
lm_batch_size |
Yes |
1000 |
[1, 2147483647] |
Batch size for LM tuning. |
|
fm_max_epoch |
Yes |
100 |
[1, 2147483647] |
Number of epochs for FM tuning. |
|
fm_step |
Yes |
10 |
[1, 2147483647] |
Interval, in epochs, for saving FM checkpoints. |
|
fm_num |
Yes |
3 |
[1, 2147483647] |
Maximum number of FM checkpoints to keep. |
|
fm_batch_size |
Yes |
2000 |
[1, 2147483647] |
Batch size for FM tuning. |
CosyVoice tuning currently supports only efficient_sft for the training_type parameter. For a complete request example and an end-to-end workflow, refer to the CosyVoice model tuning user guide.
Hyperparameters for video generation models
These hyperparameters apply only to video generation models (Wan series). If model performance is poor or training fails to converge, consider adjusting n_epochs or learning_rate. A minimum of 800 total training steps is recommended.
|
Parameter |
Type |
Required |
Description |
Recommended value |
|
batch_size |
int |
Yes |
Batch size. The number of data samples processed in a single training iteration.
|
Varies by model |
|
n_epochs |
int |
Yes |
Number of training epochs. The total number of steps is calculated as: steps = n_epochs × ⌈dataset size / batch_size⌉. A minimum of 800 total steps is recommended. Example: If the dataset has 5 samples and |
400 |
|
learning_rate |
float |
Yes |
Learning rate. Controls the magnitude of model weight updates during training. A value that is too high can degrade model performance, while a value that is too low may result in insignificant changes. |
2e-5 |
|
eval_epochs |
int |
Yes |
Validation interval. The interval, in epochs, at which to perform validation and save a checkpoint. The value must be ≥ |
50 |
|
max_pixels |
int |
Yes |
Maximum resolution for training videos (total pixels = width × height). The system only resizes videos that exceed this value.
|
Varies by model |
|
split |
float |
No |
Training set split ratio. The proportion of the dataset used for training, with a valid range of (0, 1). This parameter is ignored if |
0.9 |
|
max_split_val_dataset_sample |
int |
No |
Maximum samples for auto-split validation set. The size of the validation set is the smaller of two values: the result of total_samples × (1 − split) or the value of this parameter. |
5 |
|
save_total_limit |
int |
No |
Checkpoint save limit. The maximum number of recent checkpoints to keep. The system deletes older checkpoints once this limit is exceeded. |
10 |
|
lora_rank |
int |
No |
LoRA rank. The rank (dimension) of the LoRA low-rank matrices. Must be a power of 2 (2n), such as 16, 32, or 64. |
32 |
|
lora_alpha |
int |
No |
LoRA alpha. The scaling factor for the LoRA weights. Must be a power of 2 (2n), such as 16, 32, or 64. |
32 |
Hyperparameters for image generation models
Image generation models use max_steps and eval_steps to control the total training steps and the validation interval, unlike video models which use n_epochs and eval_epochs. If the model performs poorly or fails to converge, consider adjusting max_steps or learning_rate.
|
Parameter |
Type |
Required |
Description |
Recommended value |
|
max_steps |
int |
Yes |
Total training steps. A core parameter that determines the total number of training iterations. We recommend at least 500 steps to ensure model convergence, and a higher value for larger datasets. |
800 |
|
eval_steps |
int |
Yes |
Validation interval. The value must be ≥ 0. Specifies the frequency (in steps) at which to evaluate the model during training. A checkpoint is also saved at each interval. |
200 |
|
learning_rate |
float |
Yes |
learning rate. Controls the magnitude of model weight updates. A value that is too high can degrade model performance, while a value that is too low may result in insignificant changes. We recommend using the default value. |
3e-5 |
|
generation_type |
string |
Yes |
generation mode. Use |
t2i |
|
max_pixels |
string |
Yes |
Maximum resolution for training images. For example, "1k" or "2k" (1K = 1024×1024, 2K = 2048×2048). Sets an upper limit on the total number of pixels (width × height) for images in the training set. The system only scales down images that exceed this value; images below the limit remain unchanged. We recommend keeping the three resolution-related parameters ( |
text-to-image: "2k" |
|
val_img_size |
string |
Yes |
Validation image generation resolution. For example, "1k" or "2k" (1K = 1024×1024, 2K = 2048×2048). The target resolution for images generated during validation evaluation. |
text-to-image: "2k" |
|
max_token_length |
string |
Yes |
Maximum token length per step. For example, "1k" or "2k". This parameter, along with |
text-to-image: "2k" |
|
gradient_clip |
float |
Yes |
gradient clipping. The threshold for global gradient norm clipping across all trainable parameters, used to prevent exploding gradients. Set to -1 to disable clipping. |
0.5 |
|
weight_decay |
float |
Yes |
weight decay. The decoupled weight decay coefficient for the AdamW optimizer. It applies to all trainable parameters and is used for regularization to prevent overfitting. |
0.02 |
|
lora_rank |
int |
Yes |
LoRA rank. The rank (dimension) of the LoRA low-rank matrices. This value determines the number of trainable parameters for fine-tuning. A larger value increases the model's fitting capability but slows down training. The value must be a power of 2 (e.g., 16, 32, 64). |
32 |
|
save_total_limit |
int |
No |
Checkpoint save limit. The maximum number of model checkpoints to save. The system keeps only the N most recent checkpoints, where N is this value. |
10 |
|
split |
float |
No |
Training set split ratio. The value range is (0, 1). This parameter takes effect only when |
0.9 |
Example response
Text generation model
{
"request_id": "9654e55a-d74b-4113-aee1-fa19c9384fcc",
"output": {
"job_id": "ft-202410291653-1c7f",
"job_name": "ft-202410291653-1c7f",
"status": "PENDING",
"model": "qwen3-14b",
"base_model": "qwen3-14b",
"training_file_ids": [
"976bd01a-f30b-4414-86fd-50c54486e3ef"
],
"validation_file_ids": [
],
"hyper_parameters": {
"n_epochs": 3,
"batch_size": 32,
"max_length": 8192,
"learning_rate": "1.6e-5",
"lr_scheduler_type": "linear",
"split": 0.9
},
"training_type": "sft",
"create_time": "2024-10-29 16:53:53",
"workspace_id":"llm-v71tlv***",
"user_identity": "1396993924585947",
"modifier": "1396993924585947",
"creator": "1396993924585947",
"group": "llm"
}
}
Video generation model
Focus on output.job_id (job ID) and output.finetuned_output (the name of the fine-tuned model, used for deployment).
{
"request_id": "0eb05b0c-02ba-414a-9d0c-xxxxxxxxx",
"output": {
"job_id": "ft-202511111122-xxxx",
"job_name": "ft-202511111122-xxxx",
"status": "PENDING",
"finetuned_output": "wan2.5-i2v-preview-ft-202511111122-xxxx",
"model": "wan2.5-i2v-preview",
"base_model": "wan2.5-i2v-preview",
"training_file_ids": [
"xxxxxxxxxxxx"
],
"validation_file_ids": [],
"hyper_parameters": {
"n_epochs": 400,
"batch_size": 2,
"learning_rate": 2.0E-5,
"split": 0.9,
"eval_epochs": 50
},
"training_type": "efficient_sft",
"create_time": "2025-11-11 11:22:22"
}
}
Image generation model
Focus on output.job_id (job ID) and output.finetuned_output (the name of the fine-tuned model, used for deployment).
{
"request_id": "0eb05b0c-02ba-414a-9d0c-xxxxxxxxx",
"output": {
"job_id": "ft-202606030110-xxxx",
"job_name": "ft-202606030110-xxxx",
"status": "PENDING",
"finetuned_output": "wan2.7-image-pro-ft-202606030110-xxxx",
"model": "wan2.7-image-pro",
"base_model": "wan2.7-image-pro",
"training_file_ids": [
"xxxxxxxxxxxx"
],
"validation_file_ids": [],
"hyper_parameters": {
"max_steps": 800,
"learning_rate": 3.0E-5,
"eval_steps": 200,
"max_token_length": "1k",
"max_pixels": "1k",
"val_img_size": "1k",
"generation_type": "t2i",
"lora_rank": 32
},
"training_type": "efficient_sft",
"create_time": "2026-06-03 01:10:47"
}
}
Response parameters
|
Parameter |
Type |
Description |
|
request_id |
String |
The ID of the request. |
|
output |
Object |
Details of the fine-tuning job. |
|
output.job_id |
String |
The ID of the fine-tuning job. You can use this ID with other APIs, such as querying fine-tuning job details, querying fine-tuning job logs, canceling a fine-tuning job, and deleting a fine-tuning job. Format: |
|
output.job_name |
String |
Same as |
|
output.status |
String |
The job status. |
|
output.model |
String |
The ID of the model that was fine-tuned. |
|
output.base_model |
String |
The ID of the base model used for fine-tuning. Example: For the fine-tuning job |
|
output.training_file_ids |
Array |
An array of fine-tuning file IDs. |
|
output.validation_file_ids |
Array |
An array of validation file IDs. |
|
output.hyper_parameters |
Object |
The hyperparameters explicitly set for the job. |
|
output.training_type |
String |
The fine-tuning method. |
|
output.create_time |
String |
The time the fine-tuning job was created. |
|
output.workspace_id |
String |
The ID of the workspace that contains the fine-tuning job. |
|
output.user_identity |
String |
The UID of the owning main account. |
|
output.modifier |
String |
The UID of the account that last modified the job. For example, if a sub-account cancels the job, this field returns the UID of that sub-account. |
|
output.creator |
String |
The UID of the user who created the job. |
|
output.group |
String |
The fine-tuning job category. |
|
Job status |
Description |
|
PENDING |
The fine-tuning job is waiting to start. |
|
QUEUING |
The fine-tuning job is in the queue. (Only one fine-tuning job can run at a time.) |
|
RUNNING |
The fine-tuning job is running. |
|
CANCELING |
The fine-tuning job is being canceled. |
|
SUCCEEDED |
The fine-tuning job has succeeded. |
|
FAILED |
The fine-tuning job has failed. |
|
CANCELED |
The fine-tuning job has been canceled. |
Request error codes
Returned when a request fails.
|
Parameter |
Type |
Description |
Example |
|
code |
String |
The error code. |
NotFound |
|
request_id |
String |
The system-generated unique ID for this request. |
6332fb02-3111-43f0-bf79-f9e8c5ffa7f9 |
|
message |
String |
The error message. |
Not Found! |
Example response
{
"code": "NotFound",
"request_id": "BE213CDD-8A5C-59EE-9A67-055EAB0CB59B",
"message": "Not Found!"
}
Error codes
|
HTTP status code |
Error code |
Example |
Description |
Solution |
|
400 |
InvalidParameter |
Missing training files |
A parameter is invalid, either because a required parameter is missing or a value has an incorrect format. |
Check the error message and correct the parameters in your request. |
|
400 |
UnsupportedOperation |
The fine-tune job cannot be deleted because it has already succeeded, failed, or been canceled. |
The resource is in a state that prevents this operation. |
Retry the operation after the resource enters an operational state. |
|
404 |
NotFound |
Not found! |
The requested resource does not exist. |
Verify that the resource ID is correct. |
|
409 |
Conflict |
Model instance xxxxx already exists, please specify a suffix |
A deployment instance with the specified name already exists. |
Specify a unique suffix for the deployment. |
|
429 |
Throttling |
|
The request was rejected because a platform limit was reached. |
|
|
500 |
InternalError |
Internal server error! |
An internal error occurred. |
Record the request_id and submit a ticket to Alibaba Cloud support for troubleshooting. |