Qwen2:新一代开源大语言模型的全面解析与应用指南
Qwen2,作为Qwen1.5的升级版,是由阿里云Qwen团队研发的一系列开源大型语言模型(LLM)。在2024年6月6日正式发布,Qwen2提供了五种不同规模的预训练和指令微调模型,分别是0.5B、1.5B、7B、57B-A14B和72B。该模型支持多达27种语言,并在多项基准测试中表现出色,尤其在编码和数学推理方面有显著提升。此外,Qwen2扩展了7B和72B指令微调模型的上下文长度至128K tokens,并支持工具调用、检索增强生成(RAG)、角色扮演和AI Agent等功能。
Qwen2的核心特性
Qwen2系列模型在设计上兼顾了性能和灵活性,旨在为开发者和研究者提供强大的AI工具。以下是Qwen2的一些关键特性:
- 多尺寸选择:提供五种不同参数规模的模型,用户可以根据实际应用场景和计算资源选择合适的模型。
- 多语言支持:除了英语和中文,Qwen2还支持包括西班牙语、法语、德语和日语在内的27种其他语言,这使得Qwen2在多语言应用中具有广泛的适用性。
- 卓越的性能表现:Qwen2在多个基准测试中均取得了优异成绩,尤其在编码和数学能力方面表现突出,这使其在需要复杂逻辑推理的任务中更具优势。
- 长上下文支持:Qwen2-7B-Instruct和Qwen2-72B-Instruct支持高达128K tokens的上下文长度,这使得模型能够处理更长的文本输入,从而更好地理解上下文信息。
- 丰富的功能支持:Qwen2支持工具调用、RAG、角色扮演和AI Agent等功能,这为开发者提供了更多的应用可能性。
Qwen2的模型架构
要深入了解Qwen2,剖析其模型架构至关重要。Qwen2的源码(qwen2_model.py)基于PyTorch实现,涵盖了序列处理函数、模型基础类、基础构造模块、解码器层模块、完整模型结构以及下游任务模型等多个关键组件。
通过研究这些组件,可以更好地理解Qwen2的工作原理,并为定制化开发和优化提供指导。
Qwen2的安装与使用
下面介绍如何安装和使用Qwen2模型。
1. 安装
Qwen2 密集和 MoE 模型需要 transformers 库的版本高于4.40.0。建议使用最新版本以获得最佳兼容性和性能。
pip install transformers --upgrade
2. 模型加载
使用Hugging Face Transformers
以下代码展示了如何使用Hugging Face Transformers加载Qwen2模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2-7B-Instruct"
device = "cuda" # 选择设备,如"cuda"或"cpu"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
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,
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]
print(response)
使用ModelScope
ModelScope提供了更便捷的模型下载和管理功能,尤其适合中国大陆用户。
3. 模型推理
Qwen2支持多种推理方式,包括本地运行和Web UI。
本地运行
Ollama
Ollama是一个轻量级的工具,可以方便地拉取和运行Qwen2模型。
ollama run qwen2:7b
Ollama还提供了一个与OpenAI兼容的API,方便集成到现有应用中。但请注意,Ollama不支持函数调用。
llama.cpp
llama.cpp是一个C++库,可以高效地运行大型语言模型。首先,下载我们提供的 GGUF 文件或自行创建,然后可以直接使用最新的 llama.cpp 运行以下命令:
./main -m <path-to-file> -n 512 --color -i -cml -f prompts/chat-with-qwen.txt
MLX-LM
如果使用Apple Silicon,可以选择兼容MLX-LM的检查点。在HuggingFace Hub上查找以MLX结尾的模型,例如Qwen2-7B-Instruct-MLX。
LMStudio
LMStudio已支持Qwen2,可以直接使用LMStudio和GGUF文件。
OpenVINO
Qwen2也得到了OpenVINO工具包的支持,可以使用Intel CPU、集成GPU或独立GPU运行。
Web UI
Text Generation Web UI
可以使用text-generation-webui快速创建一个Web UI演示。如果使用GGUF,记得安装支持Qwen2的最新llama.cpp轮子。
llamafile
克隆llamafile,运行source install,然后按照指南使用GGUF文件创建自己的llamafile。运行一行命令,例如./qwen.llamafile,即可创建一个演示。
4. 模型部署
vLLM
vLLM是一个快速且易于使用的LLM推理库。可以使用vLLM构建OpenAI兼容的API服务。
python -m vllm.entrypoints.openai.api_server --served-model-name Qwen2-7B-Instruct --model Qwen/Qwen2-7B-Instruct
然后,可以使用curl或OpenAI Python库与API进行交互。
SGLang
SGLang是一个结构化生成语言的框架。首先,从源代码安装SGLang,然后启动服务器:
python -m sglang.launch_server --model-path Qwen/Qwen2-7B-Instruct --port 30000
之后,可以使用SGLang提供的Python API进行模型推理。
5. Docker
为了简化部署过程,Qwen团队提供了带有预构建环境的Docker镜像:qwenllm/qwen。只需安装驱动程序并下载模型文件,即可启动演示和微调模型。
docker run --gpus all --ipc=host --network=host --rm --name qwen2 -it qwenllm/qwen:2-cu121 bash
Qwen2的模型微调
硬件资源
微调Qwen2-72B-Instruct至少需要6卡A100-80G GPU。
- 多卡训练:可以使用8卡A100-80G GPU进行训练,也可以使用8卡华为昇腾910B-32GB NPU+192G CPU,并采用Zero3技术。
微调方法与框架
推荐使用Axolotl、Llama-Factory、Swift等训练框架,以使用SFT、DPO、PPO等进行模型微调。
执行模型微调
基于CLI的快速微调
准备chatml格式的微调数据集。
{ "type": "chatml", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Tell me something about large language models." }, { "role": "assistant", "content": "Large language models are a type of language model that is trained on a large corpus of text data. They are capable of generating human-like text and are used in a variety of natural language processing tasks..." } ], "source": "unknown" }
调用
finetune.sh
脚本进行微调。cd examples/sft
bash finetune.sh -m
使用LLaMA-Factory高级训练库
准备alpaca或sharegpt格式的微调数据集。
alpaca格式:
[ { "instruction": "user instruction (required)", "input": "user input (optional)", "output": "model response (required)", "system": "system prompt (optional)", "history": [ ["user instruction in the first round (optional)", "model response in the first round (optional)"], ["user instruction in the second round (optional)", "model response in the second round (optional)"] ] } ]
sharegpt格式:
[ { "conversations": [ { "from": "human", "value": "user instruction" }, { "from": "gpt", "value": "model response" } ], "system": "system prompt (optional)", "tools": "tool description (optional)" } ]
打开LLaMA-Factory界面执行微调。
Qwen2的案例应用
Qwen2在实际应用中展现出强大的能力,以下是两个典型的案例:
基于Langchain框架调用工具能力:Qwen2可以与Langchain框架结合,实现工具调用功能,解决复杂的数学计算问题。
基于Langgraph框架调用工具能力:Qwen2可以与Langgraph框架结合,通过条件边实现是否调用工具的逻辑,解决LLM在数学方面的困难,并根据不同情境作出不同的响应。
总结
Qwen2作为新一代的开源大语言模型,凭借其多尺寸选择、多语言支持、卓越的性能表现、长上下文支持和丰富的功能支持,为开发者和研究者提供了强大的AI工具。无论是模型推理、部署还是微调,Qwen2都提供了多种灵活的解决方案。随着Qwen2的不断发展和完善,相信它将在自然语言处理领域发挥越来越重要的作用。