通义千问2.5-Coder(Qwen2.5-Coder)是阿里云最新推出的、专注于代码处理的Qwen大语言模型系列,亦称为CodeQwen。该系列提供六种主流模型尺寸:0.5B、1.5B、3B、7B、14B和32B,以满足不同开发人员的多样化需求。通过对海量代码数据进行训练,Qwen2.5-Coder在保持强大数学和推理能力的基础上,显著增强了在代码应用场景中的表现。PAI已对该系列模型进行全面支持,本文以通义千问2.5-Coder-32B-Instruct模型为例为您介绍如何在Model Gallery中部署、微调、评测和压缩该系列模型。
简介
Qwen2.5-Coder是由阿里云推出的一款具备强大编程能力的模型,支持多达128K tokens 的上下文,并兼容92种编程语言。该模型在多个代码相关任务中表现卓越,包括多语言代码生成、代码补全和代码修复等。在Qwen2.5-Coder的基础上,阿里云通过指令微调,推出了Qwen2.5-Coder-Instruct,进一步提升了模型在各项任务中的性能,并展现了出色的泛化能力。
多编程语言能力
Qwen2.5-Coder-Instruct展示了卓越的多编程语言能力。通过McEval评估基准对模型进行广泛测试,涵盖40多种编程语言,包括一些小众语言,结果显示模型在多语言任务中表现优异。
代码推理
Qwen2.5-Coder-Instruct 在代码推理任务上表现突出。采用CRUXEval作为评估基准,模型展示了强大的推理能力。值得注意的是,随着代码推理能力的提升,模型在复杂指令执行方面的表现也有所增强,这为进一步探索代码能力对通用推理能力的影响提供了新的视角。
数学能力
Qwen2.5-Coder-Instruct在数学和代码任务中均表现出色。作为代码的基础学科,数学与代码密切相关,模型在这两方面的优异表现体现了其强大的理科综合能力。
基础能力
在通用能力评估中,Qwen2.5-Coder-Instruct保持了Qwen2.5的优势,证明了其在广泛任务中的适用性和稳定性。
通过以上特性,Qwen2.5-Coder系列模型为多语言编程和复杂任务处理提供了强有力的技术支持。
运行环境要求
本示例目前支持在华北2(北京)、华东2(上海)、华南1(深圳)、华东1(杭州)、华北6(乌兰察布)、新加坡等地域使用Model Gallery模块运行。
资源配置要求:
模型规模
资源要求
Qwen2.5-Coder-0.5B/1.5B
训练阶段:使用16GB显存(例如T4、P100、V100)及以上卡型。
部署阶段:最低卡型配置为单卡P4,推荐部署机型为单卡GU30、单卡A10、单卡V100、单卡T4等。
Qwen2.5-Coder-3B/7B
训练阶段:使用24GB显存(例如A10、T4)及以上卡型。
部署阶段:最低卡型配置为单卡P100、单卡T4、单卡V100(gn6v)等,推荐部署机型为单卡GU30、单卡A10等;
Qwen2.5-Coder-14B
训练阶段:使用32GB显存(例如V100)及以上卡型。
部署阶段:最低卡型配置为单卡L20、单卡GU60、双卡GU30等,推荐部署机型为双卡GU60、双卡L20等。
Qwen2.5-Coder-32B
训练阶段:使用80GB显存(例如A800/H800)及以上卡型。
部署阶段:最低卡型配置为双卡GU60、双卡L20、四卡A10等,推荐部署机型为四卡GU60、四卡L20、8卡V100-32G等。
通过PAI-Model Gallery使用模型
模型部署和调用
进入Model Gallery页面。
登录PAI控制台。
在顶部左上角根据实际情况选择地域。
在左侧导航栏选择工作空间列表,单击指定工作空间名称,进入对应工作空间内。
在左侧导航栏选择快速开始 > Model Gallery。
在Model Gallery页面右侧的模型列表中,单击通义千问2.5-Coder-32B-Instruct模型卡片,进入模型详情页面。
单击右上角部署,配置推理服务名称以及部署使用的资源信息,即可将模型部署到EAS推理服务平台。
使用推理服务。
在PAI-Model Gallery > 任务管理 > 部署任务中单击已部署的服务名称,在服务详情页面右上角单击查看WEB应用,即可通过ChatLLM WebUI进行实时交互。
模型微调训练
PAI-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)"
}
]
在模型详情页单击右上角训练。关键配置如下:
数据集配置:当完成数据的准备,您可以将数据上传到对象存储OSS Bucket中,或是通过指定一个数据集对象,选择NAS或CPFS存储上的数据集。您也可以使用PAI预置的公共数据集,直接提交任务测试算法。
计算资源配置:算法需要使用A800/H800(80GB显存)及以上的GPU资源,请确保选择使用的资源配额内有充足的计算资源。其他规模的模型所需资源规格,请参见运行环境要求。
超参数配置:训练算法支持的超参信息如下,您可以根据使用的数据,计算资源等调整超参,或是使用算法默认配置的超参。
超参数
类型
默认值
是否必须
描述
training_strategy
string
sft
是
训练算法,可以为SFT或DPO。
learning_rate
float
5e-5
是
学习率,用于控制模型权重,调整幅度。
num_train_epochs
int
1
是
训练数据集被重复使用的次数。
per_device_train_batch_size
int
1
是
每个GPU在一次训练迭代中处理的样本数量。较大的批次大小可以提高效率,也会增加显存的需求。
seq_length
int
128
是
序列长度,指模型在一次训练中处理的输入数据的长度。
lora_dim
int
32
否
LoRA维度,当lora_dim>0时,使用LoRA/QLoRA轻量化训练。
lora_alpha
int
32
否
LoRA权重,当lora_dim>0时,使用LoRA/QLoRA轻量化训练,该参数生效。
dpo_beta
float
0.1
否
模型在训练过程中对偏好信息的依赖程度。
load_in_4bit
bool
true
否
模型是否以4 bit加载。
当lora_dim>0、load_in_4bit为true且load_in_8bit为false时,使用4 bit QLoRA轻量化训练。
load_in_8bit
bool
false
否
模型是否以8 bit加载。
当lora_dim>0、load_in_4bit为false且load_in_8bit为true时,使用8 bit QLoRA轻量化训练。
gradient_accumulation_steps
int
8
否
梯度累积步骤数。
apply_chat_template
bool
true
否
算法是否为训练数据加上模型默认的chat template,以Qwen2系列模型为例,格式为:
问题:
<|im_end|>\n<|im_start|>user\n + instruction + <|im_end|>\n
答案:
<|im_start|>assistant\n + output + <|im_end|>\n
system_prompt
string
You are a helpful assistant
否
模型训练使用的系统提示语。
单击训练,PAI-Model Gallery自动跳转到模型训练页面,并开始进行训练,您可以查看训练任务状态和训练日志。
训练好的模型会自动注册到AI资产-模型管理中,您可以查看或部署对应的模型,详情请参见注册及管理模型。
模型评测
科学、高效的模型评测,不仅能帮助开发者有效地衡量和对比不同模型的性能,更能指导他们进行精准地模型选择和优化,加速AI创新和应用落地。
PAI-Model Gallery为通义千问2.5-Coder-32B-Instruct模型配置了评测算法,您可以通过开箱即用的方式对该模型(或微调后的模型)进行评测。关于模型评测详细的操作说明,请参见模型评测、大模型评测最佳实践。
模型压缩
经过训练后的模型在部署之前可以对模型进行量化压缩,可有效减少存储和计算资源的使用。关于模型压缩详细的操作说明,请参见模型压缩。