ChatGLM2-6B_ An Open Bilingual Chat LLM _ 開源雙語對話語言模型
一、介紹
- 更強大的性能:基于 ChatGLM 初代模型的開發(fā)經(jīng)驗,我們?nèi)嫔壛?ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 [GLM]的混合目標函數(shù),經(jīng)過了 1.4T 中英標識符的預訓練與人類偏好對齊訓練,評測結(jié)果顯示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等數(shù)據(jù)集上的性能取得了大幅度的提升,在同尺寸開源模型中具有較強的競爭力。
- 更長的上下文:基于 [FlashAttention]技術(shù),我們將基座模型的上下文長度(Context Length)由 ChatGLM-6B 的 2K 擴展到了 32K,并在對話階段使用 8K 的上下文長度訓練。對于更長的上下文,我們發(fā)布了 [ChatGLM2-6B-32K] 模型。[LongBench]的測評結(jié)果表明,在等量級的開源模型中,ChatGLM2-6B-32K 有著較為明顯的競爭優(yōu)勢。
- 更高效的推理:基于 [Multi-Query Attention] 技術(shù),ChatGLM2-6B 有更高效的推理速度和更低的顯存占用:在官方的模型實現(xiàn)下,推理速度相比初代提升了 42%,INT4 量化下,6G 顯存支持的對話長度由 1K 提升到了 8K。
- 更開放的協(xié)議:ChatGLM2-6B 權(quán)重對學術(shù)研究完全開放,在填寫[問卷]進行登記后亦允許免費商業(yè)使用。
ChatGLM2-6B 開源模型旨在與開源社區(qū)一起推動大模型技術(shù)發(fā)展,懇請開發(fā)者和大家遵守開源協(xié)議,勿將開源模型和代碼及基于開源項目產(chǎn)生的衍生物用于任何可能給國家和社會帶來危害的用途以及用于任何未經(jīng)過安全評估和備案的服務(wù)。目前,本項目團隊未基于 ChatGLM2-6B 開發(fā)任何應(yīng)用,包括網(wǎng)頁端、安卓、蘋果 iOS 及 Windows App 等應(yīng)用。
盡管模型在訓練的各個階段都盡力確保數(shù)據(jù)的合規(guī)性和準確性,但由于 ChatGLM2-6B 模型規(guī)模較小,且模型受概率隨機性因素影響,無法保證輸出內(nèi)容的準確性,且模型易被誤導。本項目不承擔開源模型和代碼導致的數(shù)據(jù)安全、輿情風險或發(fā)生任何模型被誤導、濫用、傳播、不當利用而產(chǎn)生的風險和責任。
二、使用方式
1、環(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 及以上的版本,以獲得最佳的推理性能。
2、代碼調(diào)用
可以通過如下代碼調(diào)用 ChatGLM2-6B 模型來生成對話:
>>> 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)
晚上睡不著可能會讓你感到焦慮或不舒服,但以下是一些可以幫助你入睡的方法:
1. 制定規(guī)律的睡眠時間表:保持規(guī)律的睡眠時間表可以幫助你建立健康的睡眠習慣,使你更容易入睡。盡量在每天的相同時間上床,并在同一時間起床。
2. 創(chuàng)造一個舒適的睡眠環(huán)境:確保睡眠環(huán)境舒適,安靜,黑暗且溫度適宜。可以使用舒適的床上用品,并保持房間通風。
3. 放松身心:在睡前做些放松的活動,例如泡個熱水澡,聽些輕柔的音樂,閱讀一些有趣的書籍等,有助于緩解緊張和焦慮,使你更容易入睡。
4. 避免飲用含有咖啡因的飲料:咖啡因是一種刺激性物質(zhì),會影響你的睡眠質(zhì)量。盡量避免在睡前飲用含有咖啡因的飲料,例如咖啡,茶和可樂。
5. 避免在床上做與睡眠無關(guān)的事情:在床上做些與睡眠無關(guān)的事情,例如看電影,玩游戲或工作等,可能會干擾你的睡眠。
6. 嘗試呼吸技巧:深呼吸是一種放松技巧,可以幫助你緩解緊張和焦慮,使你更容易入睡。試著慢慢吸氣,保持幾秒鐘,然后緩慢呼氣。
如果這些方法無法幫助你入睡,你可以考慮咨詢醫(yī)生或睡眠專家,尋求進一步的建議。
3、從本地加載模型
以上代碼會由 transformers
自動下載模型實現(xiàn)和參數(shù)。完整的模型實現(xiàn)在 [Hugging Face Hub]。如果你的網(wǎng)絡(luò)環(huán)境較差,下載模型參數(shù)可能會花費較長時間甚至失敗。此時可以先將模型下載到本地,然后從本地加載。
從 Hugging Face Hub 下載模型需要先[安裝Git LFS],然后運行
git clone https://huggingface.co/THUDM/chatglm2-6b
如果你從 Hugging Face Hub 上下載 checkpoint 的速度較慢,可以只下載模型實現(xiàn)
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
然后從[這里]手動下載模型參數(shù)文件,并將下載的文件替換到本地的 chatglm2-6b
目錄下。
將模型下載到本地之后,將以上代碼中的 THUDM/chatglm2-6b
替換為你本地的 chatglm2-6b
文件夾的路徑,即可從本地加載模型。
模型的實現(xiàn)仍然處在變動中。如果希望固定使用的模型實現(xiàn)以保證兼容性,可以在 from_pretrained
的調(diào)用中增加 revision="v1.0"
參數(shù)。v1.0
是當前最新的版本號,完整的版本列表參見 [Change Log]。
4、API 部署
首先需要安裝額外的依賴 pip install fastapi uvicorn
,然后運行倉庫中的 api.py:
python api.py
默認部署在本地的 8000 端口,通過 POST 方法進行調(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 實現(xiàn)了 OpenAI 格式的流式 API 部署,可以作為任意基于 ChatGPT 的應(yīng)用的后端,比如 ChatGPT-Next-Web??梢酝ㄟ^運行倉庫中的openai_api.py 進行部署:
python openai_api.py
進行 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)
三、低成本部署
1、模型量化
默認情況下,模型以 FP16 精度加載,運行上述代碼需要大概 13GB 顯存。如果你的 GPU 顯存有限,可以嘗試以量化方式加載模型,使用方法如下:
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).cuda()
模型量化會帶來一定的性能損失,經(jīng)過測試,ChatGLM2-6B 在 4-bit 量化下仍然能夠進行自然流暢的生成。 量化模型的參數(shù)文件也可以從[這里]手動下載。
2、CPU 部署
如果你沒有 GPU 硬件的話,也可以在 CPU 上進行推理,但是推理速度會更慢。使用方法如下(需要大概 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 上運行量化后的模型需要安裝 gcc
與 openmp
。多數(shù) Linux 發(fā)行版默認已安裝。對于 Windows ,可在安裝 [TDM-GCC] 時勾選 openmp
。 Windows 測試環(huán)境 gcc
版本為 TDM-GCC 10.3.0
, Linux 為 gcc 11.3.0
。在 MacOS 上請參考 Q1。
3、Mac 部署
對于搭載了 Apple Silicon 或者 AMD GPU 的 Mac,可以使用 MPS 后端來在 GPU 上運行 ChatGLM2-6B。需要參考 Apple 的 官方說明 安裝 PyTorch-Nightly(正確的版本號應(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)存較小的機器(比如 16GB 內(nèi)存的 MacBook Pro),在空余內(nèi)存不足的情況下會使用硬盤上的虛擬內(nèi)存,導致推理速度嚴重變慢。
此時可以使用量化后的模型 chatglm2-6b-int4。因為 GPU 上量化的 kernel 是使用 CUDA 編寫的,因此無法在 MacOS 上使用,只能使用 CPU 進行推理。
為了充分使用 CPU 并行,還需要單獨安裝 OpenMP。
在 Mac 上進行推理也可以使用 ChatGLM.cpp
4、多卡部署
如果你有多張 GPU,但是每張 GPU 的顯存大小都不足以容納完整的模型,那么可以將模型切分在多張GPU上。首先安裝 accelerate: pip install accelerate
,然后通過如下方法加載模型:
from utils import load_model_on_gpus
model = load_model_on_gpus("THUDM/chatglm2-6b", num_gpus=2)
即可將模型部署到兩張 GPU 上進行推理。你可以將 num_gpus
改為你希望使用的 GPU 數(shù)。默認是均勻切分的,你也可以傳入 device_map
參數(shù)來自己指定。
四、協(xié)議
本倉庫的代碼依照 Apache-2.0 協(xié)議開源,ChatGLM2-6B 模型的權(quán)重的使用則需要遵循 Model License。ChatGLM2-6B 權(quán)重對學術(shù)研究完全開放,在填寫問卷進行登記后亦允許免費商業(yè)使用。文章來源:http://www.zghlxwxcb.cn/news/detail-850814.html
五、源程序下載
源程序下載地址:ChatGLM2-6B_ An Open Bilingual Chat LLM _ 開源雙語對話語言模型文章來源地址http://www.zghlxwxcb.cn/news/detail-850814.html
到了這里,關(guān)于ChatGLM2-6B_ An Open Bilingual Chat LLM _ 開源雙語對話語言模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!