通义千问

介绍

通义千问 (Qwen) 是由阿里云研发的大语言模型系列。该系列积极拥抱开源,陆续发布了多个不同参数规模、不同功能的模型,旨在为开发者和研究者提供强大的AI能力。特别是 Qwen1.5 和最新的 Qwen2.5 系列,在性能和易用性上有了显著提升。

主要特点

  1. 多模态交互: 支持文本、图像、音频、视频等多种模态输入,输出文本和语音。
  2. 长文本处理: 支持超长上下文(128K tokens),并能稳定生成长文本(8K tokens)。
  3. 多语言支持: 支持超过27/29种语言,包括中英、日韩等。
  4. 指令遵循: 支持角色扮演、多轮对话、代码生成等指令。
  5. 长文本处理: 支持超长上下文(128K tokens),并能稳定生成长文本(8K tokens)。
  6. 多模态交互: 支持文本、图像、音频、视频等多种模态输入,输出文本和语音。

通义千问 (Qwen) 开源大模型研究使用报告

1. 模型概览与参数

通义千问(Qwen)是由阿里云研发的大语言模型系列。该系列积极拥抱开源,陆续发布了多个不同参数规模、不同功能的模型,旨在为开发者和研究者提供强大的AI能力。特别是 Qwen1.5 和最新的 Qwen2.5 系列,在性能和易用性上有了显著提升。

主要开源模型系列及参数规模:

  • Qwen 早期系列 (已停止主要更新):
    • Qwen-1.8B, Qwen-7B, Qwen-14B, Qwen-72B (基础模型和对话模型)
  • Qwen1.5 系列 (2024年2月发布):
    • 参数规模:0.5B, 1.8B, 4B, 7B, 14B, 32B, 72B, 110B
    • 包含基础模型(Base)和对话/指令微调模型(Chat/Instruct)
    • 还包含一个MoE(Mixture-of-Experts)模型:Qwen1.5-MoE-A2.7B
  • Qwen2 系列 (2024年6月发布):
    • 参数规模:0.5B, 1.5B, 7B, 14B, 72B
    • 包含基础模型(Base)和指令微调模型(Instruct)
    • 特别提升了代码和数学能力
  • Qwen2.5 系列 (2024年9月发布):
    • 参数规模:0.5B, 1.5B, 3B, 7B, 14B, 32B, 72B
    • 包含基础模型(Base)和指令微调模型(Instruct)
    • 进一步提升了知识、代码、数学、指令遵循、长文本处理、结构化数据理解与生成(尤其是JSON)等能力
    • 还推出了专门的视觉语言模型(Qwen2.5-VL)和代码模型(Qwen2.5-Coder)
    • 推出了首个端到端全模态模型 Qwen2.5-Omni (7B),支持文本、图像、音频、视频输入,并能生成文本和语音输出

模型参数概览表:

模型系列参数规模 (Billion)主要特点
Qwen1.50.5, 1.8, 4, 7, 14, 32, 72, 110, MoE-A2.7B广泛的参数选择,支持长上下文(32K),多语言能力强
Qwen20.5, 1.5, 7, 14, 72提升代码和数学能力,支持更长上下文(高达128K),多语言支持扩展至27+种
Qwen2.50.5, 1.5, 3, 7, 14, 32, 72全面性能提升,尤其在知识、代码、数学、指令遵循、长文本(128K上下文,生成8K)、结构化输出方面,支持29+种语言
Qwen2.5-VL32B, 72B强大的视觉语言理解能力,特别是在OCR(光学字符识别)和文档JSON提取方面表现优异
Qwen2.5-Coder7B, 32B专注于代码任务,性能优越,可作为个人编码助手
Qwen2.5-Omni7B端到端全模态,支持多种输入(文图音视),输出文本和语音,可识别情绪,采用Thinker-Talker架构
Qwen2.5-MaxMoE (参数量未明确公布,但规模巨大)闭源API模型,大规模MoE,性能对标顶尖闭源模型,在Arena-Hard, LiveBench, LiveCodeBench等基准测试中表现优异

2. 模型性能分析

通义千问系列模型在多个权威基准测试中(如 MMLU, C-Eval, GSM8K, MATH, HumanEval, MBPP, BBH, LiveCodeBench, Arena-Hard 等)表现出色,通常优于同等规模的其他开源模型(如 Llama 2/3)。

  • 通用能力: Qwen 模型在中英文理解、生成、推理方面表现强大。Qwen-72B 在早期版本中就已在多项任务上超越 LLaMA2-70B,甚至在部分任务上优于 GPT-3.5。最新的 Qwen2.5 系列更是将性能推向新高,在知识(MMLU)、代码(HumanEval)和数学(MATH)等领域取得了显著进步。
  • 长上下文: Qwen1.5 支持 32K 上下文长度。Qwen2 和 Qwen2.5 系列则进一步将上下文窗口扩展到高达 128K tokens,并能稳定生成长达 8K tokens 的文本,满足长文档理解与生成的需求。
  • 多语言能力: Qwen 模型从一开始就注重多语言支持(以中英文为主),Qwen2 和 Qwen2.5 系列扩展支持超过27/29种语言。
  • 代码与数学: Qwen2 和 Qwen2.5 系列特别强化了代码生成和数学推理能力。Qwen2.5-Coder 系列更是专注于代码任务,即使是 7B 模型也能在多种编程任务上超越许多更大的通用模型。
  • 视觉与多模态: Qwen-VL (视觉语言模型) 在图像理解方面表现优异。最新的 Qwen2.5-VL 在 OCR 和复杂文档信息提取(如生成 JSON)任务上表现突出,其 72B 和 32B 版本在基准测试中准确率可达 75% 左右,媲美甚至超越 GPT-4o 和专门的 OCR 模型。Qwen2.5-Omni 作为端到端全模态模型,能够同时处理和理解多种模态输入,并生成文本和语音,甚至能识别情绪。
  • 指令遵循与对齐: Chat/Instruct 模型通过 SFT (Supervised Fine-tuning) 和 RLHF/DPO (Reinforcement Learning from Human Feedback / Direct Preference Optimization) 等技术进行了对齐,能够更好地理解和遵循用户指令,生成更符合人类偏好的回答。Qwen2.5 系列在这方面有显著改进,对多样化的系统提示(System Prompt)更加鲁棒,有利于实现角色扮演等功能。

3. 模型使用方法

3.1 推理 (Inference)

最常用的方式是通过 Hugging Face 的 transformers 库进行推理。

基本步骤:

  1. 安装库: pip install transformers torch accelerate (根据需要可能还需安装 sentencepiece, transformers_stream_generator, tiktoken 等)
  2. 加载模型和 Tokenizer: 使用 AutoTokenizer.from_pretrained()AutoModelForCausalLM.from_pretrained()
  3. 准备输入: 对于对话模型(Instruct/Chat),需要按照特定的聊天模板(Chat Template)格式化输入。可以使用 tokenizer.apply_chat_template()
  4. 生成文本: 使用 model.generate() 方法。可以传入 max_new_tokens, temperature, top_p 等参数控制生成过程。
  5. 解码输出: 使用 tokenizer.decode()tokenizer.batch_decode() 将生成的 token IDs 转换回文本。

示例代码 (Qwen2.5-7B-Instruct):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# 建议指定设备,例如 "cuda" 或 "cpu"
device = "cuda" if torch.cuda.is_available() else "cpu"

# 模型 ID (可以在 Hugging Face Hub 找到)
model_name = "Qwen/Qwen2.5-7B-Instruct"

# 加载 Tokenizer 和模型
# torch_dtype="auto" 会自动选择合适的精度 (如 bfloat16)
# device_map="auto" 会自动将模型分片到可用 GPU 或 CPU
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)

print(f"Model loaded on {model.device}")

# 准备对话输入
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 # 添加表示模型开始生成的提示
)

# 将文本 Tokenize 并移到模型所在设备
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

# 生成回复
# 使用 **model_inputs 解包字典
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512, # 最大生成 token 数
# temperature=0.7, # 控制随机性
# top_p=0.8 # 控制核心采样
)

# 解码生成的 token IDs,跳过特殊 token 和输入部分的 token
# 注意:需要去除输入部分的 tokens
input_ids_len = model_inputs.input_ids.shape[1]
generated_ids = [
output_ids[input_ids_len:] for output_ids in generated_ids
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print("模型回复:")
print(response)

# 对于流式输出 (Streaming)
# 需要安装 pip install transformers_stream_generator
# from transformers import TextStreamer
# streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
# generated_ids = model.generate(
# **model_inputs,
# max_new_tokens=512,
# streamer=streamer
# )

3.2 微调 (Fine-tuning)

微调是指在预训练模型的基础上,使用特定的数据集进一步训练模型,使其适应特定任务或领域。

常用方法:

  • 全参数微调 (Full Fine-tuning): 训练模型的所有参数。效果最好,但计算资源需求巨大。
  • 参数高效微调 (Parameter-Efficient Fine-tuning, PEFT): 只训练模型参数的一小部分,显著降低资源需求。
    • LoRA (Low-Rank Adaptation): 在模型的某些层(通常是 Attention 层)注入低秩可训练矩阵,冻结原始参数。
    • QLoRA: 结合 LoRA 和模型量化(如 4-bit NormalFloat),进一步降低显存占用。这是目前微调 Qwen 等大模型最常用的方法。

常用工具:

  • Hugging Face transformers: 提供 Trainer 类用于简化训练流程。
  • PEFT 库: pip install peft,提供 LoRA, QLoRA 等实现。
  • bitsandbytes: pip install bitsandbytes,用于 QLoRA 的量化。
  • 数据集库 datasets: pip install datasets,方便加载和处理数据。
  • 微调框架:
    • LLaMA-Factory / Llama-Factory: 提供易用的界面和脚本,支持多种模型和微调方法。
    • Axolotl: 另一个流行的微调框架。
    • Swift (阿里云): 阿里云提供的微调工具。
    • Unsloth: 优化库,声称可以加速 LoRA 微调并减少显存。

基本流程 (以 QLoRA 为例):

  1. 准备数据集: 通常是 JSONL 格式,每行包含一个对话样本(如 {"messages": [{"role": "system", ...}, {"role": "user", ...}, {"role": "assistant", ...}]})。
  2. 安装依赖: pip install transformers datasets peft bitsandbytes accelerate torch
  3. 编写/配置训练脚本:
    • 加载基础模型和 Tokenizer (使用 bitsandbytes 配置量化,如 load_in_4bit=True)。
    • 使用 prepare_model_for_kbit_training 预处理模型。
    • 定义 LoraConfig (指定 r, lora_alpha, target_modules, task_type 等)。
    • 使用 get_peft_model 将 LoRA 适配器应用到模型上。
    • 加载和预处理数据集。
    • 配置 TrainingArguments (学习率、批大小、训练步数、输出目录等)。
    • 实例化 Trainer 并调用 train() 方法开始训练。
  4. 保存适配器: 训练完成后,保存 LoRA 适配器权重。
  5. 合并模型 (可选): 可以将 LoRA 适配器权重合并回基础模型,得到一个完整的微调后模型。

(具体代码示例较为复杂,建议参考官方文档或 LLaMA-Factory 等框架提供的示例)

4. 推荐工具与配置

4.1 核心库

  • Hugging Face Transformers: pip install transformers - 加载模型、Tokenizer、进行推理和训练的基础库。
  • PyTorch: pip install torch - Qwen 主要基于 PyTorch 开发和测试。
  • Accelerate: pip install accelerate - 简化 PyTorch 分布式训练和混合精度训练的配置。

4.2 微调库

  • PEFT: pip install peft - 实现 LoRA, QLoRA 等参数高效微调方法。
  • bitsandbytes: pip install bitsandbytes - 支持模型量化,QLoRA 必需。
  • Datasets: pip install datasets - 数据集加载和处理。
  • TRL (Transformer Reinforcement Learning): pip install trl - 如果需要进行 DPO 等 RLHF 相关的微调。

4.3 高效推理/部署框架

当需要将模型部署到生产环境或进行大规模推理时,推荐使用优化过的推理框架:

  • vLLM: pip install vllm - 性能优异的 LLM 推理和服务框架,支持 PagedAttention、连续批处理等优化技术,显著提高吞吐量和降低延迟。Qwen 官方推荐使用,支持 Qwen2.5 的 Tool Use 功能和结构化输出 (JSON)。
  • TGI (Text Generation Inference by Hugging Face): Docker 部署为主,专注于文本生成推理,支持连续批处理和量化。
  • SGLang: pip install sglang - 另一个高效的 LLM 推理和服务引擎。
  • Ollama: pip install ollama / 下载应用 - 易于在本地运行 LLM 的工具,支持 Qwen 模型,提供命令行和 OpenAI 兼容 API。
  • TensorRT-LLM (NVIDIA): 针对 NVIDIA GPU 的深度优化推理库,性能极高,但配置相对复杂。
  • llama.cpp: pip install llama-cpp-python / 编译源码 - C++ 实现,可在 CPU 和 GPU 上高效运行,支持 GGUF 等量化格式。
  • Xinference, SkyPilot, OpenLLM, MLX (Apple Silicon), Jan: 其他部署或本地运行工具。

4.4 环境配置建议

  • Python: 推荐 Python 3.10 或更高版本。
  • CUDA: 根据你的 NVIDIA GPU 驱动和 PyTorch 版本选择合适的 CUDA Toolkit 版本 (通常 11.8 或 12.x)。
  • 显卡 (GPU) 和显存 (VRAM):
    • 推理:
      • 1.8B/3B 模型: 约 4-8GB VRAM (Int8/Int4 量化后更低)
      • 7B 模型: 约 16GB+ VRAM (BF16/FP16), 8GB+ (Int8), 5GB+ (Int4)
      • 14B 模型: 约 30GB+ VRAM (BF16/FP16), 15GB+ (Int8), 10GB+ (Int4)
      • 32B 模型: 约 70GB+ VRAM (BF16/FP16), 需要多卡或 A100/H100 (40GB/80GB)
      • 72B 模型: 约 150GB+ VRAM (BF16/FP16), 需要多张 A100/H100 (80GB)
    • 微调 (QLoRA): 显存需求会比 BF16 推理低很多,但仍需注意。
      • 7B 模型: 约 12GB+ VRAM
      • 14B 模型: 约 20GB+ VRAM
      • 72B 模型: 约 60GB+ VRAM (官方数据)
  • 操作系统: Linux (推荐 Ubuntu) 是最常用的环境,Windows 和 macOS 也可以 (部分库可能有兼容性问题)。
  • 安装命令示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 创建虚拟环境 (推荐)
    python -m venv qwen_env
    source qwen_env/bin/activate # Linux/macOS
    # qwen_env\Scripts\activate # Windows

    # 安装核心库 (根据需要选择 CUDA 版本)
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 示例: CUDA 11.8
    pip install transformers accelerate sentencepiece tiktoken

    # 安装微调相关 (如果需要)
    pip install datasets peft bitsandbytes # bitsandbytes 在 Windows 上可能需要特殊安装步骤

    # 安装推理框架 (如果需要)
    pip install vllm
    # pip install llama-cpp-python # 可能需要编译环境

5. 数据来源