安裝總結(jié):(不需要太大的壓力~~邦马,沒有使用GPU矩屁。)
- 下載模型
- clone項(xiàng)目chatglm.cpp
- 轉(zhuǎn)換模型
- 編譯-運(yùn)行
如果過程里有未知的坑,我覺得可能需要安裝下visual stidio早处,把一些涉及C捷雕,C++什么的東西安裝好椒丧,應(yīng)該就可以啦。本次安裝非区,大概需要半個(gè)小時(shí)瓜挽,下載文件需要十分鐘+,配置運(yùn)行征绸,大概二十分鐘久橙。
背景
今年一個(gè)比較熱鬧的話題就是大模型,最近因?yàn)橐恍┰蚬艿。残枰_始接觸一下淆衷,所以決定在windows上部署一個(gè)模型,然后去探索在工作中的使用渤弛。
chatglm-6b介紹
ChatGLM-6B 是一個(gè)開源的祝拯、支持中英雙語(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ì)中文問答和對(duì)話進(jìn)行了優(yōu)化。經(jīng)過約 1T 標(biāo)識(shí)符的中英雙語(yǔ)訓(xùn)練籽前,輔以監(jiān)督微調(diào)亭珍、反饋?zhàn)灾⑷祟惙答亸?qiáng)化學(xué)習(xí)等技術(shù)的加持枝哄,62 億參數(shù)的 ChatGLM-6B 已經(jīng)能生成相當(dāng)符合人類偏好的回答肄梨,更多信息請(qǐng)參考我們的博客。歡迎通過 chatglm.cn 體驗(yàn)更大規(guī)模的 ChatGLM 模型挠锥。
為了方便下游開發(fā)者針對(duì)自己的應(yīng)用場(chǎng)景定制模型众羡,我們同時(shí)實(shí)現(xiàn)了基于 P-Tuning v2 的高效參數(shù)微調(diào)方法 (使用指南) ,INT4 量化級(jí)別下最低只需 7GB 顯存即可啟動(dòng)微調(diào)蓖租。
ChatGLM-6B 權(quán)重對(duì)學(xué)術(shù)研究完全開放纱控,在填寫問卷進(jìn)行登記后亦允許免費(fèi)商業(yè)使用。
ChatGLM-6B 開源模型旨在與開源社區(qū)一起推動(dòng)大模型技術(shù)發(fā)展菜秦,懇請(qǐng)開發(fā)者和大家遵守開源協(xié)議甜害,勿將開源模型和代碼及基于開源項(xiàng)目產(chǎn)生的衍生物用于任何可能給國(guó)家和社會(huì)帶來危害的用途以及用于任何未經(jīng)過安全評(píng)估和備案的服務(wù)。目前球昨,本項(xiàng)目團(tuán)隊(duì)未基于 ChatGLM-6B 開發(fā)任何應(yīng)用尔店,包括網(wǎng)頁(yè)端、安卓、蘋果 iOS 及 Windows App 等應(yīng)用嚣州。
盡管模型在訓(xùn)練的各個(gè)階段都盡力確保數(shù)據(jù)的合規(guī)性和準(zhǔn)確性鲫售,但由于 ChatGLM-6B 模型規(guī)模較小,且模型受概率隨機(jī)性因素影響该肴,無(wú)法保證輸出內(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é)任阱州。
部署
由于沒有高性能的服務(wù)器,所以只好拿我的臺(tái)式機(jī)折騰法梯。雖然有顯卡苔货,但是不知道為什么,配置了很久也沒有配好立哑。所以只好選擇一些其他方案夜惭,充分利用我的CPU~
參考的項(xiàng)目:
1.下載模型
由于網(wǎng)絡(luò)不太好,沒法子從Hugging Face Hub 下載模型铛绰。所以按照ChatGLM-6B說的诈茧,分開兩步走:
-
下載模型實(shí)現(xiàn):
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
-
手動(dòng)下載模型參數(shù)文件,然后替換了上面的文件至耻。(清華網(wǎng)盤~)
2. 下載chatglm.cpp項(xiàng)目
項(xiàng)目的介紹:
Highlights:
- Pure C++ implementation based on ggml, working in the same way as llama.cpp.
- Accelerated memory-efficient CPU inference with int4/int8 quantization, optimized KV cache and parallel computing.
- Streaming generation with typewriter effect.
- Python binding, web demo, api servers and more possibilities.
Support Matrix:
- Hardwares: x86/arm CPU, NVIDIA GPU, Apple Silicon GPU
- Platforms: Linux, MacOS, Windows
- Models: ChatGLM-6B, ChatGLM2-6B, CodeGeeX2, Baichuan-13B, Baichuan2-13B
- 下載
git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp
- 轉(zhuǎn)換模型
python3 chatglm_cpp/convert.py -i THUDM/chatglm-6b -t q4_0 -o chatglm-ggml.bin
這里需要安裝一些包,但是比較奇怪的是镊叁,沒找到具體需要哪些~不過因?yàn)榘惭b了Anaconda尘颓,基本的包都有了,然后沒有怎么報(bào)錯(cuò)晦譬,只是提示缺失一個(gè)tabulate包疤苹。
em,這里還是列了下虛擬環(huán)境的包敛腌。(python3.11.3)
protobuf
transformers==4.27.1
cpm_kernels
torch>=1.10
gradio
mdtex2html
sentencepiece
accelerate
-
編譯執(zhí)行
windows的話卧土,需要安裝cmake,https://cmake.org/files/v3.22/
cmake -B build
cmake --build build -j --config Release
使用交互模式運(yùn)行:
.\build\bin\Release\main.exe -m chatglm-ggml.bin -i
測(cè)試下:
________ __ ________ __ ___
/ ____/ /_ ____ _/ /_/ ____/ / / |/ /_________ ____
/ / / __ \/ __ `/ __/ / __/ / / /|_/ // ___/ __ \/ __ \
/ /___/ / / / /_/ / /_/ /_/ / /___/ / / // /__/ /_/ / /_/ /
\____/_/ /_/\__,_/\__/\____/_____/_/ /_(_)___/ .___/ .___/
/_/ /_/
Welcome to ChatGLM.cpp! Ask whatever you want. Type 'clear' to clear context. Type 'stop' to exit.
Prompt > 中國(guó)的首都在哪里
ChatGLM > 中國(guó)的首都是北京。
Prompt > 如何使用python編寫腳本像樊,實(shí)現(xiàn)對(duì)sqlite數(shù)據(jù)庫(kù)的查詢操作
ChatGLM > 可以使用以下代碼段實(shí)現(xiàn)對(duì)SQLite數(shù)據(jù)庫(kù)的查詢操作:
```python
import sqlite3
# 連接到數(shù)據(jù)庫(kù)
conn = sqlite3.connect('database.db')
# 執(zhí)行查詢
cursor = conn.cursor()
cursor.execute('SELECT * FROM table_name')
# 輸出結(jié)果
for row in cursor:
print(row)
# 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close()
在上面的代碼中尤莺,需要將 database.db
替換為您實(shí)際的數(shù)據(jù)庫(kù)文件名,table_name
替換為您要查詢的表的名稱生棍。然后颤霎,執(zhí)行以下代碼即可查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù):
# 查詢數(shù)據(jù)
for row in cursor:
print(row)
如果需要進(jìn)行其他類型的操作,例如插入數(shù)據(jù)、刪除數(shù)據(jù)等友酱,可以修改上面的代碼晴音,并按照相應(yīng)的操作來進(jìn)行。同時(shí)缔杉,也需要注意在操作數(shù)據(jù)庫(kù)時(shí)锤躁,需要進(jìn)行 conn.close()
的操作,以釋放數(shù)據(jù)庫(kù)資源或详。
Prompt >
或者也可以這樣:
```toml
./build/bin/main -m chatglm-ggml.bin -p 你好
# 你好??系羞!我是人工智能助手 ChatGLM-6B,很高興見到你鸭叙,歡迎問我任何問題觉啊。