项目介绍:Qwen2-72B-Instruct-GPTQ-Int4
项目背景
Qwen2-72B-Instruct-GPTQ-Int4是Qwen大型语言模型系列中的一个重要项目。Qwen2系列包括基础语言模型和指令调优模型,参数范围从0.5亿到72亿不等。本项目特别提供了一个经过指令调优的72B模型。
相比之前发布的开源语言模型,包括Qwen1.5,Qwen2在多项基准测试中表现出色。这些测试涵盖了语言理解、生成、多语言能力、编程、数学推理等多个领域,表明Qwen2不仅超越了大多数开源模型,也表现出对抗专有模型的竞争力。
模型详细信息
Qwen2是基于Transformer架构的语言模型系列,使用了SwiGLU激活函数、注意力QKV偏置、组查询注意力等技术。此外,它还配备了适应多种自然语言和代码的改进型分词器,具备优秀的表达能力。
训练与优化
模型训练在大量数据基础上进行预训练,并结合了监督微调和直接偏好优化等高级方法,以提升模型的调优效果和适用性。
环境要求
为了保证良好运行环境,建议用户使用最新的Hugging Face Transformers库,并安装transformers>=4.37.0
版本,否则可能出现KeyError: 'qwen2'
的错误提示。
快速开始
以下是使用Qwen2模型的一段代码示例,展示如何加载分词器和模型,生成文本内容:
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # 将模型加载到指定设备
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2-72B-Instruct-GPTQ-Int4",
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-72B-Instruct-GPTQ-Int4")
prompt = "简述大型语言模型。"
messages = [
{"role": "system", "content": "你是一位乐于助人的助手。"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generated_ids = model.generate(
model_inputs.input_ids,
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]
处理长文本
Qwen2-72B-Instruct-GPTQ-Int4最多支持131,072个token的上下文长度,这在处理大规模输入时尤为有用。为了优化长文本处理能力,项目引入了YARN技术,以提升模型在超长序列上的表现。
部署步骤
-
安装vLLM: 执行如下命令安装vLLM。
pip install "vllm>=0.4.3"
或者从源码安装。
-
配置模型设置: 下载模型权重后,修改
config.json
文件,插入以下配置:{ "architectures": [ "Qwen2ForCausalLM" ], // ... "vocab_size": 152064, // 添加以下配置以支持YARN "rope_scaling": { "factor": 4.0, "original_max_position_embeddings": 32768, "type": "yarn" } }
-
模型部署: 使用vLLM部署模型。例如,设置一个类似OpenAI的服务器:
python -m vllm.entrypoints.openai.api_server --served-model-name Qwen2-72B-Instruct-GPTQ-Int4 --model path/to/weights
然后通过以下方式访问API:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen2-72B-Instruct-GPTQ-Int4", "messages": [ {"role": "system", "content": "你是一位乐于助人的助手。"}, {"role": "user", "content": "输入你的长文本内容。"} ] }'
请注意,目前vLLM仅支持静态YARN,这意味着缩放因子在输入长度上保持不变,可能影响短文本的表现。建议仅在需要处理长上下文时添加rope_scaling
配置。
基准测试与性能
要了解bfloat16 (bf16) 和量化模型(如GPTQ-Int8, GPTQ-Int4, AWQ)之间的生成性能差异,可以查阅我们的量化模型基准测试。该基准测试为不同量化技术如何影响模型性能提供了深入的见解。
如果对使用transformer
或vLLM
部署模型时推理速度和内存消耗感兴趣,请参阅我们编制的速度基准测试。
引用
如果觉得我们的工作对您有帮助,欢迎引用我们的研究:
@article{qwen2,
title={Qwen2 Technical Report},
year={2024}
}