本文檔以千問模型的調優操作為例進行說明,通過 API (HTTP)的方式,使用阿里雲百鍊提供的模型調優(微調)功能。
本文檔僅適用於國際版(新加坡地區)。
前提條件
瞭解模型調優(微調)的基本概念、流程及資料格式要求。
已開通服務並配置了 API-KEY, 請參考擷取API Key。
模型調優介紹
模型調優作為重要的模型效果最佳化方式,可以:
提升模型在特定行業/業務表現
降低模型輸出延遲
抑制模型幻覺
對齊人類的價值觀或偏好
使用調優後的輕量級模型替代規模更大的模型
模型在調優過程中,會學習訓練資料中的知識、語氣、表達習慣、自我認知等業務/情境特徵。也由於已經在訓練過程中學習到了大量特定行業/情境的範例,訓練後模型 One-Shot 或者 Zero-Shot 的 Prompt 效果會比訓練前 Few-Shot 效果更好,這樣可以節省大量輸入 token,從而降低模型輸出延遲。
整體流程
支援的模型
文本產生
模型名稱 | 模型代碼 | SFT全參訓練 (sft) | SFT高效訓練 (efficient_sft) |
千問3-32B | qwen3-32b | ||
千問3-14B | qwen3-14b | ||
千問3-VL-8B-Instruct | qwen3-vl-8b-instruct | ||
千問3-VL-8B-Thinking | qwen3-vl-8b-thinking |
訓練模式對比
全參訓練 | 高效訓練 (LoRA,推薦) | |
適用情境 | • 需要模型學習新能力 • 追求全域效果最優 | • 最佳化模型特定情境下的效果 • 對訓練時間和成本敏感的情境 |
訓練時間 | 較長,收斂速度較慢。 | 較短,收斂速度快。 |
模型調優計費說明
計費方式 | 按訓練的資料量計費 |
計費公式 | 模型訓練費用 = (訓練資料 Token 總數 + 混合訓練資料 Token 總數)× 迴圈次數 × 訓練單價(最小計費單位:1 token) |
資料集構建技巧
資料集的規模要求
對於 SFT 來說,資料集最少需要上千條優質調優資料。如果資料調優後的模型評測結果不佳,最簡單的改進方法是收集更多資料進行訓練。
如果您缺乏資料,建議構建智能體應用,使用知識庫索引來增強模型能力。當然在很多複雜的業務情境,可以綜合採用模型調優和知識庫檢索結合的技術方案。
以客服情境為例,可以藉助模型調優解決客服回答的語氣、表達習慣、自我認知等問題,情境涉及的專業知識可以結合知識庫,動態引入到模型上下文中。
阿里雲百鍊推薦您可以先構建 RAG 應用試運行,在收集到足夠的應用資料後再通過模型調優繼續提升模型表現。
您也可以採用以下策略擴充資料集:
讓大模型類比產生特定業務/情境的相關內容,輔助您產生更多用於調優資料。(產生模型建議選取表現優異、規模更大的模型)
通過應用情境收集、網路爬蟲、社交媒體和線上論壇、公開資料集、夥伴與行業資源、使用者貢獻等各種方式,人工擷取更多資料。
資料的多樣性與均衡性
模型調優有不同情境,針對具體業務情境時,專業性更重要;而針對問答情境時通用性更重要。您需要根據模型負責的業務模組或使用情境進行資料用例設計。因此訓練效果好壞並不是僅取決於資料量,更需要考慮針對情境的專業性和多樣性。
這裡以智能 AI 對話情境為例,介紹一個專業、多樣的資料集應該包含的各種業務情境:
具體業務 | 多樣化情境/業務 |
電商客服 | 活動推送、售前諮詢、售中引導、售後服務、售後回訪、投訴處理等。 |
金融服務 | 貸款諮詢、投資理財顧問、信用卡服務、銀行賬戶管理等。 |
線上醫學 | 病症諮詢、挂號預約、就診須知、藥品資訊查詢、健康小建議等。 |
AI 秘書 | IT 資訊、行政資訊、HR 資訊、員工福利解答、公司日曆查詢等。 |
旅遊出行助手 | 旅行規劃、出入境指南、旅行保險諮詢、目的地風土人情介紹等。 |
企業法律顧問 | 合約審核、智慧財產權保護、合規性檢查、勞動法律答疑、跨境交易諮詢、個案法律分析等。 |
還請特別注意的是各個情境/業務的資料數量應相對均衡,資料比例符合實際情境比例,避免某一類資料過多導致模型偏向於學習該類特徵,影響模型的泛化能力。
上傳訓練資料集
準備資料集
SFT 訓練集
SFT ChatML(Chat Markup Language)格式訓練資料,支援多輪對話和多種角色設定。
不支援OpenAI 的name、weight參數,所有的 assistant 輸出都會被訓練。
# 一行訓練資料(json 格式),展開後典型結構如下:
{"messages": [
{"role": "system", "content": "系統輸入1"},
{"role": "user", "content": "使用者輸入1"},
{"role": "assistant", "content": "期望的模型輸出1"},
{"role": "user", "content": "使用者輸入2"},
{"role": "assistant", "content": "期望的模型輸出2"}
...
]}system/user/assistant 區別請參見文本產生模型概述,訓練資料集範例:SFT-ChatML格式樣本.jsonl、SFT-ChatML格式樣本.xlsx(xls、xlsx 格式只支援單輪對話)。
單條訓練資料的所有 assistant 行都支援"loss_weight"參數,用於設定該行在訓練時的相對重要性。(設定範圍0.0 ~ 1.0,數值越大,重要性越高)
該參數屬於邀測參數,如需使用,請聯絡您的商務經理。
{"role": "assistant", "content": "期望的模型輸出1", "loss_weight": 1.0},
{"role": "assistant", "content": "期望的模型輸出2", "loss_weight": 0.5}SFT 思考模型(thinking)
訓練資料支援多輪對話和多種角色設定,但只能針對最後的 assistant 輸出進行訓練:
思考標籤前後的若干個\n必須要保留。# 一行訓練資料(json 格式),展開後典型結構如下:
{"messages": [
{"role": "system", "content": "系統輸入1"},
{"role": "user", "content": "使用者輸入1"},
{"role": "assistant", "content": "模型輸出1"}, --中間的 assitant 輸出不應添加 <think> 標籤
...
{"role": "user", "content": "使用者輸入2"},
{"role": "assistant", "content": "<think>\n期望的思考內容2\n</think>\n\n期望的輸出2"} --思考內容只能包含在最後一個 assistant 輸出中。
]}system/user/assistant 區別請參見文本產生模型概述,訓練資料集範例:SFT- 深度思考內容樣本.jsonl。
也可以在訓練樣本中設定模型不輸出<think>標籤, 如果使用這種輸出方式,模型訓練完成後不建議再開啟思考模式進行調用。
{"role": "assistant", "content": "期望的模型輸出2"} --告訴模型不開啟思考單條訓練資料最後的 assistant 行支援"loss_weight"參數,用於設定該條資料在訓練時的相對重要性。(設定範圍0.0 ~ 1.0,數值越大,重要性越高)
該參數屬於邀測參數,如需使用,請聯絡您的商務經理。
{"role": "assistant", "content": "<think>\n期望的思考內容2\n</think>\n\n期望的輸出2", "loss_weight": 1.0}SFT 映像理解(千問VL)
不支援OpenAI 的name、weight參數,所有的 assistant 輸出都會被訓練。
system/user/assistant 區別請參見文本產生模型概述。ChatML 格式訓練資料範例:
# 一行訓練資料(json 格式),展開後典型結構如下:
{"messages":[
{"role":"user",
"content":[
{"text":"使用者輸入1"},
{"image":"影像檔名1"}]},
{"role":"assistant",
"content":[
{"text":"模型期望輸出1"}]},
{"role":"user",
"content":[
{"text":"使用者輸入2"}]},
{"role":"assistant",
"content":[
{"text":"模型期望輸出2"}]},
...
...
...
]}如果訓練思考模型(Thinking),也需要遵循SFT 思考模型(thinking)的資料格式要求。
壓縮包要求:
壓縮包格式:ZIP。最大支援 2 GB, ZIP 包內檔案夾、檔案名稱僅支援 ASCII 字元集中的字母 (a-z, A-Z)、數字 (0-9)、底線 (_)、連字號 (-)。
訓練文本資料固定為 data.jsonl,並且位於壓縮包的根目錄下,應確保壓縮後開啟 zip 檔案,直接就能看到
data.jsonl檔案。圖片單張尺寸的寬度和高度均不得超過 1024px,最大不超過10MB,支援
.bmp,.jpeg /.jpg,.png,.tif /.tiff,.webp格式。圖片檔案的名稱不能重複,即使分布在不同的檔案夾中。
壓縮包目錄結構:
單層目錄(推薦)
圖片檔案與
data.jsonl檔案均位於壓縮包根目錄下。Trainingdata_vl.zip |--- data.jsonl #注意:外層不能再包裹檔案夾 |--- image1.png |--- image2.jpg多層目錄
data.jsonl 必須在壓縮包根目錄下。
data.jsonl 內只需要聲明影像檔名,不需要聲明檔案路徑。例如:
正確樣本:
image1.jpg;錯誤樣本:jpg_folder/image1.jpg。影像檔名應在壓縮包內全域唯一。
Trainingdata_vl.zip |--- data.jsonl #注意:外層不能再包裹檔案夾 |--- jpg_folder | └── image1.jpg |--- png_folder └── image2.png
將調優檔案上傳至阿里雲百鍊
HTTP
Windows CMD 請將${DASHSCOPE_API_KEY}替換為%DASHSCOPE_API_KEY%,PowerShell 請替換為$env:DASHSCOPE_API_KEY
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"path/to/your/sample.jsonl"' \
--form 'purpose="fine-tune"'使用限制:
單個檔案大小最大為 1GB
所有有效檔案(未刪除)總使用空間配額為5GB
所有有效檔案(未刪除)總數量配額為100個
檔案儲存體沒有時間限制
更多 API 使用詳細資料請參見 OpenAI相容-File。
返回結果:
{
"id": "file-ft-e73cafa11cef43a0ab75fb8e",
"object": "file",
"bytes": 23149,
"filename": "qwen-fine-tune-sample.jsonl",
"purpose": "fine-tune",
"status": "processed",
"created_at": 1769138847
}模型調優
建立調優任務
HTTP
Windows CMD 請將${DASHSCOPE_API_KEY}替換為%DASHSCOPE_API_KEY%,PowerShell 請替換為$env:DASHSCOPE_API_KEY
curl --location "https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes" \
--header "Authorization: Bearer ${DASHSCOPE_API_KEY}" \
--header 'Content-Type: application/json' \
--data '{
"model":"qwen3-14b",
"training_file_ids":[
"<替換為訓練資料集的file_id1>",
"<替換為訓練資料集的file_id2>"
],
"hyper_parameters":
{
"n_epochs": 1,
"batch_size": 16,
"learning_rate": "1.6e-5",
"split": 0.9,
"warmup_ratio": 0.0,
"eval_steps": 1,
"save_strategy": "epoch",
"save_total_limit": 10
},
"training_type":"sft"
}'輸入參數
欄位 | 必選 | 類型 | 傳參方式 | 描述 |
training_file_ids | 是 | Array | Body | 訓練集檔案清單。 |
validation_file_ids | 否 | Array | Body | 驗證集檔案清單。 |
model | 是 | String | Body | 用於調優的基本模型 ID,或其他調優任務產出的模型 ID。 |
hyper_parameters | 否 | Map | Body | 用於調優模型的超參數,缺失該參數時系統會使用預設值進行調優。 |
training_type | 否 | String | Body | 調優方法,可選值為:
|
job_name | 否 | String | Body | 調優任務名稱 |
model_name | 否 | String | Body | 調優產生的模型名稱(並非模型 ID,模型 ID 由系統統一產生) |
返回範例
{
"request_id": "635f7047-003e-4be3-b1db-6f98e239f57b",
"output":
{
"job_id": "ft-202511272033-8ae7",
"job_name": "ft-202511272033-8ae7",
"status": "PENDING",
"finetuned_output": "qwen3-14b-ft-202511272033-8ae7",
"model": "qwen3-14b",
"base_model": "qwen3-14b",
"training_file_ids":
[
"9e9ffdfa-c3bf-436e-9613-6f053c66aa6e"
],
"validation_file_ids":
[],
"hyper_parameters":
{
"n_epochs": 1,
"batch_size": 16,
"learning_rate": "1.6e-5",
"split": 0.9,
"warmup_ratio": 0.0,
"eval_steps": 1,
"save_strategy": "epoch",
"save_total_limit": 10
},
"training_type": "sft",
"create_time": "2025-11-27 20:33:15",
"workspace_id": "llm-8v53etv3hwb8orx1",
"user_identity": "1654290265984853",
"modifier": "1654290265984853",
"creator": "1654290265984853",
"group": "llm",
"max_output_cnt": 10
}
}hyper_parameters內支援的設定
查詢調優任務詳情
使用建立任務時返回的job_id來查詢任務狀態。
HTTP
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'輸入參數
欄位 | 類型 | 傳參方式 | 必選 | 描述 |
job_id | String | Path Parameter | 是 | 要查詢的調優任務的ID。 |
返回成功範例
{
"request_id": "d100cddb-ac85-4c82-bd5c-9b5421c5e94d",
"output":
{
"job_id": "ft-202511272033-8ae7",
"job_name": "ft-202511272033-8ae7",
"status": "RUNNING",
"finetuned_output": "qwen3-14b-ft-202511272033-8ae7",
"model": "qwen3-14b",
"base_model": "qwen3-14b",
"training_file_ids":
[
"9e9ffdfa-c3bf-436e-9613-6f053c66aa6e"
],
"validation_file_ids":
[],
"hyper_parameters":
{
"n_epochs": 1,
"batch_size": 16,
"learning_rate": "1.6e-5",
"split": 0.9,
"warmup_ratio": 0.0,
"eval_steps": 1,
"save_strategy": "epoch",
"save_total_limit": 10
},
"training_type": "sft",
"create_time": "2025-11-27 20:33:15",
"workspace_id": "llm-8v53etv3hwb8orx1",
"user_identity": "1654290265984853",
"modifier": "1654290265984853",
"creator": "1654290265984853",
"group": "llm",
"max_output_cnt": 10
}
}任務狀態 | 含義 |
PENDING | 訓練待開始。 |
QUEUING | 訓練正在排隊(同時只有一個訓練任務可以進行) |
RUNNING | 訓練進行中中。 |
CANCELING | 訓練正在取消中。 |
SUCCEEDED | 訓練成功。 |
FAILED | 訓練失敗。 |
CANCELED | 訓練已經取消。 |
訓練成功後,finetuned_output指的是調優成功後的模型 ID,可用於模型部署。
擷取調優任務日誌
HTTP
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/logs?offset=0&line=1000' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' 可通過 offset 和 line 兩個參數擷取特定行數區間的日誌。 Offset 用於設定日誌輸出開始的位置;line 用於設定日誌最多輸出多少行。
返回結果範例:
{
"request_id":"1100d073-4673-47df-aed8-c35b3108e968",
"output":{
"total":57,
"logs":[
"{輸出調優日誌1}",
"{輸出調優日誌2}",
...
...
...
]
}
}查詢與發布模型參數快照
僅 SFT微調訓練(efficient_sft、sft)支援儲存和發布其中間狀態的模型參數快照(Checkpoint)。
查詢調優任務的參數快照列表
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/checkpoints' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'輸入參數
欄位 | 類型 | 傳參方式 | 必選 | 描述 |
job_id | String | Path Parameter | 是 | 要查詢的調優任務的ID。 |
返回成功範例
{
"request_id": "c11939b5-efa6-4639-97ae-ed4597984647",
"output":
[
{
"create_time": "2025-11-11T16:25:42",
"full_name": "ft-202511272033-8ae7-checkpoint-20",
"job_id": "ft-202511272033-8ae7",
"checkpoint": "checkpoint-20",
"model_name": "qwen3-14b-instruct-ft-202511272033-8ae7",
"status": "SUCCEEDED"
}
]
}快照發布狀態 (status) | 含義 |
PENDING | 快照(Checkpoint)待匯出。 |
PROCESSING | 快照(Checkpoint)匯出中。 |
SUCCEEDED | 快照(Checkpoint)匯出成功。 |
FAILED | 快照(Checkpoint)匯出失敗。 |
checkpoint指的是 Checkpoint ID,用於在模型發布 API 中指定要匯出的快照;model_name指的是模型 ID,可用於模型部署。(finetuned_output 輸出的是最後一個 checkpoint 的 model_name)
模型發布
在百鍊平台上,模型調優完成後可以匯出參數快照,匯出後才能基於此版本的參數快照在百鍊上進行模型部署。
匯出的參數快照儲存在雲端儲存中,暫不支援訪問或下載。
curl --request GET 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/export/<checkpoint_id>?model_name=<model_name>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json'輸入參數
欄位 | 類型 | 傳參方式 | 必選 | 描述 |
job_id | String | Path Parameter | 是 | 要查詢的調優任務的 ID。 |
checkpoint_id | String | Path Parameter | 是 | 要匯出的 Checkpoint ID。 |
model_name | String | Path Parameter | 是 | 匯出後期望的模型 ID。 |
匯出任務成功返回範例
{
"request_id": "ed3faa41-6be3-4271-9b83-941b23680537",
"output": true
}由於匯出任務是非同步執行的,請使用查詢快照列表 API 觀察快照匯出狀態。
模型調優的更多操作
列舉調優工作清單
curl 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' 中止調優任務
智能終止正在訓練中的調優任務
curl --request POST 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>/cancel' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' 刪除調優任務
無法刪除正在訓練中的調優任務
curl --request DELETE 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<job_id>' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' 模型部署
調優後模型僅支援模型单元部署方式。
請前往模型部署控制台(新加坡)進行模型部署,計費等更多詳情請參考按使用時間長度計費(模型單元)。
模型調用
模型部署成功後,支援通過 OpenAI 相容、Dashscope及Assistant SDK進行調用。
在調用已部署成功的模型時,model的取值應為模型部署成功後的模型code。請前往模型部署控制台(新加坡)介面擷取模型code。
curl 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer '${DASHSCOPE_API_KEY} \
--header 'Content-Type: application/json' \
--data '{
"model": "<替換為部署任務成功後的模型執行個體 Code>",
"input":{
"messages":[
{
"role": "user",
"content": "你是誰?"
}
]
},
"parameters": {
"result_format": "message"
}
}'常見問題
可以上傳和部署自己的模型嗎?
暫不支援上傳和部署自有模型,建議您持續關注阿里雲百鍊最新動向。
此外,阿里雲人工智慧平台 PAI 提供了部署自有模型的功能,您可以參考PAI-LLM大語言模型部署瞭解部署方法。