Qwen2.5-Coder,亦稱CodeQwen,是阿里雲推出的、專註於代碼相關任務的大語言模型系列。該系列包含六種模型尺寸(0.5B、1.5B、3B、7B、14B和32B),以滿足不同開發人員的多樣化需求。Qwen2.5-Coder 基于海量代碼資料進行訓練,在保持強大數學和推理能力的同時,在以代碼為中心的應用情境中表現卓越。本教程將以 Qwen2.5-Coder-32B-Instruct 模型為例進行說明。
模型簡介
Qwen2.5-Coder 是一系列功能強大的、以編程為核心的模型,最高支援128K tokens的上下文長度,併兼容92種程式設計語言。該系列模型在多項代碼相關任務中表現出色,包括多語言代碼產生、代碼補全和代碼修複。在Qwen2.5-Coder的基礎上,經過指令微調的變體 Qwen2.5-Coder-Instruct 進一步提升了各項任務的效能,並展現出卓越的泛化能力。
主要特性包括:
多語言編程能力:Qwen2.5-Coder-Instruct 在覆蓋40多種語言的McEval基準測試中表現出卓越的效能,即使是小眾程式設計語言也不例外。
代碼推理能力:該模型在CRUXEval基準測試上取得了令人矚目的成績,展示了強大的代碼推理能力。這種增強推理能力也與複雜指令遵循任務的效能提升相關。
數學能力:作為編碼的基礎學科,數學是該模型同樣擅長的領域,凸顯了其在STEM領域的強大綜合能力。
基礎能力:Qwen2.5-Coder-Instruct 繼承了基本模型Qwen2.5強大的通用能力,確保了其在廣泛任務中的穩定性和適用性。
環境要求
支援地區
目前支援在華北2(北京)、華東2(上海)、華南1(深圳)、華東1(杭州)、華北6(烏蘭察布)、新加坡等地區使用Model Gallery模組運行。
資源要求
模型規模 | 部署要求 | 訓練要求 |
Qwen2.5-Coder-0.5B/1.5B | 最低卡型配置為單卡P4,推薦部署機型為單卡GU30、單卡A10、單卡V100、單卡T4等。 | 使用16GB顯存(例如T4、P100、V100)及以上卡型。 |
Qwen2.5-Coder-3B/7B | 最低卡型配置為單卡P100、單卡T4、單卡V100(gn6v)等,推薦部署機型為單卡GU30、單卡A10等; | 使用24GB顯存(例如A10、T4)及以上卡型。 |
Qwen2.5-Coder-14B | 最低卡型配置為單卡L20、單卡GU60、雙卡GU30等,推薦部署機型為雙卡GU60、雙卡L20等。 | 使用32GB顯存(例如V100)及以上卡型。 |
Qwen2.5-Coder-32B | 最低卡型配置為雙卡GU60、雙卡L20、四卡A10等,推薦部署機型為四卡GU60、四卡L20、8卡V100-32G等。 | 使用80GB顯存(例如A800/H800)及以上卡型。 |
模型部署和調用
模型部署
進入Model Gallery頁面。
登入PAI控制台。
在頂部左上方根據實際情況選擇地區。
在左側導覽列選擇工作空间列表,單擊指定工作空間名稱,進入對應工作空間內。
在左側導覽列選擇快速开始 > Model Gallery。
在Model Gallery頁面右側的模型列表中,搜多並選擇通義千問2.5-Coder-32B-Instruct模型卡片,進入模型詳情頁面。
單擊右上方部署,然後使用預設配置即可,單擊確定部署服務。當狀態變為运行中時,代表部署成功。
本文使用了公用資源建立模型服務,計費方式為隨用隨付。當您不需要使用服務時請停止或刪除服務,以免繼續計費。
調用模型
擷取調用資訊
在模型詳情頁,單擊查看调用信息擷取調用地址和Token。
在彈出的調用資訊面板中,選擇共用網關頁簽,複製公網調用地址和 Token 的值。
通過API調用
模型支援使用API調用,程式碼範例如下:
from openai import OpenAI
# 1. 配置用戶端
# <EAS_TOKEN>需替換為部署服務的Token
openai_api_key = "<EAS_TOKEN>"
# <EAS_ENDPOINT>需替換為部署服務的訪問地址
openai_api_base = "<EAS_ENDPOINT>/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
# 2. 擷取模型名稱
# 對於BladeLLM, 設定model = ""。 因為BladeLLM不需要model入參,也不支援使用client.models.list()方式擷取模型名稱。設定Null 字元串以相容OpenAI SDK的強制參數要求
models = client.models.list()
model = models.data[0].id
print(model)
# 3. 發起對話請求
# 支援流式(stream=True)和非流式(stream=False)輸出
stream = True
chat_completion = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "hello"},
],
model=model,
top_p=0.8,
temperature=0.7,
max_tokens=1024,
stream=stream,
)
if stream:
for chunk in chat_completion:
print(chunk.choices[0].delta.content, end="")
else:
result = chat_completion.choices[0].message.content
print(result)更多API調用說明請參考通過API調用。
通過Web UI調用
模型同時支援使用Web UI調用,詳細操作步驟請參考模型卡片詳情頁說明。
模型部署完成後,可從模型卡片詳情頁Web 應用程式部分下載用戶端代碼,執行 python webui_client.py --eas_endpoint "<EAS API Endpoint>" --eas_token "<EAS API Token>" 啟動本地 Web 應用程式進行推理,其中 EAS API Endpoint 和 EAS API Token 從已部署的 EAS 服務詳情中擷取。執行 python webui_client.py -h 可查看更多參數說明。
模型微調訓練
Model Gallery為千問2.5-Coder-32B-Instruct模型配置了SFT和DPO兩種微調演算法,您可以通過開箱即用的方式對該模型進行微調。
SFT監督微調
SFT訓練演算法支援使用JSON格式輸入,每條資料由問題、答案組成,分別用"instruction"、"output"欄位表示,例如:
[
{
"instruction": "Create a function to calculate the sum of a sequence of integers.",
"output": "# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum"
},
{
"instruction": "Generate a Python code for crawling a website for a specific type of data.",
"output": "import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))"
}
]DPO直接偏好最佳化
DPO訓練演算法支援使用JSON格式輸入,每條資料由問題、預期模型輸出的答案、不希望模型輸出的答案組成,分別用"prompt"、"chosen"、"rejected"欄位表示,例如:
[
{
"prompt": "Create a function to calculate the sum of a sequence of integers.",
"chosen": "# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum",
"rejected": "[x*x for x in [1, 2, 3, 5, 8, 13]]"
},
{
"prompt": "Generate a Python code for crawling a website for a specific type of data.",
"chosen": "import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))",
"rejected": "def remove_duplicates(string): \n result = \"\" \n prev = '' \n\n for char in string:\n if char != prev: \n result += char\n prev = char\n return result\n\nresult = remove_duplicates(\"AAABBCCCD\")\nprint(result)"
}
]在Model Gallery頁面右側的模型列表中,單擊通義千問2.5-Coder-32B-Instruct模型卡片,進入模型詳情頁面。
在模型詳情頁單擊右上方训练。關鍵配置如下:
資料集配置:當完成資料的準備,您可以將資料上傳到Object Storage Service Bucket中,或是通過指定一個資料集對象,選擇NAS或CPFS儲存上的資料集。您也可以使用PAI預置的公用資料集,直接提交任務測試演算法。
計算資源配置:演算法需要使用80 GB顯存及以上的GPU資源,請確保選擇使用的資源配額內有充足的計算資源。其他規模的模型所需資源規格,請參見環境要求。
超參數配置:訓練演算法支援的超參資訊如下,您可以根據使用的資料,計算資源等調整超參,或是使用演算法預設配置的超參。
單擊训练,Model Gallery自動跳轉到任務詳情頁面,並開始進行訓練,您可以查看訓練任務狀態和訓練日誌。
訓練好的模型會自動註冊到AI資產-模型管理中,您可以查看或部署對應的模型,詳情請參見註冊及管理模型。
模型評測
科學高效的模型評測對于衡量效能、比較模型和指導最佳化至關重要。PAI為千問2.5-Coder-32B-Instruct模型提供了內建的評測演算法。您可以用它來評估原始模型和您微調後的模型的效能,詳情請參見模型評測、大模型評測最佳實務。
模型壓縮
訓練後,您可以在部署前對模型進行量化(壓縮),以減少其儲存空間佔用和計算資源消耗,詳情請參見模型壓縮。