模型概述
模型特點
模型能力
使用案例
🚀 通義千問-7B-Chat(Qwen-7B-Chat)
通義千問-7B-Chat 是基於阿里雲研發的通義千問大模型系列中70億參數規模的Qwen-7B模型,使用對齊機制打造的基於大語言模型的AI助手。它在多種權威任務評測中表現出色,還具備較強的外部系統調用能力。
Qwen-7B 🤖 | 🤗  | Qwen-7B-Chat 🤖 | 🤗  |  Demo  |  Report
🚀 快速開始
要求
- python 3.8及以上版本
- pytorch 1.12及以上版本,推薦2.0及以上版本
- 建議使用CUDA 11.4及以上(GPU用戶、flash-attention用戶等需考慮此選項)
依賴項
運行Qwen-7B-Chat,請確保滿足上述要求,再執行以下pip命令安裝依賴庫:
pip install transformers==4.31.0 accelerate tiktoken einops
另外,推薦安裝flash-attention
庫,以實現更高的效率和更低的顯存佔用:
git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 下方安裝可選,安裝可能比較緩慢。
# Below are optional. Installing them might be slow.
pip install csrc/layer_norm
pip install csrc/rotary
快速使用示例
下面展示了一個使用Qwen-7B-Chat模型,進行多輪對話交互的樣例:
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# use bf16
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# use fp16
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
# Specify hyperparameters for generation
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成長度、top_p等相關超參
# 第一輪對話 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高興為你提供幫助。
# 第二輪對話 2nd dialogue turn
response, history = model.chat(tokenizer, "給我講一個年輕人奮鬥創業最終取得成功的故事。", history=history)
print(response)
# 這是一個關於一個年輕人奮鬥創業最終取得成功的故事。
# 故事的主人公叫李明,他來自一個普通的家庭,父母都是普通的工人。從小,李明就立下了一個目標:要成為一名成功的企業家。
# 為了實現這個目標,李明勤奮學習,考上了大學。在大學期間,他積極參加各種創業比賽,獲得了不少獎項。他還利用課餘時間去實習,積累了寶貴的經驗。
# 畢業後,李明決定開始自己的創業之路。他開始尋找投資機會,但多次都被拒絕了。然而,他並沒有放棄。他繼續努力,不斷改進自己的創業計劃,並尋找新的投資機會。
# 最終,李明成功地獲得了一筆投資,開始了自己的創業之路。他成立了一家科技公司,專注於開發新型軟件。在他的領導下,公司迅速發展起來,成為了一家成功的科技企業。
# 李明的成功並不是偶然的。他勤奮、堅韌、勇於冒險,不斷學習和改進自己。他的成功也證明了,只要努力奮鬥,任何人都有可能取得成功。
# 第三輪對話 3rd dialogue turn
response, history = model.chat(tokenizer, "給這個故事起一個標題", history=history)
print(response)
# 《奮鬥創業:一個年輕人的成功之路》
關於更多的使用說明,請參考我們的Github repo獲取更多信息。
✨ 主要特性
- 強大的語言理解能力:在中文理解(C-Eval)、英文理解(MMLU)等權威任務評測中表現出色。
- 優秀的代碼和數學能力:在代碼(HumanEval)和數學(GSM8K)等任務中展現出較高的準確率。
- 長序列處理能力:通過NTK插值和LogN注意力縮放,可擴展上下文長度,在長文本摘要數據集上有良好表現。
- 工具使用能力:支持通過ReAct Prompting調用插件/工具/API,在工具使用能力評測中表現優異。
📚 詳細文檔
Tokenizer
注:作為術語的“tokenization”在中文中尚無共識的概念對應,本文檔採用英文表達以利說明。
基於tiktoken的分詞器有別於其他分詞器,比如sentencepiece分詞器。尤其在微調階段,需要特別注意特殊token的使用。關於tokenizer的更多信息,以及微調時涉及的相關使用,請參閱文檔。
模型細節
與Qwen-7B預訓練模型相同,Qwen-7B-Chat模型規模基本情況如下所示:
屬性 | 詳情 |
---|---|
n_layers | 32 |
n_heads | 32 |
d_model | 4096 |
詞表大小 | 151851 |
序列長度 | 2048 |
在位置編碼、FFN激活函數和normalization的實現方式上,採用了目前最流行的做法,即RoPE相對位置編碼、SwiGLU激活函數、RMSNorm(可選安裝flash-attention加速)。
在分詞器方面,相比目前主流開源模型以中英詞表為主,Qwen-7B-Chat使用了約15萬token大小的詞表。該詞表在GPT-4使用的BPE詞表cl100k_base
基礎上,對中文、多語言進行了優化,在對中、英、代碼數據的高效編解碼的基礎上,對部分多語言更加友好,方便用戶在不擴展詞表的情況下對部分語種進行能力增強。詞表對數字按單個數字位切分,調用較為高效的tiktoken分詞庫進行分詞。
🔧 技術細節
評測效果
對於Qwen-7B-Chat模型,評測了常規的中文理解(C-Eval)、英文理解(MMLU)、代碼(HumanEval)和數學(GSM8K)等權威任務,同時包含了長序列任務的評測結果。由於Qwen-7B-Chat模型經過對齊後,激發了較強的外部系統調用能力,還進行了工具使用能力方面的評測。
提示:由於硬件和框架造成的舍入誤差,復現結果如有波動屬於正常現象。
中文評測(C-Eval)
在C-Eval驗證集上,Qwen-7B-Chat模型的zero-shot準確率如下:
Model | Avg. Acc. |
---|---|
LLaMA2-7B-Chat | 31.9 |
LLaMA2-13B-Chat | 40.6 |
Chinese-Alpaca-2-7B | 41.3 |
Chinese-Alpaca-Plus-13B | 43.3 |
Baichuan-13B-Chat | 50.4 |
ChatGLM2-6B-Chat | 50.7 |
InternLM-7B-Chat | 53.2 |
Qwen-7B-Chat | 54.2 |
C-Eval測試集上,Qwen-7B-Chat模型的zero-shot準確率結果如下:
Model | Avg. | STEM | Social Sciences | Humanities | Others |
---|---|---|---|---|---|
Chinese-Alpaca-Plus-13B | 41.5 | 36.6 | 49.7 | 43.1 | 41.2 |
Chinese-Alpaca-2-7B | 40.3 | - | - | - | - |
ChatGLM2-6B-Chat | 50.1 | 46.4 | 60.4 | 50.6 | 46.9 |
Baichuan-13B-Chat | 51.5 | 43.7 | 64.6 | 56.2 | 49.2 |
Qwen-7B-Chat | 54.6 | 47.8 | 67.6 | 59.3 | 50.6 |
在7B規模模型上,經過人類指令對齊的Qwen-7B-Chat模型,準確率在同類相近規模模型中仍然處於前列。
英文評測(MMLU)
MMLU評測集上,Qwen-7B-Chat模型的zero-shot準確率如下,效果同樣在同類對齊模型中同樣表現較優:
Model | Avg. Acc. |
---|---|
ChatGLM2-6B-Chat | 45.5 |
LLaMA2-7B-Chat | 47.0 |
InternLM-7B-Chat | 50.8 |
Baichuan-13B-Chat | 52.1 |
ChatGLM2-12B-Chat | 52.1 |
Qwen-7B-Chat | 53.9 |
代碼評測(Coding Evaluation)
Qwen-7B-Chat在HumanEval的zero-shot Pass@1效果如下:
Model | Pass@1 |
---|---|
LLaMA2-7B-Chat | 12.2 |
InternLM-7B-Chat | 14.0 |
Baichuan-13B-Chat | 16.5 |
LLaMA2-13B-Chat | 18.9 |
Qwen-7B-Chat | 24.4 |
數學評測
在評測數學能力的GSM8K上,Qwen-7B-Chat的準確率結果如下:
Model | Zero-shot Acc. | 4-shot Acc. |
---|---|---|
ChatGLM2-6B-Chat | - | 28.0 |
LLaMA2-7B-Chat | 20.4 | 28.2 |
LLaMA2-13B-Chat | 29.4 | 36.7 |
InternLM-7B-Chat | 32.6 | 34.5 |
Baichuan-13B-Chat | - | 36.3 |
ChatGLM2-12B-Chat | - | 38.1 |
Qwen-7B-Chat | 41.1 | 43.5 |
長序列評測(Long-Context Understanding)
通過NTK插值,LogN注意力縮放可以擴展Qwen-7B-Chat的上下文長度。在長文本摘要數據集VCSUM上(文本平均長度在15K左右),Qwen-7B-Chat的Rouge-L結果如下:
(若要啟用這些技巧,請將config.json裡的use_dynamc_ntk
和use_logn_attn
設置為true)
Model | VCSUM (zh) |
---|---|
GPT-3.5-Turbo-16k | 16.0 |
LLama2-7B-Chat | 0.2 |
InternLM-7B-Chat | 13.0 |
ChatGLM2-6B-Chat | 16.3 |
Qwen-7B-Chat | 16.6 |
工具使用能力的評測(Tool Usage)
ReAct Prompting
千問支持通過 ReAct Prompting 調用插件/工具/API。ReAct 也是 LangChain 框架採用的主要方式之一。在我們開源的、用於評估工具使用能力的評測基準上,千問的表現如下:
Model | Tool Selection (Acc.↑) | Tool Input (Rouge-L↑) | False Positive Error↓ |
---|---|---|---|
GPT-4 | 95% | 0.90 | 15% |
GPT-3.5 | 85% | 0.88 | 75% |
Qwen-7B-Chat | 99% | 0.89 | 9.7% |
評測基準中出現的插件均沒有出現在千問的訓練集中。該基準評估了模型在多個候選插件中選擇正確插件的準確率、傳入插件的參數的合理性、以及假陽率。假陽率(False Positive)定義:在處理不該調用插件的請求時,錯誤地調用了插件。
關於 ReAct Prompting 的 prompt 怎麼寫、怎麼使用,請參考 ReAct 樣例說明。使用工具能使模型更好地完成任務。基於千問的工具使用能力,能實現下圖所展示的效果:
Huggingface Agent
千問還具備作為 HuggingFace Agent 的能力。它在 Huggingface 提供的run模式評測基準上的表現如下:
Model | Tool Selection↑ | Tool Used↑ | Code↑ |
---|---|---|---|
GPT-4 | 100 | 100 | 97.41 |
GPT-3.5 | 95.37 | 96.30 | 87.04 |
StarCoder-15.5B | 87.04 | 87.96 | 68.89 |
Qwen-7B | 90.74 | 92.59 | 74.07 |
量化
如希望使用更低精度的量化模型,如4比特和8比特的模型,我們提供了簡單的示例來說明如何快速使用量化模型。在開始前,確保你已經安裝了bitsandbytes
。請注意,bitsandbytes
的安裝要求是:
**Requirements** Python >=3.8. Linux distribution (Ubuntu, MacOS, etc.) + CUDA > 10.0.
Windows用戶需安裝特定版本的bitsandbytes
,可選項包括bitsandbytes-windows-webui。
你只需要在AutoModelForCausalLM.from_pretrained
中添加你的量化配置,即可使用量化模型。如下所示:
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# quantization configuration for NF4 (4 bits)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type='nf4',
bnb_4bit_compute_dtype=torch.bfloat16
)
# quantization configuration for Int8 (8 bits)
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen-7B-Chat",
device_map="cuda:0",
quantization_config=quantization_config,
max_memory=max_memory,
trust_remote_code=True,
).eval()
上述方法可以讓我們將模型量化成NF4
和Int8
精度的模型進行讀取,幫助我們節省顯存開銷。我們也提供了相關性能數據。我們發現儘管模型在效果上存在損失,但模型的顯存開銷大幅降低。
Precision | MMLU | Memory |
---|---|---|
BF16 | 56.7 | 16.2G |
Int8 | 52.8 | 10.1G |
NF4 | 48.9 | 7.4G |
📄 許可證
我們的代碼和模型權重對學術研究完全開放,並支持商用。請查看LICENSE瞭解具體的開源協議細節。
📞 聯繫我們
如果你想給我們的研發團隊和產品團隊留言,請通過郵件(qianwen_opensource@alibabacloud.com)聯繫我們。



