Qwen2全面解析:安装、使用与应用案例

4

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的一些关键特性:

  1. 多尺寸选择:提供五种不同参数规模的模型,用户可以根据实际应用场景和计算资源选择合适的模型。
  2. 多语言支持:除了英语和中文,Qwen2还支持包括西班牙语、法语、德语和日语在内的27种其他语言,这使得Qwen2在多语言应用中具有广泛的适用性。
  3. 卓越的性能表现:Qwen2在多个基准测试中均取得了优异成绩,尤其在编码和数学能力方面表现突出,这使其在需要复杂逻辑推理的任务中更具优势。
  4. 长上下文支持:Qwen2-7B-Instruct和Qwen2-72B-Instruct支持高达128K tokens的上下文长度,这使得模型能够处理更长的文本输入,从而更好地理解上下文信息。
  5. 丰富的功能支持: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的快速微调

    1. 准备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"
      }
    2. 调用finetune.sh脚本进行微调。

      cd examples/sft

bash finetune.sh -m -d --deepspeed [--use_lora True] [--q_lora True] ```

  • 使用LLaMA-Factory高级训练库

    1. 准备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)"
          }
        ]
    2. 打开LLaMA-Factory界面执行微调。

Qwen2的案例应用

Qwen2在实际应用中展现出强大的能力,以下是两个典型的案例:

  1. 基于Langchain框架调用工具能力:Qwen2可以与Langchain框架结合,实现工具调用功能,解决复杂的数学计算问题。

  2. 基于Langgraph框架调用工具能力:Qwen2可以与Langgraph框架结合,通过条件边实现是否调用工具的逻辑,解决LLM在数学方面的困难,并根据不同情境作出不同的响应。

总结

Qwen2作为新一代的开源大语言模型,凭借其多尺寸选择、多语言支持、卓越的性能表现、长上下文支持和丰富的功能支持,为开发者和研究者提供了强大的AI工具。无论是模型推理、部署还是微调,Qwen2都提供了多种灵活的解决方案。随着Qwen2的不断发展和完善,相信它将在自然语言处理领域发挥越来越重要的作用。