模型简介
模型特点
模型能力
使用案例
🚀 Qwen2.5-14B-Instruct-1M GGUF模型
Qwen2.5-14B-Instruct-1M GGUF模型是最新的文本生成模型,采用了先进的超低比特量化方法,在保持高精度的同时,极大地提高了内存使用效率。该模型适用于多种场景,包括聊天、网络监控等,能为用户提供高效、准确的服务。
🚀 快速开始
代码示例
以下是使用apply_chat_template
加载分词器和模型并生成内容的代码片段:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-14B-Instruct-1M"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "Give me a short introduction to large language model."
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=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]
处理超长文本
为了提高长序列的处理准确性和效率,我们基于vLLM开发了一个先进的推理框架,结合了稀疏注意力和长度外推技术。这种方法显著提高了模型对超过256K标记的序列的生成性能,并在长达100万标记的序列上实现了3到7倍的加速。
以下是使用我们的框架部署Qwen2.5-1M模型的分步说明:
1. 系统准备
为了获得最佳性能,建议使用支持优化内核的Ampere或Hopper架构的GPU。 确保您的系统满足以下要求:
- CUDA版本:12.1或12.3
- Python版本:>=3.9且<=3.12
显存要求:
- 处理100万标记的序列时:
- Qwen2.5-7B-Instruct-1M:至少120GB显存(跨GPU总和)。
- Qwen2.5-14B-Instruct-1M:至少320GB显存(跨GPU总和)。
如果您的GPU显存不足,仍然可以使用Qwen2.5-1M处理较短的任务。
2. 安装依赖
目前,您需要从我们的自定义分支克隆vLLM仓库并手动安装。我们正在努力将我们的分支合并到vLLM主项目中。
git clone -b dev/dual-chunk-attn git@github.com:QwenLM/vllm.git
cd vllm
pip install -e . -v
3. 启动vLLM
vLLM支持离线推理或启动一个类似OpenAI的服务器。
离线推理示例
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
# 初始化分词器
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-14B-Instruct-1M")
# 传递Qwen2.5-14B-Instruct的默认解码超参数
# max_tokens是生成的最大长度。
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=512)
# 输入模型名称或路径。有关参数解释,请参阅类似OpenAI服务器示例之后的内容。
llm = LLM(model="Qwen/Qwen2.5-14B-Instruct-1M",
tensor_parallel_size=4,
max_model_len=1010000,
enable_chunked_prefill=True,
max_num_batched_tokens=131072,
enforce_eager=True,
# quantization="fp8", # 启用模型权重的FP8量化可以减少内存使用。
)
# 准备您的提示
prompt = "Tell me something about large language models."
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
)
# 生成输出
outputs = llm.generate([text], sampling_params)
# 打印输出。
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
类似OpenAI服务器示例
vllm serve Qwen/Qwen2.5-14B-Instruct-1M \
--tensor-parallel-size 4 \
--max-model-len 1010000 \
--enable-chunked-prefill --max-num-batched-tokens 131072 \
--enforce-eager \
--max-num-seqs 1
# --quantization fp8 # 启用模型权重的FP8量化可以减少内存使用。
然后,您可以使用curl或Python与部署的模型进行交互。
参数解释:
--tensor-parallel-size
- 设置为您使用的GPU数量。7B模型最多使用4个GPU,14B模型最多使用8个GPU。
--max-model-len
- 定义最大输入序列长度。如果遇到内存不足问题,请减小此值。
--max-num-batched-tokens
- 设置分块预填充中的块大小。较小的值会减少激活内存使用,但可能会减慢推理速度。
- 建议设置为131072以获得最佳性能。
--max-num-seqs
- 限制并发处理的序列数量。
您还可以参考我们的文档了解vLLM的使用方法。
故障排除
- 遇到错误:“The model's max sequence length (xxxxx) is larger than the maximum number of tokens that can be stored in the KV cache.”
KV缓存预留的显存不足。考虑减小
max_model_len
或增加tensor_parallel_size
。或者,您可以减小max_num_batched_tokens
,但这可能会显著减慢推理速度。 - 遇到错误:“torch.OutOfMemoryError: CUDA out of memory.”
激活权重预留的显存不足。您可以尝试将
gpu_memory_utilization
设置为0.85或更低,但请注意这可能会减少KV缓存可用的显存。 - 遇到错误:“Input prompt (xxxxx tokens) + lookahead slots (0) is too long and exceeds the capacity of the block manager.”
输入过长。考虑使用较短的序列或增加
max_model_len
。
✨ 主要特性
超低比特量化
我们最新的量化方法为超低比特模型(1 - 2比特)引入了精度自适应量化,并在Llama-3-8B上通过基准测试证明了其改进效果。这种方法采用特定层的策略,在保持极高内存效率的同时保留准确性。
基准测试背景
所有测试均在Llama-3-8B-Instruct上进行,使用:
- 标准困惑度评估管道
- 2048标记的上下文窗口
- 所有量化方法使用相同的提示集
方法
- 动态精度分配:
- 前/后25%的层 → IQ4_XS(选定层)
- 中间50% → IQ2_XXS/IQ3_S(提高效率)
- 关键组件保护:
- 嵌入层/输出层使用Q5_K
- 与标准1 - 2比特量化相比,误差传播减少38%
量化性能比较(Llama-3-8B)
量化方式 | 标准困惑度 | DynamicGate困惑度 | 困惑度变化 | 标准大小 | DG大小 | 大小变化 | 标准速度 | DG速度 |
---|---|---|---|---|---|---|---|---|
IQ2_XXS | 11.30 | 9.84 | -12.9% | 2.5G | 2.6G | +0.1G | 234s | 246s |
IQ2_XS | 11.72 | 11.63 | -0.8% | 2.7G | 2.8G | +0.1G | 242s | 246s |
IQ2_S | 14.31 | 9.02 | -36.9% | 2.7G | 2.9G | +0.2G | 238s | 244s |
IQ1_M | 27.46 | 15.41 | -43.9% | 2.2G | 2.5G | +0.3G | 206s | 212s |
IQ1_S | 53.07 | 32.00 | -39.7% | 2.1G | 2.4G | +0.3G | 184s | 209s |
关键指标说明:
- PPL = 困惑度(越低越好)
- Δ PPL = 从标准量化到DynamicGate量化的百分比变化
- 速度 = 推理时间(CPU avx2,2048标记上下文)
- 大小差异反映了混合量化的开销
关键改进:
- 🔥 IQ1_M的困惑度大幅降低43.9%(从27.46降至15.41)
- 🚀 IQ2_S的困惑度降低36.9%,同时仅增加0.2GB大小
- ⚡ IQ1_S尽管采用1比特量化,但仍保持39.7%的更高准确性
权衡:
- 所有变体的大小都有适度增加(0.1 - 0.3GB)
- 推理速度相当(差异<5%)
何时使用这些模型
📌 将模型装入GPU显存 ✔ 内存受限的部署 ✔ CPU和边缘设备,可以容忍1 - 2比特的误差 ✔ 超低比特量化研究
📦 安装指南
系统准备
为了获得最佳性能,建议使用支持优化内核的Ampere或Hopper架构的GPU。 确保您的系统满足以下要求:
- CUDA版本:12.1或12.3
- Python版本:>=3.9且<=3.12
显存要求:
- 处理100万标记的序列时:
- Qwen2.5-7B-Instruct-1M:至少120GB显存(跨GPU总和)。
- Qwen2.5-14B-Instruct-1M:至少320GB显存(跨GPU总和)。
如果您的GPU显存不足,仍然可以使用Qwen2.5-1M处理较短的任务。
安装依赖
目前,您需要从我们的自定义分支克隆vLLM仓库并手动安装。我们正在努力将我们的分支合并到vLLM主项目中。
git clone -b dev/dual-chunk-attn git@github.com:QwenLM/vllm.git
cd vllm
pip install -e . -v
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-14B-Instruct-1M"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "Give me a short introduction to large language model."
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=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]
高级用法
处理超长文本
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
# 初始化分词器
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-14B-Instruct-1M")
# 传递Qwen2.5-14B-Instruct的默认解码超参数
# max_tokens是生成的最大长度。
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=512)
# 输入模型名称或路径。有关参数解释,请参阅类似OpenAI服务器示例之后的内容。
llm = LLM(model="Qwen/Qwen2.5-14B-Instruct-1M",
tensor_parallel_size=4,
max_model_len=1010000,
enable_chunked_prefill=True,
max_num_batched_tokens=131072,
enforce_eager=True,
# quantization="fp8", # 启用模型权重的FP8量化可以减少内存使用。
)
# 准备您的提示
prompt = "Tell me something about large language models."
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
)
# 生成输出
outputs = llm.generate([text], sampling_params)
# 打印输出。
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
📚 详细文档
选择正确的模型格式
选择正确的模型格式取决于您的硬件能力和内存限制。
BF16(Brain Float 16) – 如果支持BF16加速则使用
- 一种16位浮点格式,专为更快的计算而设计,同时保留良好的精度。
- 提供与FP32相似的动态范围,但内存使用更低。
- 如果您的硬件支持BF16加速(请检查设备规格),建议使用。
- 与FP32相比,适用于高性能推理且内存占用减少。
📌 使用BF16的情况: ✔ 您的硬件具有原生BF16支持(例如,较新的GPU、TPU)。 ✔ 您希望在节省内存的同时获得更高的精度。 ✔ 您计划将模型重新量化为另一种格式。
📌 避免使用BF16的情况: ❌ 您的硬件不支持BF16(可能会回退到FP32并运行较慢)。 ❌ 您需要与缺乏BF16优化的旧设备兼容。
F16(Float 16) – 比BF16更广泛支持
- 一种16位浮点格式,具有高精度,但取值范围比BF16小。
- 适用于大多数支持FP16加速的设备(包括许多GPU和一些CPU)。
- 数值精度略低于BF16,但通常足以进行推理。
📌 使用F16的情况: ✔ 您的硬件支持FP16但不支持BF16。 ✔ 您需要在速度、内存使用和准确性之间取得平衡。 ✔ 您在GPU或其他针对FP16计算优化的设备上运行。
📌 避免使用F16的情况: ❌ 您的设备缺乏原生FP16支持(可能会比预期运行更慢)。 ❌ 您有内存限制。
量化模型(Q4_K、Q6_K、Q8等) – 用于CPU和低显存推理
量化可以在尽可能保持准确性的同时减小模型大小和内存使用。
- 低比特模型(Q4_K) → 最适合最小的内存使用,可能精度较低。
- 高比特模型(Q6_K、Q8_0) → 更好的准确性,需要更多内存。
📌 使用量化模型的情况: ✔ 您在CPU上进行推理,需要优化的模型。 ✔ 您的设备显存较低,无法加载全精度模型。 ✔ 您希望在保持合理准确性的同时减少内存占用。
📌 避免使用量化模型的情况: ❌ 您需要最高的准确性(全精度模型更适合)。 ❌ 您的硬件有足够的显存用于更高精度的格式(BF16/F16)。
极低比特量化(IQ3_XS、IQ3_S、IQ3_M、Q4_K、Q4_0)
这些模型针对极端内存效率进行了优化,非常适合低功耗设备或大规模部署,其中内存是关键限制因素。
- IQ3_XS:超低比特量化(3比特),具有极端的内存效率。
- 使用场景:最适合超低内存设备,即使Q4_K也太大。
- 权衡:与高比特量化相比,准确性较低。
- IQ3_S:小块大小,以实现最大内存效率。
- 使用场景:最适合低内存设备,其中IQ3_XS过于激进。
- IQ3_M:中等块大小,比IQ3_S具有更好的准确性。
- 使用场景:适用于低内存设备,其中IQ3_S限制太大。
- Q4_K:4比特量化,具有逐块优化以提高准确性。
- 使用场景:最适合低内存设备,其中Q6_K太大。
- Q4_0:纯4比特量化,针对ARM设备进行了优化。
- 使用场景:最适合基于ARM的设备或低内存环境。
模型格式选择总结表
模型格式 | 精度 | 内存使用 | 设备要求 | 最佳使用场景 |
---|---|---|---|---|
BF16 | 最高 | 高 | 支持BF16的GPU/CPU | 减少内存的高速推理 |
F16 | 高 | 高 | 支持FP16的设备 | BF16不可用时的GPU推理 |
Q4_K | 中低 | 低 | CPU或低显存设备 | 内存受限环境 |
Q6_K | 中 | 中等 | 内存更多的CPU | 量化时更好的准确性 |
Q8_0 | 高 | 中等 | 有足够显存的CPU或GPU | 量化模型中最佳准确性 |
IQ3_XS | 非常低 | 非常低 | 超低内存设备 | 极端内存效率和低准确性 |
Q4_0 | 低 | 低 | ARM或低内存设备 | llama.cpp可以为ARM设备优化 |
包含的文件及详情
Qwen2.5-14B-Instruct-1M-bf16.gguf
- 模型权重以BF16保存。
- 如果您想将模型重新量化为不同的格式,请使用此文件。
- 如果您的设备支持BF16加速,则最佳。
Qwen2.5-14B-Instruct-1M-f16.gguf
- 模型权重以F16存储。
- 如果您的设备支持FP16,特别是当BF16不可用时,请使用。
Qwen2.5-14B-Instruct-1M-bf16-q8_0.gguf
- 输出层和嵌入层保持为BF16。
- 所有其他层量化为Q8_0。
- 如果您的设备支持BF16,并且您想要一个量化版本,请使用。
Qwen2.5-14B-Instruct-1M-f16-q8_0.gguf
- 输出层和嵌入层保持为F16。
- 所有其他层量化为Q8_0。
Qwen2.5-14B-Instruct-1M-q4_k.gguf
- 输出层和嵌入层量化为Q8_0。
- 所有其他层量化为Q4_K。
- 适用于内存有限的CPU推理。
Qwen2.5-14B-Instruct-1M-q4_k_s.gguf
- 最小的Q4_K变体,以准确性为代价使用更少的内存。
- 最适合极低内存设置。
Qwen2.5-14B-Instruct-1M-q6_k.gguf
- 输出层和嵌入层量化为Q8_0。
- 所有其他层量化为Q6_K。
Qwen2.5-14B-Instruct-1M-q8_0.gguf
- 完全Q8量化的模型,以获得更好的准确性。
- 需要更多内存,但提供更高的精度。
Qwen2.5-14B-Instruct-1M-iq3_xs.gguf
- IQ3_XS量化,针对极端内存效率进行了优化。
- 最适合超低内存设备。
Qwen2.5-14B-Instruct-1M-iq3_m.gguf
- IQ3_M量化,提供中等块大小以提高准确性。
- 适用于低内存设备。
Qwen2.5-14B-Instruct-1M-q4_0.gguf
- 纯Q4_0量化,针对ARM设备进行了优化。
- 最适合低内存环境。
- 为了更好的准确性,建议使用IQ4_NL。
测试模型
如果您觉得这些模型有用: ❤ 如果您觉得有用,请点击“点赞”! 帮助我测试我的由AI驱动的网络监控助手,进行量子就绪安全检查: 👉 免费网络监控器
💬 如何测试:
- 点击聊天图标(任何页面的右下角)
- 选择一个AI助手类型:
TurboLLM
(GPT-4-mini)FreeLLM
(开源)TestLLM
(仅实验性CPU)
测试内容
我正在挑战小型开源模型在AI网络监控中的极限,具体包括:
- 针对实时网络服务的函数调用
- 模型可以多小,同时仍能处理:
- 自动化Nmap扫描
- 量子就绪检查
- Metasploit集成
🟡 TestLLM – 当前的实验模型(llama.cpp在6个CPU线程上):
- ✅ 零配置设置
- ⏳ 30秒加载时间(推理速度慢,但无API成本)
- 🔧 寻求帮助! 如果您对边缘设备AI感兴趣,让我们合作!
其他助手
🟢 TurboLLM – 使用gpt-4-mini进行:
- 实时网络诊断
- 自动化渗透测试(Nmap/Metasploit)
- 🔑 通过下载我们的免费网络监控代理获得更多令牌。
🔵 HugLLM – 开源模型(约80亿参数):
- 比TurboLLM多2倍的令牌
- 由AI驱动的日志分析
- 🌐 在Hugging Face推理API上运行。
示例AI命令测试
"Give me info on my websites SSL certificate"
"Check if my server is using quantum safe encyption for communication"
"Run a quick Nmap vulnerability test"
🔧 技术细节
模型介绍
Qwen2.5-1M是Qwen2.5系列模型的长上下文版本,支持高达100万标记的上下文长度。与Qwen2.5 128K版本相比,Qwen2.5-1M在处理长上下文任务时表现出显著提高的性能,同时在短任务中保持其能力。
模型具有以下特点:
- 类型:因果语言模型
- 训练阶段:预训练和后训练
- 架构:带有RoPE、SwiGLU、RMSNorm和注意力QKV偏置的transformers
- 参数数量:147亿
- 非嵌入参数数量:131亿
- 层数:48
- 注意力头数量(GQA):Q为40,KV为8
- 上下文长度:完整1,010,000标记,生成8192标记
- 建议使用我们的自定义vLLM进行部署,它引入了稀疏注意力和长度外推方法,以确保长上下文任务的效率和准确性。具体指导请参考处理超长文本部分。
- 您也可以使用支持Qwen2.5的先前框架进行推理,但对于超过262,144标记的序列,可能会出现准确性下降。
评估与性能
📄 许可证
本项目采用Apache-2.0许可证,详情请见许可证链接。
引用
如果您觉得我们的工作有帮助,请引用我们:
@misc{qwen2.5-1m,
title = {Qwen2.5-1M: Deploy Your Own Qwen with Context Length up to 1M Tokens},
url = {https://qwenlm.github.io/blog/qwen2.5-1m/},
author = {Qwen Team},
month = {January},
year = {2025}
}
@article{qwen2.5,
title={Qwen2.5-1M Technical Report},
author={An Yang and Bowen Yu and Chengyuan Li and Dayiheng Liu and Fei Huang and Haoyan Huang and Jiandong Jiang and Jianhong Tu and Jianwei Zhang and Jingren Zhou and Junyang Lin and Kai Dang and Kexin Yang and Le Yu and Mei Li and Minmin Sun and Qin Zhu and Rui Men and Tao He and Weijia Xu and Wenbiao Yin and Wenyuan Yu and Xiafei Qiu and Xingzhang Ren and Xinlong Yang and Yong Li and Zhiying Xu and Zipeng Zhang},
journal={arXiv preprint arXiv:2501.15383},
year={2025}
}



