简介
在人工智能领域,Qwen 团队一直致力于创建一个强大的编码模型,以彻底改变我们处理代码智能的方式。本文旨在深入介绍 Qwen2.5-Coder,它是最新的 Qwen 大语言特定代码模型系列。目前,Qwen2.5-Coder 已涵盖 0.5、1.5、3、7、140、320 亿参数六种主流模型大小,可满足不同开发者的需求。
开发背景
Qwen2.5-Coder 是 Qwen2.5 系列的一部分,有三种模型大小: 1.5B、7B 和 32B 版本(即将推出)。本次更新主要集中在两个方面的改进:扩大代码训练数据规模和增强编码能力,同时保持数学和一般任务等其他核心领域的强劲性能。Qwen2.5-Coder 基于强大的 Qwen2.5,继续在更大规模的代码数据上进行训练,包括源代码、文本代码基础数据和合成数据,总计 5.5 万亿个 token。
主要功能
Qwen2.5-Coder 在 CodeQwen1.5 的基础上进行了以下改进:
代码生成、代码推理和代码修正方面的重大改进: Qwen2.5-Coder-7B 已成为当前最先进的开源 codeLLM,其编码能力可与 GPT-4o 相媲美。
为代码代理等实际应用提供更全面的基础: Qwen2.5-Coder 保持了其在数学和综合能力方面的优势。
长文本支持高达 128K 标记: Qwen2.5-Coder 支持多达 128K 字节的上下文,涵盖 92 种编程语言。
架构
Qwen2.5-Coder 基于变压器架构,使用 RoPE、SwiGLU、RMSNorm 和 Attention QKV 偏置。该模型有 76.1 亿个参数,28 层,28 个 Q 注意头和 4 个 KV 注意头。
更多详情,请参阅官方的blog, GitHub, Documentation, Arxiv.
性能
Qwen2.5-Coder 在代码生成、多编程代码生成、代码补全和代码修复等各种代码相关评估任务方面都取得了显著的改进。值得注意的是,Qwen2.5-Coder 的开源 7B 版本甚至超过了 DeepSeek-Coder-V2-Lite 和 CodeStral-22B 等大型模型。
实际应用
Qwen2.5-Coder 可用于代码代理等实际应用,其强大的编码和推理能力可用于创建强大的编码工具。
Qwen2.5-Coder-7B-Instruct
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-Coder-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "write a quick sort algorithm."
messages = [
{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
复制代码
处理长文本
当前的 config.json 设置为上下文长度不超过 32,768 个字节。 为了处理超过 32,768 个字节的大量输入,我们使用了 YaRN,这是一种增强模型长度外推的技术,可确保在处理长文本时获得最佳性能。 对于受支持的框架,您可以在 config.json 中添加以下内容以启用 YaRN:
{
...,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
复制代码
对于部署,我们建议使用 vLLM。 如果您不熟悉 vLLM,请参阅我们的文档了解使用方法。 目前,vLLM 只支持静态 YARN,这意味着无论输入长度如何,缩放因子都保持不变,这可能会影响较短文本的性能。 我们建议只有在需要处理长文本时才添加绳索缩放配置。
Qwen2.5-Coder-32B-Instruct
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-Coder-32B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "write a quick sort algorithm."
messages = [
{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
复制代码
处理长文本
当前的 config.json 设置为上下文长度不超过 32,768 个字节。 为了处理超过 32,768 个字节的大量输入,我们使用了 YaRN,这是一种增强模型长度外推法的技术,可确保在处理冗长文本时获得最佳性能。 对于受支持的框架,您可以在 config.json 中添加以下内容以启用 YaRN:
{
...,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
复制代码
对于部署,我们建议使用 vLLM。 如果您不熟悉 vLLM,请参阅我们的文档了解使用方法。 目前,vLLM 只支持静态 YARN,这意味着无论输入长度如何,缩放因子都保持不变,这可能会影响较短文本的性能。 我们建议只有在需要处理长文本时才添加绳索缩放配置。
评论