前言:
最近刚拿到实验室一个装了3张3090显卡的服务器账号,感觉不用来霍霍有点浪费,于是有了部署一个大语言模型的想法,除去下载权重和传文件到服务器上可能也就用了十分钟不到(这下看懂为啥python受众现在这么广了,只需要安装虚拟环境加执行pip install -r requirement就行,java maven考虑的就很多了,当然docker下众生平等),效果见下图。
显存占用:(12GB以上,3060以上应该没问题)
模型介绍:
ChatGLM是由清华大学和智谱AI联合研发的一系列支持中英双语对话的大语言模型,以其高效性能、开源特性和广泛适用性在业界备受关注。该系列模型基于GLM架构,通过大规模中英双语训练(数据规模达1T token),在中文任务上表现尤为突出。从2023年3月推出的ChatGLM-6B开始,到后续迭代的ChatGLM2和ChatGLM3,模型在推理效率、多轮对话、代码生成与执行、多模态理解等方面持续优化。ChatGLM3进一步增强了代码解释、网络搜索、Agent任务规划等能力,并支持长文本处理(32K上下文)。其低部署门槛(如INT4量化仅需6GB显存)使其能够适配消费级显卡和国产芯片(如昇腾、海光DCU),同时通过监督微调和强化学习技术实现更符合人类偏好的回答。应用场景覆盖教育、客服、编程辅助等,并已与腾讯轻联等平台集成,支持企业级应用。全系列开源策略和国产硬件适配(如手机端部署)使其成为国产大模型的代表性产品之一。
一、环境配置:
首先确保你的Windows主机或Linux服务器安装了Anaconda,Windows这方面博客应该挺多,Linux可以参考下面博客,配置也是十分简易,差不多十分钟能弄完。
Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)-CSDN博客https://blog.csdn.net/wlf2030/article/details/148098287?spm=1001.2014.3001.5501anaconda安装后,创建虚拟环境chatgpt:这里使用python3.8
conda create --name chatgpt python=3.8
创建后激活
Linux:
source activate chatgpt
Windows:
activate
conda activate chatgpt
需要安装一些库,这里提供三种方式:
1.官方版
官方链接如下:
2.网盘版
2025年5月22日的版本,也是本博客所用的版本
ChatGLM-6B-main.zip_免费高速下载|百度网盘-分享无限制https://pan.baidu.com/s/1IH49yQgmKHBDAzNWo5GUmg?pwd=6666
3.简易版
因为这个git仓库实际上有用的只有requirement.txt,剩余的均为模型调用的一些demo.py文件,所以只需要两个文件即可。
requirement.txt:
protobuf
transformers==4.27.1
cpm_kernels
torch>=1.10
gradio
mdtex2html
sentencepiece
accelerate
cli_demo.py
import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel
import readline
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()
os_name = platform.system()
clear_command = 'cls' if os_name == 'Windows' else 'clear'
stop_stream = False
def build_prompt(history):
prompt = "欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序"
for query, response in history:
prompt += f"\n\n用户:{query}"
prompt += f"\n\nChatGLM-6B:{response}"
return prompt
def signal_handler(signal, frame):
global stop_stream
stop_stream = True
def main():
history = []
global stop_stream
print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")
while True:
query = input("\n用户:")
if query.strip() == "stop":
break
if query.strip() == "clear":
history = []
os.system(clear_command)
print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")
continue
count = 0
for response, history in model.stream_chat(tokenizer, query, history=history):
if stop_stream:
stop_stream = False
break
else:
count += 1
if count % 8 == 0:
os.system(clear_command)
print(build_prompt(history), flush=True)
signal.signal(signal.SIGINT, signal_handler)
os.system(clear_command)
print(build_prompt(history), flush=True)
if __name__ == "__main__":
main()
下载好后,命令行到requirement.txt的根目录下,linux就一路cd,windows打开对应文件夹然后输入cmd,linux激活一次anaconda后面就全局激活不用管了,windows打开后还需要重复一遍上面激活的两行命令。
pip install -r requirements.txt
等待安装完毕即可,可选输入下面命令查看conda安装的所有库和对应版本。
conda list
版本如下:
(chatgpt) wlf@3090-2:~/project/ChatGLM-6B-main$ conda list
# packages in environment at /home/wlf/anaconda3/envs/chatgpt:
#
# Name Version Build Channel
_libgcc_mutex 0.1 main
_openmp_mutex 5.1 1_gnu
accelerate 1.0.1 pypi_0 pypi
aiofiles 23.2.1 pypi_0 pypi
annotated-types 0.7.0 pypi_0 pypi
anyio 4.5.2 pypi_0 pypi
ca-certificates 2025.2.25 h06a4308_0
certifi 2025.4.26 pypi_0 pypi
charset-normalizer 3.4.2 pypi_0 pypi
click 8.1.8 pypi_0 pypi
contourpy 1.1.1 pypi_0 pypi
cpm-kernels 1.0.11 pypi_0 pypi
cycler 0.12.1 pypi_0 pypi
exceptiongroup 1.3.0 pypi_0 pypi
fastapi 0.115.12 pypi_0 pypi
ffmpy 0.5.0 pypi_0 pypi
filelock 3.16.1 pypi_0 pypi
fonttools 4.57.0 pypi_0 pypi
fsspec 2025.3.0 pypi_0 pypi
gradio 4.44.1 pypi_0 pypi
gradio-client 1.3.0 pypi_0 pypi
h11 0.16.0 pypi_0 pypi
httpcore 1.0.9 pypi_0 pypi
httpx 0.28.1 pypi_0 pypi
huggingface-hub 0.31.4 pypi_0 pypi
idna 3.10 pypi_0 pypi
importlib-metadata 8.5.0 pypi_0 pypi
importlib-resources 6.4.5 pypi_0 pypi
jinja2 3.1.6 pypi_0 pypi
kiwisolver 1.4.7 pypi_0 pypi
latex2mathml 3.77.0 pypi_0 pypi
ld_impl_linux-64 2.40 h12ee557_0
libffi 3.4.4 h6a678d5_1
libgcc-ng 11.2.0 h1234567_1
libgomp 11.2.0 h1234567_1
libstdcxx-ng 11.2.0 h1234567_1
markdown 3.7 pypi_0 pypi
markdown-it-py 3.0.0 pypi_0 pypi
markupsafe 2.1.5 pypi_0 pypi
matplotlib 3.7.5 pypi_0 pypi
mdtex2html 1.3.1 pypi_0 pypi
mdurl 0.1.2 pypi_0 pypi
mpmath 1.3.0 pypi_0 pypi
ncurses 6.4 h6a678d5_0
networkx 3.1 pypi_0 pypi
numpy 1.24.4 pypi_0 pypi
nvidia-cublas-cu12 12.1.3.1 pypi_0 pypi
nvidia-cuda-cupti-cu12 12.1.105 pypi_0 pypi
nvidia-cuda-nvrtc-cu12 12.1.105 pypi_0 pypi
nvidia-cuda-runtime-cu12 12.1.105 pypi_0 pypi
nvidia-cudnn-cu12 9.1.0.70 pypi_0 pypi
nvidia-cufft-cu12 11.0.2.54 pypi_0 pypi
nvidia-curand-cu12 10.3.2.106 pypi_0 pypi
nvidia-cusolver-cu12 11.4.5.107 pypi_0 pypi
nvidia-cusparse-cu12 12.1.0.106 pypi_0 pypi
nvidia-nccl-cu12 2.20.5 pypi_0 pypi
nvidia-nvjitlink-cu12 12.9.41 pypi_0 pypi
nvidia-nvtx-cu12 12.1.105 pypi_0 pypi
openssl 3.0.16 h5eee18b_0
orjson 3.10.15 pypi_0 pypi
packaging 25.0 pypi_0 pypi
pandas 2.0.3 pypi_0 pypi
pillow 10.4.0 pypi_0 pypi
pip 24.2 py38h06a4308_0
protobuf 5.29.4 pypi_0 pypi
psutil 7.0.0 pypi_0 pypi
pydantic 2.10.6 pypi_0 pypi
pydantic-core 2.27.2 pypi_0 pypi
pydub 0.25.1 pypi_0 pypi
pygments 2.19.1 pypi_0 pypi
pyparsing 3.1.4 pypi_0 pypi
python 3.8.20 he870216_0
python-dateutil 2.9.0.post0 pypi_0 pypi
python-multipart 0.0.20 pypi_0 pypi
pytz 2025.2 pypi_0 pypi
pyyaml 6.0.2 pypi_0 pypi
readline 8.2 h5eee18b_0
regex 2024.11.6 pypi_0 pypi
requests 2.32.3 pypi_0 pypi
rich 14.0.0 pypi_0 pypi
ruff 0.11.10 pypi_0 pypi
safetensors 0.5.3 pypi_0 pypi
semantic-version 2.10.0 pypi_0 pypi
sentencepiece 0.2.0 pypi_0 pypi
setuptools 75.1.0 py38h06a4308_0
shellingham 1.5.4 pypi_0 pypi
six 1.17.0 pypi_0 pypi
sniffio 1.3.1 pypi_0 pypi
sqlite 3.45.3 h5eee18b_0
starlette 0.44.0 pypi_0 pypi
sympy 1.13.3 pypi_0 pypi
tk 8.6.14 h39e8969_0
tokenizers 0.13.3 pypi_0 pypi
tomlkit 0.12.0 pypi_0 pypi
torch 2.4.1 pypi_0 pypi
tqdm 4.67.1 pypi_0 pypi
transformers 4.27.1 pypi_0 pypi
triton 3.0.0 pypi_0 pypi
typer 0.15.4 pypi_0 pypi
typing-extensions 4.13.2 pypi_0 pypi
tzdata 2025.2 pypi_0 pypi
urllib3 2.2.3 pypi_0 pypi
uvicorn 0.33.0 pypi_0 pypi
websockets 12.0 pypi_0 pypi
wheel 0.44.0 py38h06a4308_0
xz 5.6.4 h5eee18b_1
zipp 3.20.2 pypi_0 pypi
zlib 1.2.13 h5eee18b_1
二、权重下载:
1.好运版
如果你的主机和服务器能够直接连接外网的话,理论上直接执行上面的cli_demo.py文件程序会自动从huggingface上下载权重并能直接执行。
python cli_demo.py
2.正常版
当然学校服务器内网不太可能直接访问外网,所以官方也有解决方案,具体如下,先下载git large file storage,因为权重十几个G传统git无法clone,git large file storage链接如下:
Git Large File Storage | Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.https://git-lfs.com/不太确定是否在不下git的时候也能正常使用,因为安装的时候它报了个警告说我的git安装在D盘不在系统文件目录下,是可疑的,是否信任该git,如果你看到这个警告选择信任即可。
然后就和正常git使用一样,就能下载权重部分的文件了
git clone https://huggingface.co/THUDM/chatglm-6b
3.直接版
当然如果你嫌正常官方版本太麻烦还需要安这安那,那也可以直接去对应仓库一个个文件下载,仓库链接如下:
THUDM/chatglm-6b at mainhttps://huggingface.co/THUDM/chatglm-6b/tree/main
下载的按钮在上图框框中间,强烈建议一个个文件下载,否则全下一半来个网络问题就知道有多无语了,如果你出现下载出错情况,重新下载时注意下载的文件名称是否与原来一致,因为浏览器重新下载时会自动把文件名后面加个(1),但配置中指定了文件名所以需要保持一致。
4.保底版
如果很不幸因为网络问题下载不了,也可以直接使用下面的网盘链接,注意这个和上面的链接东西不一样。
chatglm-6b.zip_免费高速下载|百度网盘-分享无限制https://pan.baidu.com/s/1GoQt25nBfvwPafcVGkBfjg?pwd=6666
三、运行
打开之前第一次下载的cli_demo.py文件,将其中的THUDM/chatglm-6b替换为你本机上chatglm-6b路径。
替换后如下效果:
然后执行这个python文件即可
python cli_demo.py
就能看到下面效果:
最后:
当模型权重开源后,部署一个模型远比训练一个模型要简单,对这些开源的同僚们致以最高的敬意,后续可能会研究如何微调这个模型可以关注一下。