QWEN 2.5大模型本地部署与性能优化:技术调研实战分享

12

探索QWEN 2.5大模型本地部署与性能优化:一次技术调研实战

在人工智能浪潮中,大型语言模型(LLM)扮演着日益重要的角色。阿里云推出的QWEN系列模型,以其卓越的性能和广泛的应用场景,备受业界关注。最新发布的QWEN 2.5版本,在数据规模、模型能力和多语言支持等方面都实现了显著提升。本文将深入探讨QWEN 2.5大模型的关键特性,并结合实际操作,分享在本地环境下部署和优化QWEN 2.5 7B量化版模型的经验。

QWEN 2.5大模型:技术特性与亮点剖析

QWEN 2.5是阿里云QWEN系列的最新一代大型语言模型,相较于2.0版本,它在多个方面都进行了显著的改进和扩展。以下是QWEN 2.5大模型的一些关键特性和亮点:

  • 海量预训练数据:QWEN 2.5系列模型在高达18T tokens的数据集上进行了预训练,这赋予了它们更广阔的知识面和更精准的理解力,使其在各种自然语言处理任务中表现出色。
  • 性能全面提升:相比QWEN 2,QWEN 2.5的整体性能提升超过18%。在知识能力方面,如MMLU基准测试等多个测评中都有显著改进,数学能力也得到了显著加强,为解决复杂问题奠定了基础。
  • 指令跟随与结构化数据处理:QWEN 2.5在指令跟随方面表现出色,能够更准确地理解并执行用户的指令。同时,对于结构化数据的理解和生成能力也显著提高,尤其是在处理JSON格式的数据时,表现更加出色。
  • 强大的多语言支持:QWEN 2.5支持高达128K的上下文长度,并能生成最多8K的内容,能够流畅地响应各种系统提示,从而实现角色扮演和聊天机器人等复杂任务。它支持包括中文、英文、法文、西班牙文、俄文、日文、越南文、阿拉伯文在内的29种以上语言,展现出强大的多语言处理能力。
  • 专业领域模型
    • QWEN 2.5-Coder模型:通过5.5T代码数据的训练,实现了对92种编程语言的高效支持,同时保持了卓越的数学和通用推理能力,是编程辅助的强大工具。
    • QWEN 2.5-Math模型:凭借1T高质量数学数据的训练,并结合COT和TIR等先进技术,在数学领域展现出卓越的性能,能够有效解决复杂的数学问题。
  • 灵活的模型尺寸选择:QWEN 2.5系列提供从1.5B到72B不同尺寸的模型,以满足不同开发者的需求,开发者可以根据自身资源和应用场景选择合适的模型。
  • 友好的开源许可:QWEN 2.5-Coder模型采用Apache 2.0许可证,确保了开源社区的参与和扩展能力,促进了技术的共享和发展。
  • 卓越的性能评测结果:QWEN 2.5-72B模型在MMLU-rudex基准、MBPP基准和MATH基准的得分分别高达86.8、88.2和83.1,充分展示了其卓越的性能。

QWEN 2.5大模型的这些特性使其在语言理解、知识问答、编程辅助、数学问题解决等多个领域具有广阔的应用前景。

本地部署QWEN 2.5:环境搭建与问题解决

为了将QWEN 2.5大模型应用于实际项目,笔者尝试在本地环境中进行部署和技术调研。由于硬件资源的限制,选择部署7B的量化版模型。以下是详细的部署过程和遇到的问题及解决方案:

1. 硬件环境

  • 显卡:Nvidia 2080 (11GB显存)

2. 软件环境

  • 操作系统:Ubuntu 20.04
  • Python:3.8
  • CUDA:11.0
  • PyTorch:1.10

3. 模型下载

从Hugging Face下载QWEN 2.5-7B-Instruct模型:Qwen/Qwen2.5-7B-Instruct · Hugging Face

Qwen/Qwen2.5-7B-Instruct · Hugging Face

考虑到国内网络环境,建议使用镜像网站或hfd脚本进行下载,提高下载速度。

4. 安装vLLM框架

为了提升模型推理性能,选择使用vLLM框架。执行以下命令安装vLLM:

pip install vllm

在安装过程中,可能会遇到“gcc: error trying to exec ‘cc1plus‘: execvp: 没有那个文件或目录”的错误。这通常是由于缺少g++或gcc版本过低导致的。

解决方案:

(1) 安装或升级gcc和g++。

由于编译vLLM需要gcc 9.0及以上版本,而系统默认的gcc版本可能较低(如7.5)。因此,需要先安装或升级gcc和g++。

执行以下命令安装gcc和g++的11版本:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-11
sudo apt install g++-11

(2) 配置gcc和g++版本。

安装完成后,系统中会同时存在多个gcc和g++版本。需要使用update-alternatives命令来管理和切换默认版本。

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 50

然后,通过以下命令在交互模式下设置默认使用的版本:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

选择gcc-11和g++-11作为默认版本。完成以上步骤后,重新运行pip install vllm,应该可以成功安装。

QWEN 2.5模型运行实战:三种方式对比

成功安装vLLM后,就可以开始运行QWEN 2.5模型了。这里介绍三种不同的运行方式,并分析它们的优缺点。

1. Hugging Face运行方式

通过Hugging Face的transformers库加载模型,并以对话模式运行。这种方式简单易用,适合快速验证模型的功能。

from transformers import AutoModelForCausalLM, AutoTokenizer

model_path = 'models/Qwen/Qwen2.5-7B-Instruct-GPTQ-Int8/'
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype="auto", device_map="cuda:0", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_path)

prompt = '你好,请介绍一下你自己。'
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=1024,
)
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)

优点:

  • 代码简单易懂,易于上手。
  • 可以直接使用Hugging Face Hub上的预训练模型。

缺点:

  • 推理速度较慢,尤其是在CPU上运行时。
  • 对显存的利用率不高,难以充分发挥GPU的性能。

2. 批处理运行模式

为了提高显卡利用率,可以采用批处理方式运行模型。这种方式将多个输入打包成一个batch,一次性输入到模型中进行推理。

from transformers import pipeline

model_path = 'models/Qwen/Qwen2.5-7B-Instruct-GPTQ-Int8/'
pipe = pipeline("text-generation", model_path, torch_dtype="auto", device_map="cuda:0", trust_remote_code=True)

messages_batch = []
for i in range(8):
    prompt = '你好,请介绍一下你自己。'
    message = [
        {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ]
    messages_batch.append(message)

pipe.tokenizer.padding_side="left"

result_batch = pipe(messages_batch, max_new_tokens=512, batch_size=8)

response_message_batch = [result[0]["generated_text"][-1] for result in result_batch]

for response in response_message_batch:
    print(response)

优点:

  • 提高了显卡利用率,推理速度更快。
  • 可以同时处理多个输入,提高效率。

缺点:

  • 代码相对复杂,需要对transformers库有更深入的了解。
  • 需要根据硬件资源调整batch size,以达到最佳性能。

3. vLLM运行方式

vLLM是一个专门为LLM设计的推理引擎,可以显著提高推理速度和显存利用率。使用vLLM运行QWEN 2.5模型,可以获得更好的性能。

from vllm import LLM, SamplingParams
from transformers import AutoTokenizer

model_path = 'models/Qwen/Qwen2.5-3B-Instruct-AWQ/'
model = LLM(model=model_path, quantization="awq", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_path)

messages_batch = []
batch_size = 16
sampling_params = SamplingParams(temperature=0, top_p=0.8, repetition_penalty=1.05, max_tokens=2048)

for i in range(batch_size):
    prompt = '你好,请介绍一下你自己。'
    message = [
        {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ]
    text = tokenizer.apply_chat_template(
        message,
        tokenize=False,
        add_generation_prompt=False
    )
    messages_batch.append(text)

outputs = model.generate(messages_batch, sampling_params, use_tqdm=False)

for output in outputs:
    generated_text = output.outputs[0].text
    print(generated_text)

优点:

  • 推理速度非常快,比Hugging Face原生方式快数倍。
  • 显存利用率更高,可以在有限的显存下运行更大的模型。

缺点:

  • 配置相对复杂,需要安装vLLM框架。
  • 对硬件资源要求较高,可能需要更大的显存。

注意: 在2080显卡上运行vLLM可能会遇到显存不足的问题。可以尝试减小模型尺寸(如使用3B模型)、降低batch size或使用更高效的量化方法来缓解显存压力。

总结与展望

通过本次技术调研,我们深入了解了QWEN 2.5大模型的特性和优势,并成功在本地环境中部署和运行了7B量化版模型。通过对比不同的运行方式,发现vLLM框架在推理速度和显存利用率方面具有显著优势,值得推荐。尽管在部署过程中遇到了一些问题,但通过仔细分析和查找解决方案,最终都得以解决。

未来,可以进一步探索QWEN 2.5大模型在更多领域的应用,如智能客服、文本生成、代码生成等。同时,也需要关注模型优化和部署方面的技术进展,以便更好地利用大模型的能力,推动人工智能技术的发展。