Chatglm-本地部署(windows)-自己ai組合的第一步
官方基于wsl的windows部署教程:
https://github.com/ZhangErling/ChatGLM-6B/blob/main/deployment_windows.md
本教程基于:
windows11
CUDA 12.1
Anaconda
Nvidia?
顯卡2080ti

開始:
查看當(dāng)前電腦的CUDA版本:
打開“命令提示符(CMD)”
輸入nvidia-smi


下載所用文件:
下載Chatglm-6b項目(Github)
https://github.com/THUDM/ChatGLM-6B
百度網(wǎng)盤(無法使用github)
鏈接:https://pan.baidu.com/s/1fSfHv2Hk70o3Pxzp91lzeQ?
提取碼:q6qh

下載AnaConda(Windows):
https://www.anaconda.com (主頁)
https://repo.anaconda.com/archive/Anaconda3-2023.03-Windows-x86_64.exe
https://mirrors.bfsu.edu.cn/anaconda/(北京外國語大學(xué)開源軟件鏡像站)

下載pytorch文件(以防各種莫名其妙的pytorch報錯):
命令行方式:https://pytorch.org/get-started/locally/
Pytorch下載:
https://download.pytorch.org/whl/ (所有庫下載)
pytorch:
https://download.pytorch.org/whl/torch
cp:python版本(cp310=python3.10版本)
cu:cuda版本(cu118=cuda11.8版本)? ? ?使用顯卡
cu118可以適用于cuda12.1版本
cpu:cpu版本? ? 使用CPU
cpu版本適用于顯卡顯存不足6g的電腦
2.0.0為最新版本
Pytorch Audio
https://download.pytorch.org/whl/torchaudio
Pytorch Vision
https://download.pytorch.org/torchvision/

CUDA下載(CUDA Toolkit):
https://developer.nvidia.com/cuda-downloads

模型下載(本地部署使用,chatglm默認(rèn)為自動聯(lián)網(wǎng)下載):
百度網(wǎng)盤(無法使用huggingface,附屬文件要和模型一起使用)
鏈接:https://pan.baidu.com/s/1ScYBjh2XDU23D97EcQMDKQ?
提取碼:el57
huggingface.co版本下載:

模型下載位置:

這個當(dāng)中的所有文件都需要下載
https://huggingface.co/THUDM/chatglm-6b-int4-qe/tree/main(4G整合版,適用于電腦配置不高的人群)

https://huggingface.co/THUDM/chatglm-6b-int4/tree/main(5G整合版,適用于電腦配置不高的人群)

https://huggingface.co/THUDM/chatglm-6b/tree/main? ? (普通版,8個模型需要下載至少兩個)


安裝軟件:
Anaconda:
安裝成功后,命令無效首先檢查環(huán)境變量
安裝時:配置環(huán)境變量
https://blog.csdn.net/in546/article/details/117400839(CSDN教程)
安裝后:配置環(huán)境變量
https://zhuanlan.zhihu.com/p/123188004(知乎教程)
更改conda源
找到文件(C:/用戶/(用戶名)/.condarc文件):
以下內(nèi)容復(fù)制粘貼到.condarc文件
channels:
? - defaults
show_channel_urls: true
default_channels:
? - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
? - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
? - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
? conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
? msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
? bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
? menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
? pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
? pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
? simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
保存并關(guān)閉文件

CUDA安裝:
安裝成功后,命令無效首先檢查環(huán)境變量
https://blog.csdn.net/qq_42951560/article/details/116131410(基于此CSDN教程)

配置環(huán)境變量:
key(鍵):PYTORCH_CUDA_ALLOC_CONF
value(值):max_split_size_mb:1000
此環(huán)境變量用于解決 “CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 10.76 GiB total capacity; 4.29 GiB already allocated; 10.12 MiB free; 4.46 GiB reserved in total by PyTorch)” 此種錯誤,后續(xù)配置成功后出現(xiàn)錯誤可通過此種方式解決,1000可以修改為適合的任意數(shù)字
Chatglm配置:
在任意位置(可以是桌面)創(chuàng)建文件夾
例子:
C:\Users\用戶\Desktop\AI
解壓下載好的chatglm壓縮包到文件夾中
例子:
C:\Users\用戶\Desktop\AI\ChatGLM-6B-main
打開:Anaconda prompt


創(chuàng)建環(huán)境
輸入conda create -n 名字 想要安裝的包(=指定版本)
例子:
conda create -n chatglm python=3.10
然后輸入y,回車
創(chuàng)建成功后激活環(huán)境:
輸入conda activate 名字
例子:
conda activate chatglm

轉(zhuǎn)到chatglm項目文件夾
例子 :
cd C:\Users\用戶\Desktop\AI\ChatGLM-6B-main
接下來的操作路徑都為chatglm項目文件夾中
安裝軟件包:
安裝之前下載的pytorch系列包
輸入python -m pip install 包名(帶路徑)
假設(shè)我pytorch文件在C:\Users\用戶\Desktop\AI目錄下,
文件名稱:torch-2.0.0+cu118-cp310-cp310-win_amd64.whl
別復(fù)制文件名的時候忘了后綴
其他兩個pytorch系列文件同理
例子:
python -m pip install C:\Users\用戶\Desktop\AI\torch-2.0.0+cu118-cp310-cp310-win_amd64.whl

安裝完畢后輸入:
python -m pip install -r requirements.txt
python -m pip install gradio (啟動網(wǎng)頁版需要安裝)
全部安裝完成后就可以啟動(但是使用顯存默認(rèn)為13G,且并非使用本地模型)
網(wǎng)頁版
python web_demo.py
命令行版
python cli_demo.py
官方啟動(github文檔)
網(wǎng)頁版 Demo
首先安裝 Gradio:pip install gradio,然后運行倉庫中的 web_demo.py:
python web_demo.py
命令行 Demo
運行倉庫中 cli_demo.py:
python cli_demo.py
程序會在命令行中進(jìn)行交互式的對話,在命令行中輸入指示并回車即可生成回復(fù),輸入clear可以清空對話歷史,輸入stop終止程序。
API部署
首先需要安裝額外的依賴pip install fastapi uvicorn,然后運行倉庫中的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":"你好??!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。",? "history":[["你好","你好??!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。"]],? "status":200,? "time":"2023-03-23 21:38:40"}
其余配置項:
模型量化
默認(rèn)情況下,模型以 FP16 精度加載,運行上述代碼需要大概 13GB 顯存。如果你的 GPU 顯存有限,可以嘗試以量化方式加載模型,使用方法如下:
# 按需修改,目前只支持 4/8 bit 量化model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(4).cuda()
打開web_demo.py或者cli_demo.py或者api.py文件(三個文件相同)
4:使用6GB顯存
8:使用10GB顯存
將下列代碼
AutoModel.from_pretrained("THUDM/chatglm6b", trust_remote_code=True).half().cuda()
改為
AutoModel.from_pretrained("THUDM/chatglm6b", trust_remote_code=True).half().quantize(4).cuda()
模型修改(聯(lián)網(wǎng)):
(8g模型)THUDM/chatglm-6b
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(4).cuda()【使用6GB顯存】
(5g模型)THUDM/chatglm-6b-int4
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()
(4.3g模型)THUDM/chatglm-6b-int4-qe
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4-qe", trust_remote_code=True).half().cuda()
CPU方式使用(需要大概 32GB 內(nèi)存):
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float()
內(nèi)存不足,可以直接加載量化后的模型:
from_pretrained("THUDM/chatglm-6b-int4")
from_pretrained("THUDM/chatglm-6b-int4-qe")
本地加載模型:
local_dir:你的模型文件夾的相對路徑
checkpoint_path:模型名稱【例子:"THUDM/chatglm-6b-int4"】
checkpoint_path = "THUDM/chatglm-6b"【可以更改模型】
local_dir = "./你的模型文件夾的相對路徑"
tokenizer = AutoTokenizer.from_pretrained(checkpoint_path, trust_remote_code=True)
model = AutoModel.from_pretrained(checkpoint_path, trust_remote_code=True)
model.save_pretrained(local_dir)
tokenizer.save_pretrained(local_dir)
保存到本地后, checkpoint_path 換成本地路徑就是直接加載
(也可以不使用上面代碼,將下載的模型解壓到你的模型文件夾的相對路徑中,上面代碼用于下載文件)
tokenizer = AutoTokenizer.from_pretrained(local_dir, trust_remote_code=True)
model = AutoModel.from_pretrained(local_dir, trust_remote_code=True)
問題:https://github.com/THUDM/ChatGLM-6B/issues
[BUG/Help]gcc編譯第一個kernel報錯,編譯第二個成功,但是無法加載so · Issue #229 · THUDM/ChatGLM-6B (github.com)
[Feature] <怎樣才能實現(xiàn)真.離線模式>?
?https://github.com/THUDM/ChatGLM-6B/issues/253
[BUG/Help] Windows 下 INT-4 量化模型無法加載