当前位置:   article > 正文

开源大模型ChatGLM2-6B 1. 租一台GPU服务器测试下_部署开源大模型需要租什么服务器

部署开源大模型需要租什么服务器

0. 环境

租用了1台GPU服务器,系统 ubuntu20,GeForce RTX 3090 24G。过程略。本人测试了ai-galaxy的,今天发现网友也有推荐autodl的。

(GPU服务器已经关闭,因此这些信息已经失效)
SSH地址:*
端口:16116

SSH账户:root
密码:*

内网: 3389 , 外网:16114

VNC地址: *
端口:16115

VNC用户名:root
密码:*

硬件需求,这是ChatGLM-6B的,应该和ChatGLM2-6B相当。
量化等级    最低 GPU 显存
FP16(无量化)    13 GB
INT8    10 GB
INT4    6 GB

1. 测试gpu

  1. nvidia-smi
  2. (base) root@ubuntuserver:~# nvidia-smi
  3. Fri Sep  8 09:58:25 2023
  4. +-----------------------------------------------------------------------------+
  5. | NVIDIA-SMI 510.54       Driver Version: 510.54       CUDA Version: 11.6     |
  6. |-------------------------------+----------------------+----------------------+
  7. | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  8. | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  9. |                               |                      |               MIG M. |
  10. |===============================+======================+======================|
  11. |   0  NVIDIA GeForce ...  Off  | 00000000:00:07.0 Off |                  N/A |
  12. | 38%   42C    P0    62W / 250W |      0MiB / 11264MiB |      0%      Default |
  13. |                               |                      |                  N/A |
  14. +-------------------------------+----------------------+----------------------+
  15. +-----------------------------------------------------------------------------+
  16. | Processes:                                                                  |
  17. |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
  18. |        ID   ID                                                   Usage      |
  19. |=============================================================================|
  20. |  No running processes found                                                 |
  21. +-----------------------------------------------------------------------------+
  22. (base) root@ubuntuserver:~#


2. 下载仓库

  1. git clone https://github.com/THUDM/ChatGLM2-6B
  2. cd ChatGLM2-6B

服务器也无法下载,需要浏览器download as zip 通过winscp拷贝上去

3. 升级cuda

查看显卡驱动版本要求:
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

发现cuda 11.8需要 >=450.80.02。已经满足。

执行指令更新cuda

  1. wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
  2. sh cuda_11.8.0_520.61.05_linux.run


-> 输入 accept
-> 取消勾选 Driver
-> 点击 install

  1. export PATH=$PATH:/usr/local/cuda-11.8/bin
  2. nvcc --version

4. 源码编译方式升级python3

4.1 openssl(Python3.10 requires a OpenSSL 1.1.1 or newer)

  1. wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz
  2. tar -zxf openssl-1.1.1s.tar.gz && \
  3. cd openssl-1.1.1s/ && \
  4. ./config -fPIC --prefix=/usr/include/openssl enable-shared && \
  5. make -j8
  6. make install

4.2 获取源码

  1. wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz
  2. or
  3. wget https://registry.npmmirror.com/-/binary/python/3.10.10/Python-3.10.10.tgz

4.3 安装编译python的依赖

  1. apt update && \
  2. apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev

4.4 解压并配置

  1. tar -xf Python-3.10.10.tgz && \
  2. cd Python-3.10.10 && \
  3. ./configure --prefix=/usr/local/python310  --with-openssl-rpath=auto  --with-openssl=/usr/include/openssl  OPENSSL_LDFLAGS=-L/usr/include/openssl   OPENSSL_LIBS=-l/usr/include/openssl/ssl OPENSSL_INCLUDES=-I/usr/include/openssl

4.5 编译与安装

  1. make -j8
  2. make install

4.6 建立软链接

ln -s /usr/local/python310/bin/python3.10  /usr/bin/python3.10

5. 再次操作ChatGLM2-6B


5.1 使用 pip 安装依赖

  1. # 首先单独安装cuda版本的torch
  2. python3.10 -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  3. # 再安装仓库依赖
  4. python3.10 -m pip install --upgrade pip  -i https://pypi.tuna.tsinghua.edu.cn/simple
  5. python3.10 -m pip install -r requirements.txt

问题:网速慢,加上国内软件源
python3.10 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

问题:ERROR: Could not find a version that satisfies the requirement streamlit>=1.24.0 
ubuntu20内的python3.9太旧了,不兼容。

验证torch是否带有cuda

  1. import torch
  2. device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
  3. print(device)

5.2 准备模型


# 这里将下载的模型文件放到了本地的 chatglm-6b 目录下

  1. curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
  2. sudo apt-get install git-lfs
  3. git clone https://huggingface.co/THUDM/chatglm2-6b $PWD/chatglm2-6b

还是网速太慢

另外一种办法:

  1. mkdir -p THUDM/ && cd THUDM/
  2. GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b


下载ChatGLM2作者上传到清华网盘的模型文件
https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2Fchatglm2-6b&mode=list
并覆盖到THUDM/chatglm2-6b

先前以为用wget可以下载,结果下来的文件是一样大的,造成推理失败。
win10 逐一校验文件SHA256,需要和https://huggingface.co/THUDM/chatglm2-6b中Git LFS Details的匹配。

  1. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00001-of-00007.bin SHA256
  2. SHA256 的 pytorch_model-00001-of-00007.bin 哈希:
  3. cdf1bf57d519abe11043e9121314e76bc0934993e649a9e438a4b0894f4e6ee8
  4. CertUtil: -hashfile 命令成功完成。
  5. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00002-of-00007.bin SHA256
  6. SHA256 的 pytorch_model-00002-of-00007.bin 哈希:
  7. 1cd596bd15905248b20b755daf12a02a8fa963da09b59da7fdc896e17bfa518c
  8. CertUtil: -hashfile 命令成功完成。
  9. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00003-of-00007.bin SHA256
  10. 812edc55c969d2ef82dcda8c275e379ef689761b13860da8ea7c1f3a475975c8
  11. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00004-of-00007.bin SHA256
  12. 555c17fac2d80e38ba332546dc759b6b7e07aee21e5d0d7826375b998e5aada3
  13. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00005-of-00007.bin SHA256
  14. cb85560ccfa77a9e4dd67a838c8d1eeb0071427fd8708e18be9c77224969ef48
  15. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00006-of-00007.bin SHA256
  16. 09ebd811227d992350b92b2c3491f677ae1f3c586b38abe95784fd2f7d23d5f2
  17. C:\Users\qjfen\Downloads\chatglm2-6b>certutil -hashfile pytorch_model-00007-of-00007.bin SHA256
  18. 316e007bc727f3cbba432d29e1d3e35ac8ef8eb52df4db9f0609d091a43c69cb

这里需要推到服务器中。并在ubuntu下用sha256sum <filename> 校验下文件。

注意如果模型是坏的,会出现第一次推理要大概10分钟、而且提示idn越界什么的错误。

5.3 运行测试


切换回主目录
python3.10
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("chatglm2-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("chatglm2-6b", trust_remote_code=True, device='cuda')
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)

5.4 gpu占用

  1. (base) root@ubuntuserver:~/work/ChatGLM2-6B/chatglm2-6b# nvidia-smi
  2. Mon Sep 11 07:12:21 2023
  3. +-----------------------------------------------------------------------------+
  4. | NVIDIA-SMI 510.54       Driver Version: 510.54       CUDA Version: 11.6     |
  5. |-------------------------------+----------------------+----------------------+
  6. | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  7. | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  8. |                               |                      |               MIG M. |
  9. |===============================+======================+======================|
  10. |   0  NVIDIA GeForce ...  Off  | 00000000:00:07.0 Off |                  N/A |
  11. | 30%   41C    P2   159W / 350W |  13151MiB / 24576MiB |     38%      Default |
  12. |                               |                      |                  N/A |
  13. +-------------------------------+----------------------+----------------------+
  14. +-----------------------------------------------------------------------------+
  15. | Processes:                                                                  |
  16. |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
  17. |        ID   ID                                                   Usage      |
  18. |=============================================================================|
  19. |    0   N/A  N/A     55025      C   python3.10                      13149MiB |
  20. +-----------------------------------------------------------------------------+
  21. (base) root@ubuntuserver:~/work/ChatGLM2-6B/chatglm2-6b#

6. 测试官方提供的demo


6.1 cli demo


vim cli_demo.py
修改下模型路径为chatglm2-6b即可运行测试 

用户:hello

ChatGLM:Hello! How can I assist you today?

用户:你好

ChatGLM:你好! How can I assist you today?

用户:请问怎么应对嵌入式工程师的中年危机

6.2 web_demo

修改模型路径
vim web_demo.py

  1. tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
  2. model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()


修改为

  1. tokenizer = AutoTokenizer.from_pretrained("chatglm2-6b", trust_remote_code=True)
  2. model = AutoModel.from_pretrained("chatglm2-6b", trust_remote_code=True).cuda()

 

6.3 web_demo2

  1. python3.10 -m pip install streamlit  -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. python3.10 -m streamlit run web_demo2.py --server.port 3389


内网: 3389 , 外网:16114
本地浏览器打开:lyg.blockelite.cn:16114

 

6.4 api.py


tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()
修改为
tokenizer = AutoTokenizer.from_pretrained("chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("chatglm2-6b", trust_remote_code=True).cuda()

另外,智星云服务器设置了端口映射,把port修改为3389,可以通过外网访问。

运行:
python3.10 api.py

客户端(智星云服务器):
curl -X POST "http://127.0.0.1:3389" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'
     
客户端2(任意linux系统) 
curl -X POST "http://lyg.blockelite.cn:16114" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'
     

  1. (base) root@ubuntuserver:~/work/ChatGLM2-6B# python3.10 api.py
  2. Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████████| 7/7 [00:46<00:00,  6.60s/it]
  3. INFO:     Started server process [91663]
  4. INFO:     Waiting for application startup.
  5. INFO:     Application startup complete.
  6. INFO:     Uvicorn running on http://0.0.0.0:3389 (Press CTRL+C to quit)