使用阿里云机器,部署 ChatGLM2,并做一些简单的测试。

环境

阿里云活动页面

规则上选择 gn 即为搭载NVIDIA的GPU计算型

操作系统:Ubuntu 20.04 64位

  • 可用区:华东2(上海) M
  • 操作系统:Ubuntu 20.04 64位
  • 配置:16 核 60 GiB GiB ecs.gn7i-c16g1.4xlarge 20 Mbps
  • 付费方式:按量付费
  • 实例规格:ecs.gn7i-c16g1.4xlarge
  • 网络类型:专有网络
# uname -a
Linux iZuf6784qjryroz25m3xqeZ 5.4.0-137-generic #154-Ubuntu SMP Thu Jan 5 17:03:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

环境安全

  • 开启 22 端口的 47.96.60.0/24 118.31.243.0/24
    • 根据你登录的 webshell 的提示来自行添加相关网络段
  • 开启服务器的端口,比如 5000 或 8000

image

安装

  • git clone https://github.com/THUDM/ChatGLM2-6B.git
  • cd ChatGLM2-6B
  • pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    • 使用清华镜像进行加速安装

安装模型,(因为我是为了避免网络问题,已经提前下载好了),所以我手动做了处理


$ cd ChatGLM2-6B

# 在当前项目的根目录下,新建相关文件
# https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2Fchatglm2-6b&mode=list
# https://huggingface.co/THUDM/chatglm2-6b
$ mkdir ./THUDM
$ mkdir ./THUDM/chatglm2-6b

# 把我下载好的模型,复制到当前项目的 THUDM/chatglm2-6b 目录下
$ cp ../chatglm2-6b/* ./THUDM/chatglm2-6b

或者手动修改模型的路径

tokenizer = AutoTokenizer.from_pretrained("./xxx/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("./xxx/chatglm2-6b", trust_remote_code=True, device='cuda')

测试

$ python api.py
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████| 7/7 [00:06<00:00,  1.09it/s]
INFO:     Started server process [9997]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
[2023-07-03 21:15:10] ", prompt:"你是一个专业的物流问题分析工具,将以下用户反馈,抽象为一个6个字内的短语:三天了,从贵阳到黔西都没有到", response:"'"物流缓慢"'"
INFO:     127.0.0.1:35162 - "POST / HTTP/1.1" 200 OK

测试


curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"prompt":"你好"}' \
  http://127.0.0.1:8000

image

image

AliyunOS 或 CentOS 安装

  • 镜像:Alibaba Cloud Linux 3.2104 LTS 64位 (aliyun_3_x64_20G_alibase_20230516.vhd)
  • 规格:ecs.gn6v-c8g1.2xlarge

下载模型

# 安装 git 和 lfs 工具
#  https://github.com/git-lfs/git-lfs/blob/main/INSTALLING.md
$ yum install git
$ yum install git-lfs

# 跳过下载大文件
$ GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
$ cd chatglm2-6b
# $ rm -rf pytorch_model*   // 以下下载命令会覆盖模型文件,可不做删除操作

从清华源 下载模型(能看到进度比较直观,速度在 10m/s)

curl https://cloud.tsinghua.edu.cn/seafhttp/files/6376078a-a8ef-44df-bf63-c5dc5f9363b8/pytorch_model-00001-of-00007.bin > pytorch_model-00001-of-00007.bin
curl https://cloud.tsinghua.edu.cn/seafhttp/files/f7df9041-4e5d-493c-91d0-828d393f3f15/pytorch_model-00002-of-00007.bin > pytorch_model-00002-of-00007.bin


curl https://cloud.tsinghua.edu.cn/seafhttp/files/efbc8e81-dd3f-436b-8564-99b81f9806a2/pytorch_model-00003-of-00007.bin > pytorch_model-00003-of-00007.bin
curl https://cloud.tsinghua.edu.cn/seafhttp/files/832513b9-84c7-47a1-a23c-c7aa29a6d5c3/pytorch_model-00004-of-00007.bin > pytorch_model-00004-of-00007.bin
curl https://cloud.tsinghua.edu.cn/seafhttp/files/202a6845-bfee-4d89-a9b3-b8a6f653a65a/pytorch_model-00005-of-00007.bin > pytorch_model-00005-of-00007.bin
curl https://cloud.tsinghua.edu.cn/seafhttp/files/40a32844-3bd6-4d4b-a491-3c324a3dc3e7/pytorch_model-00006-of-00007.bin > pytorch_model-00006-of-00007.bin
curl https://cloud.tsinghua.edu.cn/seafhttp/files/e96ecca1-4a64-4702-a51f-9b273b629cc8/pytorch_model-00007-of-00007.bin > pytorch_model-00007-of-00007.bin

curl https://cloud.tsinghua.edu.cn/seafhttp/files/1b2c278a-eaaa-4a98-8606-7564a3d4f79b/tokenizer.model > tokenizer.model



echo "done"

# 注意
# pytorch_model.bin.index.json 貌似没被 clone 下来,需要手动上传一下,否则会出现
# OSError: Error no file named pytorch_model.bin, tf_model.h5, model.ckpt.index or flax_model.msgpack found in directory ../chatglm2-6b.

依赖安装

如果遇到在阿里云上出现 4.30.2 找不到的问题,可以先安装更新 python 到最新版本

$ pip install transformers==4.30.2
ERROR: No matching distribution found for transformers==4.30.2

参考 https://linuxstans.com/how-to-install-python-centos/ 安装 python3.11

# 更新工具
$ yum update
$ yum install openssl-devel bzip2-devel libffi-devel
$ yum groupinstall "Development Tools"

# 安装 python3.11
$ wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz
$ tar -xzf Python-3.11.4.tgz
$ cd Python-3.11.4
$ ./configure --enable-optimizations
$ make altinstall

# 配置镜像源
$ pip3.11 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/

测试

THUDM/chatglm2-6b 改成相对路径 ./chatglm2-6b (或改成你自己的模型路径)即可,目录结构如下:

$ ll
drwxr-xr-x  3 root root     4096 Jul  4 10:56 auto_install
drwxr-xr-x  3 root root     4096 Jul  4 16:09 chatglm2-6b
drwxr-xr-x  6 root root     4096 Jul  4 16:18 ChatGLM2-6B
drwxr-xr-x 17 1000 1000     4096 Jul  4 15:26 Python-3.11.4
-rw-r--r--  1 root root 26526163 Jul  4 15:13 Python-3.11.4.tgz
-rw-r--r--  1 root root      324 Jul  4 11:47 test.py

最终的测试脚本

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)

然后运行 python3.11 test.py 即可。

运行

修改 api.py 中的 THUDM/chatglm2-6b 改成相对路径 ../chatglm2-6b

$ cd ChatGLM2-6B
$ nohup python3.11 api.py &

镜像安装

手动安装过一次后,可以将实例以镜像的方式存储起来,后续重新启动,直接按镜像启动即可。

image

通过镜像创建实例后,需要重新装一下驱动。参考:https://help.aliyun.com/document_detail/163824.html?spm=a2c4g.286415.0.i2

配置

  • 8核(vCPU)
  • 32 GiB
  • 5 Mbps
  • GPU:NVIDIA V100
  • ecs.gn6v-c8g1.2xlarge
$ wget https://cn.download.nvidia.com/tesla/525.105.17/NVIDIA-Linux-x86_64-525.105.17.run
$ chmod +x NVIDIA-Linux-x86_64-525.105.17.run
$ ./NVIDIA-Linux-x86_64-525.105.17.run
# 后续无脑同意确认即可

查看 GPU 内存

总体 CPU 在 10%,内存 2G,显存 12G 左右。

$ nvidia-smi
Tue Jul  4 21:34:32 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17   Driver Version: 525.105.17   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  Off  | 00000000:00:07.0 Off |                    0 |
| N/A   34C    P0    58W / 300W |  12338MiB / 16384MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     16148      C   python3.11                      12336MiB |
+-----------------------------------------------------------------------------+