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。

通过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()方式获取模型名称。设置空字符串以兼容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调用,详细操作步骤请参考模型卡片详情页说明。

模型微调训练
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模型提供了内置的评测算法。您可以用它来评估原始模型和您微调后的模型的性能,详情请参见模型评测、大模型评测最佳实践。
模型压缩
训练后,您可以在部署前对模型进行量化(压缩),以减少其存储空间占用和计算资源消耗,详情请参见模型压缩。