Qwen2.5-Coder(亦稱CodeQwen)是阿里雲推出的代碼大語言模型系列,包含0.5B至32B六種尺寸。基于海量代碼資料訓練,在代碼產生、補全和修複等任務中表現卓越,同時保持強大的數學與推理能力。以下步驟以 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模型卡片,進入模型詳情頁面。
-
在模型詳情頁單擊右上方训练。關鍵配置如下:
-
資料集配置:準備好資料後,上傳到OSS Bucket中,或通過指定資料集對象選擇NAS/CPFS上的資料。也可使用PAI預置的公用資料集,直接提交任務測試演算法。
-
計算資源配置:演算法需要使用80 GB顯存及以上的GPU資源,請確保選擇使用的資源配額內有充足的計算資源。其他規模的模型所需資源規格,請參見環境要求。
-
超參數配置:支援的超參如下,可按需調整,或使用預設值。
-
-
單擊训练,Model Gallery自動跳轉到任務詳情頁面,開始訓練,您可以查看訓練任務狀態和日誌。
訓練好的模型會自動註冊到AI資產-模型管理中,您可以查看或部署對應的模型,詳情請參見註冊及管理模型。
模型評測
PAI為千問2.5-Coder-32B-Instruct模型提供了內建的評測演算法,可評估原始模型和微調後模型的效能,詳情請參見模型評測、大模型評測最佳實務。
模型壓縮
訓練後,您可以在部署前對模型進行量化(壓縮),以減少其儲存空間佔用和計算資源消耗,詳情請參見模型壓縮。