ChatGLM2-6B
介紹
ChatGLM2-6B 是開源中英雙語對(duì)話模型?ChatGLM-6B?的第二代版本,在保留了初代模型對(duì)話流暢、部署門檻較低等眾多優(yōu)秀特性的基礎(chǔ)之上,ChatGLM2-6B 引入了如下新特性:
- 更強(qiáng)大的性能:基于 ChatGLM 初代模型的開發(fā)經(jīng)驗(yàn),我們?nèi)嫔?jí)了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了?GLM?的混合目標(biāo)函數(shù),經(jīng)過了 1.4T 中英標(biāo)識(shí)符的預(yù)訓(xùn)練與人類偏好對(duì)齊訓(xùn)練,評(píng)測(cè)結(jié)果顯示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等數(shù)據(jù)集上的性能取得了大幅度的提升,在同尺寸開源模型中具有較強(qiáng)的競(jìng)爭(zhēng)力。
- 更長(zhǎng)的上下文:基于?FlashAttention?技術(shù),我們將基座模型的上下文長(zhǎng)度(Context Length)由 ChatGLM-6B 的 2K 擴(kuò)展到了 32K,并在對(duì)話階段使用 8K 的上下文長(zhǎng)度訓(xùn)練,允許更多輪次的對(duì)話。但當(dāng)前版本的 ChatGLM2-6B 對(duì)單輪超長(zhǎng)文檔的理解能力有限,我們會(huì)在后續(xù)迭代升級(jí)中著重進(jìn)行優(yōu)化。
- 更高效的推理:基于?Multi-Query Attention?技術(shù),ChatGLM2-6B 有更高效的推理速度和更低的顯存占用:在官方的模型實(shí)現(xiàn)下,推理速度相比初代提升了 42%,INT4 量化下,6G 顯存支持的對(duì)話長(zhǎng)度由 1K 提升到了 8K。
- 更開放的協(xié)議:ChatGLM2-6B 權(quán)重對(duì)學(xué)術(shù)研究完全開放,在獲得官方的書面許可后,亦允許商業(yè)使用。如果您發(fā)現(xiàn)我們的開源模型對(duì)您的業(yè)務(wù)有用,我們歡迎您對(duì)下一代模型 ChatGLM3 研發(fā)的捐贈(zèng)。
ChatGLM2-6B 開源模型旨在與開源社區(qū)一起推動(dòng)大模型技術(shù)發(fā)展,懇請(qǐng)開發(fā)者和大家遵守開源協(xié)議,勿將開源模型和代碼及基于開源項(xiàng)目產(chǎn)生的衍生物用于任何可能給國家和社會(huì)帶來危害的用途以及用于任何未經(jīng)過安全評(píng)估和備案的服務(wù)。目前,本項(xiàng)目團(tuán)隊(duì)未基于 ChatGLM2-6B 開發(fā)任何應(yīng)用,包括網(wǎng)頁端、安卓、蘋果 iOS 及 Windows App 等應(yīng)用。
盡管模型在訓(xùn)練的各個(gè)階段都盡力確保數(shù)據(jù)的合規(guī)性和準(zhǔn)確性,但由于 ChatGLM2-6B 模型規(guī)模較小,且模型受概率隨機(jī)性因素影響,無法保證輸出內(nèi)容的準(zhǔn)確性,且模型易被誤導(dǎo)。本項(xiàng)目不承擔(dān)開源模型和代碼導(dǎo)致的數(shù)據(jù)安全、輿情風(fēng)險(xiǎn)或發(fā)生任何模型被誤導(dǎo)、濫用、傳播、不當(dāng)利用而產(chǎn)生的風(fēng)險(xiǎn)和責(zé)任。
評(píng)測(cè)結(jié)果
我們選取了部分中英文典型數(shù)據(jù)集進(jìn)行了評(píng)測(cè),以下為 ChatGLM2-6B 模型在?MMLU?(英文)、C-Eval(中文)、GSM8K(數(shù)學(xué))、BBH(英文) 上的測(cè)評(píng)結(jié)果。
MMLU
Model | Average | STEM | Social Sciences | Humanities | Others |
---|---|---|---|---|---|
ChatGLM-6B | 40.63 | 33.89 | 44.84 | 39.02 | 45.71 |
ChatGLM2-6B (base) | 47.86 | 41.20 | 54.44 | 43.66 | 54.46 |
ChatGLM2-6B | 45.46 | 40.06 | 51.61 | 41.23 | 51.24 |
Chat 模型使用 zero-shot CoT (Chain-of-Thought) 的方法測(cè)試,Base 模型使用 few-shot answer-only 的方法測(cè)試
C-Eval
Model | Average | STEM | Social Sciences | Humanities | Others |
---|---|---|---|---|---|
ChatGLM-6B | 38.9 | 33.3 | 48.3 | 41.3 | 38.0 |
ChatGLM2-6B (base) | 51.7 | 48.6 | 60.5 | 51.3 | 49.8 |
ChatGLM2-6B | 50.1 | 46.4 | 60.4 | 50.6 | 46.9 |
Chat 模型使用 zero-shot CoT 的方法測(cè)試,Base 模型使用 few-shot answer only 的方法測(cè)試
GSM8K
Model | Accuracy | Accuracy (Chinese)* |
---|---|---|
ChatGLM-6B | 4.82 | 5.85 |
ChatGLM2-6B (base) | 32.37 | 28.95 |
ChatGLM2-6B | 28.05 | 20.45 |
所有模型均使用 few-shot CoT 的方法測(cè)試,CoT prompt 來自?http://arxiv.org/abs/2201.11903
* 我們使用翻譯 API 翻譯了 GSM8K 中的 500 道題目和 CoT prompt 并進(jìn)行了人工校對(duì)
BBH
Model | Accuracy |
---|---|
ChatGLM-6B | 18.73 |
ChatGLM2-6B (base) | 33.68 |
ChatGLM2-6B | 30.00 |
所有模型均使用 few-shot CoT 的方法測(cè)試,CoT prompt 來自?https://github.com/suzgunmirac/BIG-Bench-Hard/tree/main/cot-prompts
推理性能
ChatGLM2-6B 使用了?Multi-Query Attention,提高了生成速度。生成 2000 個(gè)字符的平均速度對(duì)比如下
Model | 推理速度 (字符/秒) |
---|---|
ChatGLM-6B | 31.49 |
ChatGLM2-6B | 44.62 |
使用官方實(shí)現(xiàn),batch size = 1,max length = 2048,bf16 精度,測(cè)試硬件為 A100-SXM4-80G,軟件環(huán)境為 PyTorch 2.0.1
Multi-Query Attention 同時(shí)也降低了生成過程中 KV Cache 的顯存占用,此外,ChatGLM2-6B 采用 Causal Mask 進(jìn)行對(duì)話訓(xùn)練,連續(xù)對(duì)話時(shí)可復(fù)用前面輪次的 KV Cache,進(jìn)一步優(yōu)化了顯存占用。因此,使用 6GB 顯存的顯卡進(jìn)行 INT4 量化的推理時(shí),初代的 ChatGLM-6B 模型最多能夠生成 1119 個(gè)字符就會(huì)提示顯存耗盡,而 ChatGLM2-6B 能夠生成至少 8192 個(gè)字符。
量化等級(jí) | 編碼 2048 長(zhǎng)度的最小顯存 | 生成 8192 長(zhǎng)度的最小顯存 |
---|---|---|
FP16 / BF16 | 13.1 GB | 12.8 GB |
INT8 | 8.2 GB | 8.1 GB |
INT4 | 5.5 GB | 5.1 GB |
ChatGLM2-6B 利用了 PyTorch 2.0 引入的?
torch.nn.functional.scaled_dot_product_attention
?實(shí)現(xiàn)高效的 Attention 計(jì)算,如果 PyTorch 版本較低則會(huì) fallback 到樸素的 Attention 實(shí)現(xiàn),出現(xiàn)顯存占用高于上表的情況。
我們也測(cè)試了量化對(duì)模型性能的影響。結(jié)果表明,量化對(duì)模型性能的影響在可接受范圍內(nèi)。
量化等級(jí) | Accuracy (MMLU) | Accuracy (C-Eval dev) |
---|---|---|
BF16 | 45.47 | 53.57 |
INT4 | 43.13 | 50.30 |
ChatGLM2-6B 示例
相比于初代模型,ChatGLM2-6B 多個(gè)維度的能力都取得了提升,以下是一些對(duì)比示例。更多 ChatGLM2-6B 的可能,等待你來探索發(fā)現(xiàn)!
數(shù)理邏輯
知識(shí)推理
長(zhǎng)文檔理解
使用方式
環(huán)境安裝
首先需要下載本倉庫:
git clone https://github.com/THUDM/ChatGLM2-6B cd ChatGLM2-6B
然后使用 pip 安裝依賴:pip install -r requirements.txt
,其中?transformers
?庫版本推薦為?4.30.2
,torch
?推薦使用 2.0 以上的版本,以獲得最佳的推理性能。
代碼調(diào)用
可以通過如下代碼調(diào)用 ChatGLM2-6B 模型來生成對(duì)話:
>>> from transformers import AutoTokenizer, AutoModel >>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True) >>> model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device='cuda') >>> model = model.eval() >>> response, history = model.chat(tokenizer, "你好", history=[]) >>> print(response) 你好??!我是人工智能助手 ChatGLM2-6B,很高興見到你,歡迎問我任何問題。 >>> response, history = model.chat(tokenizer, "晚上睡不著應(yīng)該怎么辦", history=history) >>> print(response) 晚上睡不著可能會(huì)讓你感到焦慮或不舒服,但以下是一些可以幫助你入睡的方法: 1. 制定規(guī)律的睡眠時(shí)間表:保持規(guī)律的睡眠時(shí)間表可以幫助你建立健康的睡眠習(xí)慣,使你更容易入睡。盡量在每天的相同時(shí)間上床,并在同一時(shí)間起床。 2. 創(chuàng)造一個(gè)舒適的睡眠環(huán)境:確保睡眠環(huán)境舒適,安靜,黑暗且溫度適宜??梢允褂檬孢m的床上用品,并保持房間通風(fēng)。 3. 放松身心:在睡前做些放松的活動(dòng),例如泡個(gè)熱水澡,聽些輕柔的音樂,閱讀一些有趣的書籍等,有助于緩解緊張和焦慮,使你更容易入睡。 4. 避免飲用含有咖啡因的飲料:咖啡因是一種刺激性物質(zhì),會(huì)影響你的睡眠質(zhì)量。盡量避免在睡前飲用含有咖啡因的飲料,例如咖啡,茶和可樂。 5. 避免在床上做與睡眠無關(guān)的事情:在床上做些與睡眠無關(guān)的事情,例如看電影,玩游戲或工作等,可能會(huì)干擾你的睡眠。 6. 嘗試呼吸技巧:深呼吸是一種放松技巧,可以幫助你緩解緊張和焦慮,使你更容易入睡。試著慢慢吸氣,保持幾秒鐘,然后緩慢呼氣。 如果這些方法無法幫助你入睡,你可以考慮咨詢醫(yī)生或睡眠專家,尋求進(jìn)一步的建議。
從本地加載模型
以上代碼會(huì)由?transformers
?自動(dòng)下載模型實(shí)現(xiàn)和參數(shù)。完整的模型實(shí)現(xiàn)在?Hugging Face Hub。如果你的網(wǎng)絡(luò)環(huán)境較差,下載模型參數(shù)可能會(huì)花費(fèi)較長(zhǎng)時(shí)間甚至失敗。此時(shí)可以先將模型下載到本地,然后從本地加載。
從 Hugging Face Hub 下載模型需要先安裝Git LFS,然后運(yùn)行
git clone https://huggingface.co/THUDM/chatglm2-6b
如果你從 Hugging Face Hub 上下載 checkpoint 的速度較慢,可以只下載模型實(shí)現(xiàn)
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
然后從這里手動(dòng)下載模型參數(shù)文件,并將下載的文件替換到本地的?chatglm2-6b
?目錄下。
將模型下載到本地之后,將以上代碼中的?THUDM/chatglm2-6b
?替換為你本地的?chatglm2-6b
?文件夾的路徑,即可從本地加載模型。
模型的實(shí)現(xiàn)仍然處在變動(dòng)中。如果希望固定使用的模型實(shí)現(xiàn)以保證兼容性,可以在?from_pretrained
?的調(diào)用中增加?revision="v1.0"
?參數(shù)。v1.0
?是當(dāng)前最新的版本號(hào),完整的版本列表參見?Change Log。
網(wǎng)頁版 Demo
首先安裝 Gradio:pip install gradio
,然后運(yùn)行倉庫中的?web_demo.py:
python web_demo.py
程序會(huì)運(yùn)行一個(gè) Web Server,并輸出地址。在瀏覽器中打開輸出的地址即可使用。
默認(rèn)使用了?
share=False
?啟動(dòng),不會(huì)生成公網(wǎng)鏈接。如有需要公網(wǎng)訪問的需求,可以修改為?share=True
?啟動(dòng)。
感謝?@AdamBear?實(shí)現(xiàn)了基于 Streamlit 的網(wǎng)頁版 Demo?web_demo2.py
。使用時(shí)首先需要額外安裝以下依賴:
pip install streamlit streamlit-chat
然后通過以下命令運(yùn)行:
streamlit run web_demo2.py
經(jīng)測(cè)試,如果輸入的 prompt 較長(zhǎng)的話,使用基于 Streamlit 的網(wǎng)頁版 Demo 會(huì)更流暢。
命令行 Demo
運(yùn)行倉庫中?cli_demo.py:
python cli_demo.py
程序會(huì)在命令行中進(jìn)行交互式的對(duì)話,在命令行中輸入指示并回車即可生成回復(fù),輸入?clear
?可以清空對(duì)話歷史,輸入?stop
?終止程序。
API 部署
首先需要安裝額外的依賴?pip install fastapi uvicorn
,然后運(yùn)行倉庫中的?api.py:
python api.py
默認(rèn)部署在本地的 8000 端口,通過 POST 方法進(jìn)行調(diào)用
curl -X POST "http://127.0.0.1:8000" \ -H 'Content-Type: application/json' \ -d '{"prompt": "你好", "history": []}'
得到的返回值為
{ "response":"你好??!我是人工智能助手 ChatGLM2-6B,很高興見到你,歡迎問我任何問題。", "history":[["你好","你好??!我是人工智能助手 ChatGLM2-6B,很高興見到你,歡迎問我任何問題。"]], "status":200, "time":"2023-03-23 21:38:40" }
感謝?@hiyouga?實(shí)現(xiàn)了 OpenAI 格式的流式 API 部署,可以作為任意基于 ChatGPT 的應(yīng)用的后端,比如?ChatGPT-Next-Web。可以通過運(yùn)行倉庫中的openai_api.py?進(jìn)行部署:
python openai_api.py
進(jìn)行 API 調(diào)用的示例代碼為
import openai if __name__ == "__main__": openai.api_base = "http://localhost:8000/v1" openai.api_key = "none" for chunk in openai.ChatCompletion.create( model="chatglm2-6b", messages=[ {"role": "user", "content": "你好"} ], stream=True ): if hasattr(chunk.choices[0].delta, "content"): print(chunk.choices[0].delta.content, end="", flush=True)
低成本部署
模型量化
默認(rèn)情況下,模型以 FP16 精度加載,運(yùn)行上述代碼需要大概 13GB 顯存。如果你的 GPU 顯存有限,可以嘗試以量化方式加載模型,使用方法如下:
# 按需修改,目前只支持 4/8 bit 量化 model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(8).cuda()
模型量化會(huì)帶來一定的性能損失,經(jīng)過測(cè)試,ChatGLM2-6B 在 4-bit 量化下仍然能夠進(jìn)行自然流暢的生成。
如果你的內(nèi)存不足,可以直接加載量化后的模型:
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).cuda()
CPU 部署
如果你沒有 GPU 硬件的話,也可以在 CPU 上進(jìn)行推理,但是推理速度會(huì)更慢。使用方法如下(需要大概 32GB 內(nèi)存)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).float()
如果你的內(nèi)存不足的話,也可以使用量化后的模型
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).float()
在 cpu 上運(yùn)行量化后的模型需要安裝?gcc
?與?openmp
。多數(shù) Linux 發(fā)行版默認(rèn)已安裝。對(duì)于 Windows ,可在安裝?TDM-GCC?時(shí)勾選?openmp
。 Windows 測(cè)試環(huán)境?gcc
?版本為?TDM-GCC 10.3.0
, Linux 為?gcc 11.3.0
。在 MacOS 上請(qǐng)參考?Q1。
Mac 部署
對(duì)于搭載了 Apple Silicon 或者 AMD GPU 的 Mac,可以使用 MPS 后端來在 GPU 上運(yùn)行 ChatGLM2-6B。需要參考 Apple 的?官方說明?安裝 PyTorch-Nightly(正確的版本號(hào)應(yīng)該是2.x.x.dev2023xxxx,而不是 2.x.x)。
目前在 MacOS 上只支持從本地加載模型。將代碼中的模型加載改為從本地加載,并使用 mps 后端:
model = AutoModel.from_pretrained("your local path", trust_remote_code=True).to('mps')
加載半精度的 ChatGLM2-6B 模型需要大概 13GB 內(nèi)存。內(nèi)存較小的機(jī)器(比如 16GB 內(nèi)存的 MacBook Pro),在空余內(nèi)存不足的情況下會(huì)使用硬盤上的虛擬內(nèi)存,導(dǎo)致推理速度嚴(yán)重變慢。 此時(shí)可以使用量化后的模型 chatglm2-6b-int4。因?yàn)?GPU 上量化的 kernel 是使用 CUDA 編寫的,因此無法在 MacOS 上使用,只能使用 CPU 進(jìn)行推理。 為了充分使用 CPU 并行,還需要單獨(dú)安裝 OpenMP。
協(xié)議
本倉庫的代碼依照?Apache-2.0?協(xié)議開源,ChatGLM2-6B 模型的權(quán)重的使用則需要遵循?Model License。ChatGLM2-6B 權(quán)重對(duì)學(xué)術(shù)研究完全開放,在獲得官方的書面許可后,亦允許商業(yè)使用。如果您發(fā)現(xiàn)我們的開源模型對(duì)您的業(yè)務(wù)有用,我們歡迎您對(duì)下一代模型 ChatGLM3 研發(fā)的捐贈(zèng)。申請(qǐng)商用許可與捐贈(zèng)請(qǐng)聯(lián)系?yiwen.xu@zhipuai.cn。文章來源:http://www.zghlxwxcb.cn/news/detail-642289.html
引用
如果你覺得我們的工作有幫助的話,請(qǐng)考慮引用下列論文,ChatGLM2-6B 的論文會(huì)在近期公布,敬請(qǐng)期待~文章來源地址http://www.zghlxwxcb.cn/news/detail-642289.html
@article{zeng2022glm,
title={Glm-130b: An open bilingual pre-trained model},
author={Zeng, Aohan and Liu, Xiao and Du, Zhengxiao and Wang, Zihan and Lai, Hanyu and Ding, Ming and Yang, Zhuoyi and Xu, Yifan and Zheng, Wendi and Xia, Xiao and others},
journal={arXiv preprint arXiv:2210.02414},
year={2022}
}
到了這里,關(guān)于ChatGLM2-6B github頁面 介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!