原本想在VMware中装个unbutu,再搞chatglm,但经过调研发现业内都是采用双系统来搞chat的开发。于是只好用rufus
制作了一个ubuntu22.04
的系统盘,你需要准备8G,因为制作好镜像后是7个多G。安装这里就不说了。
1 ubuntu环境
安装好ubuntu后,先更新apt的源
# vim是vi的扩展版本
sudo apt install vim
cd /etc/apt
sudo cp sources.list sources.list.backup
sudo vim sources.list
# 将下面的文件写入到sources.list末尾
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 验证源是否生效
sudo apt update
# 执行更新所有可更新的软件包
sudo apt upgrade
# 注意汉化后,应该采用英文路径名称
export LANG=en_US
xdg-user-dirs-gtk-update
安装依赖包
sudo apt install gcc
sudo apt install g++
sudo apt install make
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
# 禁用自带的Nouveau驱动,这个模型可以满足桌面和基本3D渲染,但大模型是针对3090以上的显卡。
sudo vim /etc/modprobe.d/blacklist.conf
# 在最后一样添加上
blacklist nouveau
# 生效
sudo update-initramfs -u
通过ubuntu自身的软件更新,安装nvidia显卡驱动。安装好后nvidia-smi
,说明显卡驱动安装成功。开发一般不需要自己去安装cuda
,因为安装torch
的时候他自己就会全装
2 aneconda
之所说安装aneconda
,因为大模型里面很多程序不是对应的版本,容易出错,就需要想nvm
一样采用不同的环境。
bash Anaconda3-2024.02-1-Linux-x86_64.sh
vim ~/.bashrc
# 在文件最后添加
export PATH=/home/dj/anaconda3/bin:$PATH
# 生效
source ~/.bashrc
# 中间有一步不小写直接回车了,就按照下面的脚本修正
echo $SHELL
eval "$(/home/dj/anaconda3/bin/conda shell.bash hook)"
conda init
source ~/.bashrc
conda config --set auto_activate_base false
source ~/.bashrc
# 创建python环境
conda create -n chatglm3_test python==3.11
conda activate chatglm3_test
conda env list
conda install pytorch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 pytorch-cuda=12.1 -c pytorch -c nvidia
python -m -pip install --upgrade pip
3 chatglm3-6b
有人购买pigcha
加速器,以及安装git-lfs
和Hugging Face
。,虽然模型比较大,但国内有对应的景象,奇怪这个模型不是我们自己人研究的吗,怎么还要科学上网。在魔塔社区可以下载到对应的模型,不需要花冤枉钱。
mkdir -p /home/dj/workspace
cd workspace
sudo git clone https://github.com/THUDM/ChatGLM3.git
# 下载代码
cd ChatGLM3
conda activate chatglm3_test
# 安装项目依赖
pip install -r requirements.txt
# 安装juptyer
conda install ipykernel
python -m ipykernel install --user --name=chatglm3_test --display-name="Python(chatglm3_test)"
运行模型,在basic_demo
修正web_demo_gradio.py
中从魔塔中的模型,不需要跟工程在同一个文件,因为这个模型文件就有12G。
ModelType = Union[PreTrainedModel, PeftModelForCausalLM]
TokenizerType = Union[PreTrainedTokenizer, PreTrainedTokenizerFast]
# MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
MODEL_PATH = os.environ.get('MODEL_PATH', r'/home/dj/models/chatglm3-6b')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
def _resolve_path(path: Union[str, Path]) -> Path:
return Path(path).expanduser().resolve()
接着运行python web_demo_gradio.py
,就可以了。我的拯救者显卡是RTX 4060
,8G独显是不够的,生成有些慢。在ubuntu中安装了gnome-screenshot后,可以截图看到效果,好像这个chat机器人有点憨
采用streamlit
启动,执行脚本streamlit run web_demo_streamlit.py
,运行效果如下,界面风格有点差异,已经有点AI的意思了
查看GPU资源使用,看来8G的独显是不够的。
4 使用openai
因为又用到了bge-m3
,这个模型,bge-m3,这里使用脚本下载一下,需要先pip install modelscope
,接着按照文档中的描述下载模型,目测通过脚本,下载要比git下载要快
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Xorbits/bge-m3')
下载之后同样要改模型路径后,运行
(chatglm3_test) dj@dj-Legion-Y9000P-IRX8:~/workspace/ChatGLM3/openai_api_demo$ python api_server.py
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:01<00:00, 6.59it/s]
WARNING:root:Some parameters are on the meta device device because they were offloaded to the cpu.
Traceback (most recent call last):
File "/home/dj/workspace/ChatGLM3/openai_api_demo/api_server.py", line 537, in <module>
embedding_model = SentenceTransformer(EMBEDDING_PATH, device="cuda")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/sentence_transformers/SentenceTransformer.py", line 315, in __init__
self.to(device)
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1173, in to
return self._apply(convert)
^^^^^^^^^^^^^^^^^^^^
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/torch/nn/modules/module.py", line 779, in _apply
module._apply(fn)
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/torch/nn/modules/module.py", line 779, in _apply
module._apply(fn)
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/torch/nn/modules/module.py", line 779, in _apply
module._apply(fn)
[Previous line repeated 4 more times]
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/torch/nn/modules/module.py", line 804, in _apply
param_applied = fn(param)
^^^^^^^^^
File "/home/dj/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1159, in convert
return t.to(
^^^^^
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 16.00 MiB. GPU
看来是GPU的显存不够,因此只好调整为cpu
模式
# embedding_model = SentenceTransformer(EMBEDDING_PATH, device="cuda")
embedding_model = SentenceTransformer(EMBEDDING_PATH, device="cpu")