ChatGLM-6B 是一個(gè)開(kāi)源的、支持中英雙語(yǔ)的對(duì)話語(yǔ)言模型,基于 General Language Model (GLM) 架構(gòu),具有 62 億參數(shù)。結(jié)合模型量化技術(shù),用戶可以在消費(fèi)級(jí)的顯卡上進(jìn)行本地部署(INT4 量化級(jí)別下最低只需 6GB 顯存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技術(shù),針對(duì)中文問(wèn)答和對(duì)話進(jìn)行了優(yōu)化。經(jīng)過(guò)約 1T 標(biāo)識(shí)符的中英雙語(yǔ)訓(xùn)練,輔以監(jiān)督微調(diào)、反饋?zhàn)灾?、人?lèi)反饋強(qiáng)化學(xué)習(xí)等技術(shù)的加持,62 億參數(shù)的 ChatGLM-6B 已經(jīng)能生成相當(dāng)符合人類(lèi)偏好的回答。
今天給大家分享如何在矩池云服務(wù)器復(fù)現(xiàn) ChatGLM-6B,用 GPU 跑模型真是絲滑啊。
硬件要求
如果是GPU: 顯存需要大于6G。
- ChatGLM-6B 是一個(gè)開(kāi)源的、支持中英雙語(yǔ)問(wèn)答的對(duì)話語(yǔ)言模型,基于 General Language Model (GLM) 架構(gòu),具有 62 億參數(shù)。結(jié)合模型量化技術(shù),用戶可以在消費(fèi)級(jí)的顯卡上進(jìn)行本地部署(INT4 量化級(jí)別下最低只需 6GB 顯存)。ChatGLM-6B 使用了和 ChatGLM 相同的技術(shù),針對(duì)中文問(wèn)答和對(duì)話進(jìn)行了優(yōu)化。經(jīng)過(guò)約 1T 標(biāo)識(shí)符的中英雙語(yǔ)訓(xùn)練,輔以監(jiān)督微調(diào)、反饋?zhàn)灾⑷祟?lèi)反饋強(qiáng)化學(xué)習(xí)等技術(shù)的加持,62 億參數(shù)的 ChatGLM-6B 已經(jīng)能生成相當(dāng)符合人類(lèi)偏好的回答。
- ChatGLM-6B-INT8 是 ChatGLM-6B 量化后的模型權(quán)重。具體的,ChatGLM-6B-INT8 對(duì) ChatGLM-6B 中的 28 個(gè) GLM Block 進(jìn)行了 INT8 量化,沒(méi)有對(duì) Embedding 和 LM Head 進(jìn)行量化。量化后的模型理論上 8G 顯存(使用 CPU 即內(nèi)存)即可推理,具有在嵌入式設(shè)備(如樹(shù)莓派)上運(yùn)行的可能。
- ChatGLM-6B-INT4 是 ChatGLM-6B 量化后的模型權(quán)重。具體的,ChatGLM-6B-INT4 對(duì) ChatGLM-6B 中的 28 個(gè) GLM Block 進(jìn)行了 INT4 量化,沒(méi)有對(duì) Embedding 和 LM Head 進(jìn)行量化。量化后的模型理論上 6G 顯存(使用 CPU 即內(nèi)存)即可推理,具有在嵌入式設(shè)備(如樹(shù)莓派)上運(yùn)行的可能。
如果是CPU: 內(nèi)存需要大于32G。
云服務(wù)器配置
如果你自己沒(méi)有顯卡,或者電腦運(yùn)行內(nèi)存不怎么辦?很簡(jiǎn)單,租一個(gè)云電腦就可以了,今天將教大家如何在矩池云上復(fù)現(xiàn) ChatGLM。
以下步驟需要在電腦上操作,手機(jī)屏幕太小不好操作!
注冊(cè)賬號(hào)
直接在矩池云官網(wǎng)進(jìn)行注冊(cè),注冊(cè)完成后可以關(guān)注矩池云公眾號(hào)可以獲得體驗(yàn)金,可租用機(jī)器進(jìn)行測(cè)試配置。
上傳模型文件
由于 Huggingface 下載不穩(wěn)定,建議大家本地先下載好相關(guān)模型文件。
- FP16 無(wú)量化模型下載地址:https://huggingface.co/THUDM/chatglm-6b
- INT8 模型下載地址:https://huggingface.co/THUDM/chatglm-6b-int8
- INT 4模型下載地址:https://huggingface.co/THUDM/chatglm-6b-int4
本地下載方法:
- 安裝 git
- 安裝 git lfs: 直接官網(wǎng)下載安裝包安裝即可 https://git-lfs.com/
- 使用 git lfs 下載
# 初始化
git lfs install
# 下載
git clone https://huggingface.co/THUDM/chatglm-6b-int4
大家本地下載好后,上傳到云平臺(tái)網(wǎng)盤(pán)(可離線上傳不花錢(qián))。
- 方法1: 直接通過(guò)矩池云網(wǎng)盤(pán)上傳 https://matpool.com/user/matbox
不用租用機(jī)器傳數(shù)據(jù)
上傳后如果空間不夠,需要進(jìn)行擴(kuò)容。
- 方法2: 租用機(jī)器后,通過(guò) scp 上傳數(shù)據(jù)
需要花錢(qián)開(kāi)機(jī)傳數(shù)據(jù),每次租用都得上傳,不方便。
比如你租用機(jī)器后顯示 ssh 鏈接為:ssh -p 26378 root@matpool.com
本地打開(kāi)CMD/PowerShell/終端,輸入下面指令進(jìn)行數(shù)據(jù)傳輸:
scp -r -P 26378 本地文件/文件夾路徑 root@matpool.com:/home
這樣數(shù)據(jù)會(huì)上傳到租用機(jī)器的 /home
目錄下。
租用機(jī)器
在矩池云主機(jī)市場(chǎng):https://matpool.com/host-market/gpu,如果復(fù)現(xiàn) FP16無(wú)量化模型,至少需要選擇 A4000 顯卡;如果復(fù)現(xiàn) INT4或者INT8模型,至少需要選擇 A2000 顯卡。 然后點(diǎn)擊租用按鈕。(你選其他顯卡也行)
租用頁(yè)面,搜索 pytorch1.11,選擇這個(gè)鏡像,我就是用這個(gè)鏡像復(fù)現(xiàn)的 ChatGLM-6B。
選擇鏡像后在高級(jí)選項(xiàng)里添加一個(gè) 8000 端口,后面部署 Web 服務(wù)用。
機(jī)器租用成功后點(diǎn)擊 Jupyterlab 點(diǎn)擊打開(kāi),即可快速打開(kāi) Jupyterlab,開(kāi)始運(yùn)行代碼了。
環(huán)境配置+代碼運(yùn)行
在自己電腦配置進(jìn)行的安裝 miniconda
和安裝 Python3.9
以及安裝Nvidia驅(qū)動(dòng)+Cuda
都不用操作,因?yàn)榫爻卦埔呀?jīng)幫我們配置好了。
1> Clone項(xiàng)目代碼
你也可以自己 clone 代碼,代碼我們存到 /home 下。
cd /home
git clone https://ghproxy.com/https://github.com/THUDM/ChatGLM-6B.git
項(xiàng)目目錄結(jié)構(gòu):
.
├── PROJECT.md
├── README.md
├── README_en.md
├── api.py # 應(yīng)用層:GLMAPI 版本
├── cli_demo.py # 應(yīng)用層:GLMCLI 版本
├── examples
├── limitations
├── ptuning
├── requirements.txt # 依賴(lài):項(xiàng)目Python依賴(lài)
├── resources
├── utils.py
├── web_demo.py # 應(yīng)用層:GLMWEB 版本
├── web_demo2.py # 應(yīng)用層:GLMWEB2 版本
└── web_demo_old.py # 應(yīng)用層:GLMWEB3 版本
2> 安裝項(xiàng)目依賴(lài)包
# 進(jìn)入項(xiàng)目目錄
cd ChatGLM-6B
# 安裝依賴(lài)
pip install -r requirements.txt
3> 下載模型文件
在最開(kāi)始你應(yīng)該就已經(jīng)下載好模型,并把相關(guān)文件上傳到服務(wù)器了。
將網(wǎng)盤(pán)模型文件夾復(fù)制到項(xiàng)目文件夾下,按以下操作創(chuàng)建:
mkdir /home/ChatGLM-6B/THUDM
cd /home/ChatGLM-6B/THUDM
# 將網(wǎng)盤(pán)下的 chatglm-6b-int4 模型文件夾復(fù)制到當(dāng)前目錄(/home/ChatGLM-6B/THUDM)
cp -r /mnt/chatglm-6b-int4 ./
測(cè)試運(yùn)行
在 /home/ChatGLM-6B
下新建一個(gè) notebook,
- 測(cè)試運(yùn)行
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
# CPU
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()
# GPU
# model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好, 自我介紹下,我可以用你做什么", history=[])
print(response)
首先會(huì)檢查模型是否正確~
簡(jiǎn)單問(wèn)個(gè)問(wèn)題,2-3s 可以出答案:
response, history = model.chat(tokenizer, "Python寫(xiě)一個(gè)Excel表合并腳本", history=[])
print(response)
問(wèn)代碼的話運(yùn)行稍微慢點(diǎn)~得10-20s左右。
GPU使用情況:
response, history = model.chat(tokenizer, "我現(xiàn)在有個(gè)csv數(shù)據(jù)表, 表頭是:用戶手機(jī)號(hào) 上次登錄時(shí)間 超出空間,需要統(tǒng)計(jì)指定日期前登錄用戶超出空間總和,并打印這些用戶手機(jī)號(hào);另外還需要統(tǒng)計(jì)超出指定容量用戶的總超出空間數(shù),并打印這些用戶手機(jī)號(hào),使用python pandas 實(shí)現(xiàn),假設(shè)數(shù)據(jù)文件為:123.csv", history=[])
print(response)
對(duì)于復(fù)雜問(wèn)題,等待時(shí)間更長(zhǎng)40s左右,回復(fù)的代碼里參數(shù)命名竟然還有中文?。。?/p>
- GLMCLI 版本 運(yùn)行
# 進(jìn)入項(xiàng)目目錄
cd /home/ChatGLM-6B
# 啟動(dòng)腳本
python cli_demo.py
效果如圖所示:
- GLMAPI 版本 運(yùn)行
# 進(jìn)入項(xiàng)目目錄
cd /home/ChatGLM-6B
# 啟動(dòng)腳本
python api.py
啟動(dòng)成功后,服務(wù)在 8000 端口,你需要發(fā)送POST請(qǐng)求。前面租用機(jī)器我們自定義了 8000 端口,在租用頁(yè)面可以獲得對(duì)應(yīng)的公網(wǎng)鏈接:
比如:https://hz.xxxx.com:xxxx/?token=xxxxx
需要注意,實(shí)際我們請(qǐng)求不需要 token,所以直接用:https://hz.xxxx.com:xxxx 這段即可。
curl請(qǐng)求:
curl -X POST "https://hz.xxxx.com:xxxx" \
-H 'Content-Type: application/json' \
-d '{"prompt": "你好", "history": []}'
Python請(qǐng)求:
import requests
import json
def getGLM(prompt, history):
'''
curl -X POST "https://hz.xxxx.com:xxxx" \
-H 'Content-Type: application/json' \
-d '{"prompt": "你好", "history": []}'
'''
url = 'https://hz.xxxx.com:xxxx'
# 設(shè)置請(qǐng)求頭
headers = {
'Content-Type': 'application/json'
}
data = {
'prompt': prompt,
'history': history
}
# 發(fā)送請(qǐng)求并獲取響應(yīng)
response = requests.post(url, headers=headers, data=json.dumps(data))
# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 200:
# 獲取響應(yīng)數(shù)據(jù)
rsp = response.json()
return rsp
else:
print('請(qǐng)求失敗,狀態(tài)碼:', response.status_code)
# 測(cè)試請(qǐng)求
history=[]
prompt = "假設(shè)你是一位Python高手,請(qǐng)用Python Pandas 模塊實(shí)現(xiàn)一個(gè)Excel文件批量合并腳本"
getGLM(prompt, history)
和服務(wù)器上直接請(qǐng)求速度差不多,30s左右。
- GLMWEB3 版本 運(yùn)行
# 進(jìn)入項(xiàng)目目錄
cd /home/ChatGLM-6B
# 安裝依賴(lài)
pip install streamlit streamlit_chat
# 啟動(dòng)腳本
streamlit run web_demo2.py --server.port 8000 --server.address 0.0.0.0
運(yùn)行后服務(wù)會(huì)啟動(dòng)到 8000端口,host 設(shè)置成0.0.0.0,這樣我們?cè)L問(wèn)租用頁(yè)面 8000 端口鏈接即可訪問(wèn)到對(duì)應(yīng)服務(wù)了。
前面租用機(jī)器我們自定義了 8000 端口,在租用頁(yè)面可以獲得對(duì)應(yīng)的公網(wǎng)鏈接:
比如:https://hz.xxxx.com:xxxx/?token=xxxxx
需要注意,實(shí)際我們請(qǐng)求不需要 token,所以直接用:https://hz.xxxx.com:xxxx 這段即可。
這個(gè)第一次運(yùn)行可能比較慢,它是提問(wèn)的時(shí)候才開(kāi)始加載檢查模型。
說(shuō)實(shí)話,這個(gè)問(wèn)題的回答有點(diǎn)出乎意料,給了一個(gè)用 pygame 寫(xiě)的猜數(shù)游戲,一般都會(huì)回復(fù)那種 cmd 版本。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-511911.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-511911.html
到了這里,關(guān)于如何在矩池云復(fù)現(xiàn)開(kāi)源對(duì)話語(yǔ)言模型 ChatGLM的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!