跳到正文
原文
通义千问 Qwen:Blog·· 2024-02-04精选AI 评分66

通义千问发布开源模型 Qwen1.5,全系支持 32K 上下文

Introducing Qwen1.5

文章要点
  • 1通义千问开源 Qwen1.5 系列 base 与 chat 模型,尺寸覆盖 0.5B 到 110B,另含一个 MoE 模型
  • 2官方评测称 Qwen1.5-72B 在各基准全面超过 Llama2-70B,72B-Chat 的 MT-Bench 得分 8.61
  • 3全系模型统一支持最长 32768 tokens 上下文,官方称 72B-Chat 在 L-Eval 上明显超过 GPT3.5-turbo-16k
  • 4代码已合并进 Hugging Face transformers,4.37.0 以上版本无需 trust_remote_code 即可加载
决策要点

Qwen1.5 把模型能力升级和接入成本下降打包在一起,官方将适配工作直接做进主流框架,换取开发者的迁移便利。

  • 影响:全尺寸开源加 Int4、Int8、AWQ、GGUF 量化版本,私有化部署和多尺寸选型的空间变大;小模型在 RAG 与长文本任务上的官方成绩可观,本地部署成本有下探空间;官方数据仍明显落后 GPT-4-Turbo,高端场景需要留出替代预案。
  • 参考:可考虑先拿业务测试题对比 Qwen1.5-72B-chat 与现有模型的表现;值得测算 7B 到 14B 量化版本在私有环境跑 RAG 的成本;接入前先核对 transformers 和 vLLM 等框架的版本要求。
  • 依据:各项性能与得分均出自 Qwen 团队官方博客评测,官方口径,暂无独立验证;涉及 MMLU、MT-Bench、L-Eval、RGB、T-Eval 等基准。
正文 · AI 翻译

GITHUB HUGGING FACE MODELSCOPE 演示 DISCORD

简介

最近几个月,我们一直专注于打造一个“好”的模型,同时优化开发者体验。随着我们向 Qwen 系列的下一代 Qwen1.5 迈进,本次更新恰好在农历新年前到来。

借助 Qwen1.5,我们以六个尺寸开源了基础与聊天模型:0.5B、1.8B、4B、7B、14B、32B、72B 和 110B,此外还有一个 MoE 模型(更多信息请参阅博客)。按照惯例,我们还提供了量化模型,包括 Int4 和 Int8 GPTQ 模型,以及 AWQ 和 GGUF 量化模型。为了提升开发者体验,我们已将 Qwen1.5 的代码合并进 Hugging Face transformers,现在只需 transformers>=4.37.0 即可使用,无需 trust_remote_code。

我们与多个框架展开了合作:部署方面的 vLLM 和 SGLang,量化方面的 AutoAWQ 和 AutoGPTQ,微调方面的 Axolotl 和 LLaMA-Factory,以及用于本地 LLM 推理的 llama.cpp,它们现在均已支持 Qwen1.5。Qwen1.5 系列已在 Ollama 和 LMStudio 等平台上架。此外,API 服务不仅提供于 DashScope,还提供于 together.ai,可在全球范围内访问。访问这里即可开始使用,我们推荐尝试 Qwen1.5-72B-chat。

本次发布对聊天模型与人类偏好的对齐带来了显著改进,并增强了多语言能力。所有模型现在均统一支持最长 32768 tokens 的上下文长度。基础语言模型的质量也有小幅提升,这可能有助于您的微调工作。这一步是我们朝着打造真正“好”的模型这一目标迈出的一小步。

性能

为了帮助大家更好地了解 Qwen1.5 的性能,我们对基础模型和聊天模型在不同能力上进行了全面评估,包括语言理解、编程、推理等基础能力,以及多语言能力、人类偏好、智能体、检索增强生成(RAG)等。

基础能力

为了评估语言模型的基础能力,我们在传统基准上进行了评测,包括 MMLU(5-shot)、C-Eval、Humaneval、GS8K、BBH 等。

模型MMLUC-EvalGSM8KMATHHumanEvalMBPPBBHCMMLU
GPT-486.469.992.045.867.061.886.771.0
Llama2-7B46.832.516.73.312.820.838.231.8
Llama2-13B55.041.429.65.018.930.345.638.4
Llama2-34B62.6-42.26.222.633.044.1-
Llama2-70B69.850.154.410.623.737.758.453.6
Mistral-7B64.147.447.511.327.438.656.744.7
Mixtral-8x7B70.6-74.428.440.260.7--
Qwen1.5-7B61.074.162.520.336.037.440.273.1
Qwen1.5-14B67.678.770.129.237.844.053.777.6
Qwen1.5-32B73.483.577.436.137.249.466.882.3
Qwen1.5-72B77.584.179.534.141.553.465.583.5

在每个模型尺寸上,Qwen1.5 都在各项评估基准中展现出强劲的性能。其中,Qwen1.5-72B 在所有基准上都优于 Llama2-70B,展现了其在语言理解、推理和数学方面的卓越能力。

鉴于近期小型语言模型备受关注,我们将参数量小于 70 亿的 Qwen1.5 与社区中最出色的小规模模型进行了比较。结果如下所示:

模型非嵌入参数量MMLUC-EvalGSM8KMATHHumanEvalMBPPBBHCMMLU
Tinyllama-1.1B1.1B24.325.02.30.76.719.928.824.0
Gemini-Nano-3B---22.8--27.242.4-
StableLM-Zephyr-3B2.7B45.930.352.512.535.431.937.730.9
Phi-22.5B52.723.457.23.547.655.043.424.2
MiniCPM-2B2.4B53.551.153.810.250.047.336.951.1
Gemma-2B2.0B42.3-17.711.822.029.235.2-
Qwen1.5-0.5B0.3B39.250.522.03.112.26.818.346.6
Qwen1.5-1.8B1.2B46.859.738.410.120.118.024.257.8
Qwen1.5-4B3.1B56.167.657.010.025.629.232.566.7
Qwen1.5-MoE-A2.7B2.0B62.579.261.521.934.236.639.179.2

我们可以自信地断言,参数量在70亿以下的Qwen1.5基础模型与社区领先的小规模模型相比极具竞争力。未来,我们将继续提升小模型的质量,并探索如何有效地将大型模型固有的先进能力迁移到小模型中。

与人类偏好对齐

对齐旨在增强LLMs遵循指令的能力,帮助其提供与人类偏好紧密相符的回复。我们认识到将人类偏好融入学习过程的重要性,因而在最新Qwen系列的对齐中有效采用了直接策略优化(DPO)和近端策略优化(PPO)等技术。

然而,评估这类聊天模型的质量是一项重大挑战。 诚然,全面的人工评估是最优方法,但它在可扩展性和可复现性方面面临重大挑战。 因此,我们首先在两个广泛使用的基准上评估我们的模型,并利用先进的LLM作为评判:MT-Bench和Alpaca-Eval。结果如下所示:

我们注意到MT-Bench上的分数存在不可忽视的方差。因此,我们在结果中进行了三次不同随机种子的运行,并报告带有标准差的平均分。

模型MT-BenchAlpacaEval 2.0
平均分胜率长度
Qwen1.5-72B-Chat8.610.04 (8.67/8.61/8.56)27.181.301600
Qwen1.5-14B-Chat7.910.11 (7.99/7.99/7.77)19.71.121608
Qwen1.5-7B-Chat7.600.05 (7.58/7.55/7.66)13.201.431606

尽管仍显著落后于GPT-4-Turbo,但最大的开源Qwen1.5模型Qwen1.5-72B-Chat在MT-Bench和Alpaca-Eval v2上均展现出卓越的性能,超越了Claude-2.1、GPT-3.5-Turbo-0613、Mixtral-8x7b-instruct和TULU 2 DPO 70B,与Mistral Medium不相上下。

此外,尽管LLM评判的打分似乎与回复长度存在相关性,但我们的观察表明,我们的模型并不会通过生成长回复来利用LLM评判的偏差。Qwen1.5-Chat在AlpacaEval 2.0上的平均长度仅为1618,与GPT-4的长度相当,且短于GPT-4-Turbo。此外,我们在网页服务和应用上的实验也表明,用户更喜欢新聊天模型的大多数回复。

基础模型的多语言理解能力

我们精心挑选了来自欧洲、东亚和东南亚的12种多样化语言,以全面评估我们基础模型的多语言能力。为此,我们从社区的开源仓库中整理了测试集,涵盖四个不同的维度:考试、理解、翻译和数学。下表提供了每个测试集的详细信息,包括评估设置、指标及其涵盖的语言:

数据集类别方法/指标语言
MMLU-multi考试5-shot/Accar, es, fr, pt, de, it, ru, ja, ko, id
M3Exams考试5-shot/Accpt, it, vi, th
BELEBELE理解5-shot/Accar, es, fr, pt, de, it, ru, ja, ko, vi, th, id
XWinograd理解5-shot/Accfr, pt, ru, ja
XCOPA理解5-shot/Accvi, id, th
PAWS-X理解5-shot/Acces, fr, de, ja, ko
XStoryCloze理解0-shot/Accar, es, ru, id
Flores(zh/en↔xx)翻译5-shot/BLEUar, es, fr, pt, de, it, ru, ja, ko, vi, th, id
MGSM数学8-shot/Acces, fr, ru, de, ja, th

详细结果如下所示:

模型考试理解数学翻译
GPT-3.552.2471.8432.8031.85
GPT-471.6483.8280.1334.37
Llama2-7B34.0350.139.4022.19
Llama2-13B39.5557.2616.8025.89
Llama2-70B55.8873.1940.2031.56
Mistral-7B47.1263.3026.3323.33
Mixtral-8x7B56.0870.7045.0029.78
Qwen1.5-0.5B26.9844.083.139.17
Qwen1.5-1.8B33.5748.376.4716.19
Qwen1.5-4B41.4359.7621.3323.34
Qwen1.5-MoE-A2.7B44.5461.0830.2027.35
Qwen1.5-7B47.7067.6337.2728.36
Qwen1.5-14B55.7274.1049.9331.69
Qwen1.5-72B66.3578.1661.6735.57

Qwen1.5 的基础模型展现了令人印象深刻的多语言能力,这一点从它在 12 种不同语言上的表现可见一斑。在涵盖考试、理解、翻译和数学等多个维度的评测中,Qwen1.5 始终交出了强劲的成绩。从阿拉伯语、西班牙语、法语,到日语、韩语和泰语,Qwen1.5 展现了在不同语言环境下理解和生成高质量内容的能力。 我们将 Qwen1.5-72B-Chat 与 GPT-3.5 进行了对比,结果如下所示:

这些结果表明 Qwen1.5 对话模型具有强大的多语言能力,可以支撑翻译、语言理解和多语言对话等下游应用。同时,我们相信多语言能力的提升也能带动整体能力的提升。

长上下文支持

随着对长文本理解需求的不断增长,我们扩展了所有模型的能力,使其支持最长 32K tokens 的上下文。我们在 L-Eval 基准上评估了 Qwen1.5 模型的表现,该基准用于衡量模型基于长上下文生成回复的能力。结果如下所示:

模型CourseraGSMQuALITYTOEFLSFiction平均
GPT3.5-turbo-16k63.5184.0061.3878.4364.8470.43
Claude1.3-100k60.0388.0073.7683.6472.6575.62
GPT4-32k75.5896.0082.1784.3874.9982.62
Qwen-72B-Chat58.1376.0077.2286.2469.5373.42
Qwen1.5-0.5B-Chat30.816.0034.1640.5249.2232.14
Qwen1.5-1.8B-Chat39.2437.0042.0855.7644.5343.72
Qwen1.5-4B-Chat54.9447.0057.9269.1556.2557.05
Qwen1.5-7B-Chat59.7460.0064.3679.1862.5065.16
Qwen1.5-14B-Chat69.0479.0074.7583.6475.7876.44
Qwen1.5-72B-Chat71.9582.0077.7285.5073.4478.12

在性能方面,即使是像 Qwen1.5-7B-Chat 这样的小模型,在 5 项任务中的 4 项上也展现出与 GPT-3.5 相当的竞争力。我们最好的模型 Qwen1.5-72B-Chat 显著超越 GPT3.5-turbo-16k,仅略微落后于 GPT4-32k。这些结果凸显了我们在 32K tokens 内的出色表现,但并不意味着我们的模型仅支持 32K tokens。你可以将 config.json 中的 max_position_embedding 和 sliding_window 修改为更大的值,看看模型性能对你的任务是否仍然令人满意。

与外部系统连接的能力

大语言模型(LLM)之所以广受欢迎,部分原因在于它们能够整合外部知识和工具。检索增强生成(RAG)日益受到关注,因为它能缓解幻觉、实时数据不足和隐私信息处理等 LLM 常见问题。此外,强大的 LLM 通常擅长通过函数调用使用 API 和工具,使其成为担任 AI 智能体的理想选择。

我们首先在 RGB(一个 RAG 基准)上评估了 Qwen1.5-Chat 的表现,我们并未针对该基准进行任何专门优化:

面向检索增强生成的 RGB 英文基准
模型噪声 0.8(准确率↑)拒答 1.0(准确率↑)整合 0.4(准确率↑)反事实(准确率↑)
GPT4-Turbo85.6747.3360.0090.00
GPT3.5-Turbo74.3327.6747.0021.00
Llama2-70B-Chat82.0031.0056.0015.00
Mistral-7B-Instruct-v0.282.0031.0056.0015.00
Mixtral-8x7B-Instruct-v0.182.6737.0067.008.00
Qwen1.5-7B-Chat77.6725.0052.009.00
Qwen1.5-14B-Chat80.6724.0060.008.00
Qwen1.5-72B-Chat81.6748.6761.0028.00
面向检索增强生成的 RGB 中文基准
模型噪声 0.8(准确率↑)拒答 1.0(准确率↑)整合 0.4(准确率↑)反事实(准确率↑)
GPT4-Turbo75.0038.6763.0090.00
GPT3.5-Turbo69.0013.0055.0025.00
Llama2-70B-Chat28.0017.0032.008.00
Mistral-7B-Instruct-v0.254.6728.6737.004.00
Mixtral-8x7B-Instruct-v0.127.334.0024.004.00
Qwen1.5-7B-Chat71.0010.3354.0020.00
Qwen1.5-14B-Chat75.0016.6755.0022.00
Qwen1.5-72B-Chat76.0051.0066.0044.00

随后,我们在 T-Eval 基准上测试了 Qwen 作为通用智能体的能力。所有 Qwen 模型均未针对该基准进行任何专门优化:

T-Eval 英文智能体性能
模型总体InstructPlanReasonRetrieveUnderstandReview
GPT4-Turbo86.496.387.865.388.985.894.5
Llama-2-70B-Chat58.5977.8063.7539.0751.3550.3469.20
Mistral-7B-Instruct-v0.246.6863.5760.8832.5917.5838.0867.35
Mixtral-8x7B-Instruct-v0.162.1542.3946.4860.3576.6973.7073.31
Qwen1.5-7B-Chat59.6771.1262.9537.6061.1753.7571.46
Qwen1.5-14B-Chat71.7786.1673.0949.5172.0766.0383.78
Qwen1.5-72B-Chat76.6980.9683.1256.8980.1776.6882.34
智能体在 T-Eval 中文上的表现
模型总体指令规划推理检索理解审查
GPT4-Turbo85.997.687.068.489.286.886.0
Llama-2-70B-Chat51.1553.7856.6534.2748.2450.4963.45
Mistral-7B-Instruct-v0.246.2649.6461.8236.1720.2647.2562.42
Mixtral-8x7B-Instruct-v0.162.7726.3860.7962.0276.6077.7473.10
Qwen1.5-7B-Chat53.1560.5662.3142.0755.2855.7642.92
Qwen1.5-14B-Chat64.8584.2564.7754.6872.3568.8844.15
Qwen1.5-72B-Chat72.8897.5080.8358.1176.1471.9452.77

为了测试工具使用(也称为函数调用)的能力,我们遵循以往的做法,使用我们开源的评测基准来评估模型恰当地选择和使用工具的能力:

工具使用基准
模型工具选择 (Acc.↑)工具输入 (Rouge-L↑)误报 (Acc.↑)
GPT-498.095.376.1
GPT-3.574.580.719.4
Llama-2-70B-Chat88.5470.360.37
Mistral-7B-Instruct-v0.294.7982.816.34
Mixtral-8x7B-Instruct-v0.199.3194.4631.34
Qwen1.5-7B-Chat95.8389.4892.54
Qwen1.5-14B-Chat93.0688.7492.91
Qwen1.5-72B-Chat95.1491.1498.51

最后,鉴于 Python 代码解释器已成为先进大语言模型日益强大的工具,我们还在此前开源的基准上评估了我们的模型使用这一工具的能力:

代码解释器基准
模型代码执行结果准确率 (%)代码可执行率 (%)
数学↑可视化-困难↑可视化-简单↑通用↑
GPT-482.866.760.882.8
GPT-3.547.333.355.774.1
Mistral-7B-Instruct-v0.225.519.144.362.1
Mixtral-8x7B-Instruct-v0.147.833.354.460.3
Qwen1.5-7B-Chat54.035.736.765.5
Qwen1.5-14B-Chat62.146.448.170.6
Qwen1.5-72B-Chat73.152.350.687.9

更大的 Qwen1.5-Chat 模型总体上优于较小的模型,在工具使用性能上接近 GPT-4。然而,在数学问题求解和可视化等代码解释器任务中,即使是最大的 Qwen1.5-72B-Chat 模型,由于编码能力的限制,也明显落后于 GPT-4。我们计划在未来的版本中,在预训练和对齐阶段增强所有 Qwen 模型的编码能力。

使用 Qwen1.5 进行开发

Qwen1.5 最大的变化是与 Hugging Face transformers 的集成。自 4.37.0 版本起,无需我们的自定义代码即可使用 Qwen1.5,这意味着你可以像下面这样加载模型:

from transformers import AutoModelForCausalLM
# This is what we previously used
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True)
# This is what you can use now
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-7B-Chat", device_map="auto")

Qwen1.5 的对话用法与之前的版本有所不同。你可以使用以下代码与 Qwen1.5 对话:

from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen1.5-14B-Chat-AWQ",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-14B-Chat-AWQ")

prompt = "Give me a short introduction to large language model."
messages = [
    {"role": "system", "content": "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(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]

对于对话模型,我们不再使用特定的 model.chat() 方法,而是使用 model.generate() 配合以 tokenizer_config.json 编写的对话模板,这样我们便可以使用 tokenizer.apply_chat_template() 来生成输入,并使用 eos_token 来控制何时停止生成。

我们还提供了 AWQ 模型和 GPTQ 模型(包括 Int4 和 Int8 模型),方便你在低资源或部署场景中使用 Qwen1.5。由于 Huggingface transformers 支持 AWQ 和 GPTQ,你只需使用相应的模型名称,即可按照上述相同方式使用它们。

此外,我们已将我们的代码集成到流行的推理框架中,方便你轻松部署模型。现在 vLLM>=0.3.0 和 SGLang>=0.1.11 已官方支持 Qwen1.5。请查阅它们的官方 GitHub 仓库和文档以了解详细用法。这里我们演示一个示例,展示如何使用 vLLM 为我们的模型构建兼容 OpenAI-API 的接口:

python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen1.5-7B-Chat
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
    "model": "Qwen/Qwen1.5-7B-Chat",
    "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Tell me something about large language models."}
    ]
    }'

对于希望在本地运行大语言模型的用户,llama.cpp 也提供了对 Qwen1.5 的支持,并且我们在 HF 模型中心官方提供了 GGUF 格式的量化模型。你可以使用以下代码在 llama.cpp 中运行 Qwen1.5:

./main -m qwen1.5-7b-chat-q2_k.gguf -n 512 --color -i -cml -f prompts/chat-with-qwen.txt

此外,你可以将 GGUF 文件与 Ollama 一起使用。得益于 Ollama 的支持,你现在可以直接使用一行命令:

ollama run qwen

或者,你可以使用 GGUF 文件配合 llamafile,用单个文件来运行我们的模型。

要在本地搭建网页演示,我们建议你使用 Text generation web UI,它非常易于使用。

对于希望为自己训练更好或更适合的模型(例如后训练)的高级开发者来说,Qwen1.5 已得到 Hugging face trainer 和 Peft 的支持。此外,还有一些易用的框架,同时支持有监督微调(SFT)和对齐(PPO、DPO 等)。目前,LLaMA-Factory 和 Axolotl 均已支持 Qwen1.5 的训练。我们建议你前往它们的官方 github 仓库和文档,了解更多高级用法。

如果你想将 Qwen1.5 用于下游应用,例如 RAG、工具使用、agent,你现在可以构建兼容 OpenAI-API 的 API,或运行本地模型来对接知名框架,例如 LlamaIndex、LangChain、CrewAI。

总的来说,由于我们重视你的开发体验,我们不仅尽力为社区提供优秀的模型,还努力让一切对大家而言都更加简单。我们希望你能享受使用 Qwen1.5 的过程,并希望它能在你的研究或应用任务中助你一臂之力。

结论

我们很高兴地介绍 Qwen1.5,即 Qwen 系列的下一个版本。在此次发布中,我们开源了 6 种尺寸的 base 和 chat 模型,包括 0.5B、1.8B、4B、7B、14B 和 72B,并且还提供了量化模型。我们已将 Qwen1.5 的代码合并到 Hugging face transformers 中,你可以直接通过 transformers>=4.37.0 使用而无需 trust_remote_code。此外,我们还让 vLLM、SGLang、AutoGPTQ 等框架支持了 Qwen1.5。我们相信,从现在开始,使用我们的模型会容易得多。我们相信,这次发布虽然是模型质量上的一小步,却是开发者体验上的一大步。希望你喜欢它并享受使用它的过程。欢迎加入我们的 Discord 或 WeChat,与我们分享你的经验、评论或任何你想聊的内容。我们期待收到你的消息。

引用

@misc{qwen1.5,
    title = {Introducing Qwen1.5},
    url = {https://qwenlm.github.io/blog/qwen1.5/},
    author = {Qwen Team},
    month = {February},
    year = {2024}
}

来源:通义千问 Qwen:Blog · qwenlm.github.io