模型概述
模型特點
模型能力
使用案例
🚀 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}
}



