通義千問-7B(Qwen-7B) 是阿里雲研發的通義千問大模型系列的 70 億參數規模的模型。Qwen-7B 是基於 Transformer 的大語言模型, 在超大規模的預訓練數據上進行訓練得到。預訓練數據類型多樣,覆蓋廣泛,包括大量網絡文本、專業書籍、代碼等。同時,在 Qwen-7B 的基礎上,我們使用對齊機制打造了基於大語言模型的 AI 助手 Qwen-7B-Chat。Qwen-7B 系列模型的特點包括:
- 大規模高質量預訓練數據:我們使用了超過 2.2 萬億 token 的自建大規模預訓練數據集進行語言模型的預訓練。數據集包括文本和代碼等多種數據類型,覆蓋通用領域和專業領域。
- 優秀的模型性能:相比同規模的開源模型,Qwen-7B 在多個評測數據集上具有顯著優勢,甚至超出 12-13B 等更大規模的模型。評測評估的能力範圍包括自然語言理解與生成、數學運算解題、代碼生成等。
- 更好地支持多語言:基於更大詞表的分詞器在分詞上更高效,同時它對其他語言表現更加友好。用戶可以在 Qwen-7B 的基礎上更方便地訓練特定語言的 7B 語言模型。
- 8K的上下文長度:Qwen-7B 及 Qwen-7B-Chat 均能支持 8K 的上下文長度, 允許用戶輸入更長的 prompt。
- 支持插件調用:Qwen-7B-Chat 針對插件調用相關的對齊數據做了特定優化,當前模型能有效調用插件以及升級為 Agent。
評測表現
Qwen-7B 在多個全面評估自然語言理解與生成、數學運算解題、代碼生成等能力的評測數據集上,包括 MMLU、C-Eval、GSM8K、HumanEval、WMT22 等,均超出了同規模大語言模型的表現,甚至超出了如 12-13B 參數等更大規模的語言模型。
要求
- python 3.8 及以上版本
- pytorch 1.12 及以上版本,推薦 2.0 及以上版本
- 建議使用 CUDA 11.4 及以上(GPU 用戶、flash-attention 用戶等需考慮此選項)
快速使用
下面是簡單的示例來說明如何利用 ModelScope 和 Transformers 快速使用 Qwen-7B 和 Qwen-7B-Chat。
在開始前,請確保你已經配置好環境並安裝好相關的代碼包。最重要的是,確保你滿足上述要求,然後安裝相關的依賴庫。
pip install -r requirements.txt
如果你的顯卡支持 fp16 或 bf16 精度,我們還推薦安裝flash-attention(https://github.com/Dao-AILab/flash-attention)來提高你的運行效率以及降低顯存佔用。(flash-attention 只是可選項,不安裝也可正常運行該項目)。
git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
pip install csrc/layer_norm
pip install csrc/rotary
接下來你可以開始使用 Transformers 或者 ModelScope 來使用模型。
Transformers
如希望使用 Qwen-7B-chat 進行推理,所需要寫的只是如下所示的數行代碼:
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
# 請注意:分詞器默認行為已更改為默認關閉特殊token攻擊防護。相關使用指引,請見examples/tokenizer_showcase.ipynb
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# 打開bf16精度,A100、H100、RTX3060、RTX3070等顯卡建議啟用以節省顯存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# 打開fp16精度,V100、P100、T4等顯卡建議啟用以節省顯存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# 使用CPU進行推理,需要約32GB內存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# 默認使用自動模式,根據設備自動選擇精度
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
# 可指定不同的生成長度、top_p等相關超參
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# 第一輪對話 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)
# 《奮鬥創業:一個年輕人的成功之路》
運行 Qwen-7B 同樣非常簡單。運行 Qwen-7B:
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)
# 打開bf16精度,A100、H100、RTX3060、RTX3070等顯卡建議啟用以節省顯存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True, bf16=True).eval()
# 打開fp16精度,V100、P100、T4等顯卡建議啟用以節省顯存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True, fp16=True).eval()
# 使用CPU進行推理,需要約32GB內存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="cpu", trust_remote_code=True).eval()
# 默認使用自動模式,根據設備自動選擇精度
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True).eval()
# 可指定不同的生成長度、top_p等相關超參
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)
inputs = tokenizer('蒙古國的首都是烏蘭巴托(Ulaanbaatar)\n冰島的首都是雷克雅未克(Reykjavik)\n埃塞俄比亞的首都是', return_tensors='pt')
inputs = inputs.to('cuda:0')
pred = model.generate(**inputs)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
# 蒙古國的首都是烏蘭巴托(Ulaanbaatar)\n冰島的首都是雷克雅未克(Reykjavik)\n埃塞俄比亞的首都是亞的斯亞貝巴(Addis Ababa)...
ModelScope
魔搭(ModelScope)是開源的模型即服務共享平台,為泛 AI 開發者提供靈活、易用、低成本的一站式模型服務產品。使用 ModelScope 同樣非常簡單,代碼如下所示:
import os
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope import snapshot_download
model_id = 'QWen/qwen-7b-chat'
revision = 'v1.0.0'
model_dir = snapshot_download(model_id, revision)
pipe = pipeline(
task=Tasks.chat, model=model_dir, device_map='auto')
history = None
text = '浙江的省會在哪裡?'
results = pipe(text, history=history)
response, history = results['response'], results['history']
print(f'Response: {response}')
text = '它有什麼好玩的地方呢?'
results = pipe(text, history=history)
response, history = results['response'], results['history']
print(f'Response: {response}')
交互式 Demo
Qwen-7B 提供了一個簡單的交互式 Demo 示例,請查看cli_demo.py。當前模型已經支持流式輸出,用戶可通過輸入文字的方式和 Qwen-7B-Chat 交互,模型將流式輸出返回結果。
https://github.com/QwenLM/Qwen-7B/blob/main/cli_demo.py
傳送門
開源協議:Tongyi Qianwen LICENSE
開源地址:https://github.com/QwenLM/Qwen-7B
項目合集:https://github.com/RepositorySheet