大模型在docker中运行(个人电脑win11)

1、 环境搭建

个人电脑配置

设备名称	legion
处理器	13th Gen Intel(R) Core(TM) i9-13900HX   2.20 GHz
机带 RAM	16.0 GB (15.7 GB 可用)
设备 ID	863D76C7-781B-4F75-9CD9-43E26105C515
产品 ID	00342-30858-40905-AAOEM
系统类型	64 位操作系统, 基于 x64 的处理器
笔和触控	没有可用于此显示器的笔或触控输入
GPU 1

	NVIDIA GeForce RTX 4050 Laptop GPU

	驱动程序版本:	31.0.15.4601
	驱动程序日期:	2023/10/26
	DirectX 版本:	12 (FL 12.1)
	物理位置:	PCI 总线 1、设备 0、功能 0

	利用率	0%
	专用 GPU 内存	0.2/6.0 GB
	共享 GPU 内存	0.0/7.9 GB
	GPU 内存	0.3/13.9 GB

windows需要安装docker

参见:Windows Docker 安装 | 菜鸟教程 (runoob.com)

windows需要开启WSL2、并安装

 是为了开启gpus加速,参见: win10 Docker Desktop使用GPU_windows docker 使用gpu_刘丶小歪的博客-CSDN博客

设置docker启动容器的内存,我设置的12G,参见: 修改 WSL2 可用内存大小和交换分区大小_wsl swap-CSDN博客

2、启动镜像

docker run -itd --privileged --gpus all --name chatGlm --hostname chatGlm -p 50044:22 -p 50786:7860 -p 58501:8501 -p 58000:8000  --network mynet --ip 172.19.0.44 -v /home/usr/local/docker/ubuntu20.04/swp:/swp ubuntu:20.04-v3

20.04-v3:是我基础软件安装好的镜像(python/pytorch/ssh等)。 你可以使用20.04共有版本自行安装和LLM匹配版本的软件

设置国内源后:  apt-get update, 参见:修改docker源和ubuntu源 - 我的天啊~ - 博客园 (cnblogs.com)

设置pip源: python pip 修改镜像源 - 我的天啊~ - 博客园 (cnblogs.com)

开启远程登录:  service ssh restart  参加:ubuntu服务器支持ssh远程登录 - 我的天啊~ - 博客园 (cnblogs.com)

3、挑选合适的LLM

我选择glm3, 因为部署门槛低, 参见:chatglm3-6b · 模型库 (modelscope.cn)

之前安装过qwen/Qwen-7B-Chat,能运行,但是回答太慢(分钟级)。

推荐安装cuda-toolkit、flash-attention库,以实现更高的效率和更低的显存占用:

安装cuda-toolkit

用于利用GPU进行高性能计算

注意:下载自己电脑匹配的版本。
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3
添加到 ~/.bashrc
  export PATH=/usr/local/cuda-12.3/bin${PATH:+:${PATH}}
  export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc  
测试是否安装成功: nvcc --version


 

安装flash-attention

用于利用GPU进行高性能计算

 git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention

cd flash-attention && MAX_JOBS=4 pip install .

   

4、部署ChatGLM3

下载: ChatGLM3: Mirror image (gitee.com)  , 参考项目说明readme.md

最好激活一个虚拟环境(未使用), 因为大模型有的用python3.10,有的3.8不一致,一次性解决python版本的困扰:

###Conda 是一个开源的包管理系统和环境管理系统,Conda 提供了创建、激活、删除虚拟环境的功能。环境之间互不干扰
https://www.anaconda.com/download  自行下载对应版本并安装
echo 'export PATH="/xxxpath/conda/bin:$PATH"' >> ~/.bashrc  
source ~/.bashrc   ## 添加环境变量

conda env list  # 查看目前有哪些虚拟环境
conda create -n chatglm3-demo python=3.10  #如果没有则创建环境
conda activate chatglm3-demo   # 激活python=3.10的环境,将默认3.10:
conda remove env  --name chatglm3-demo --all # 删除env, --all 级联删除pip、conda命令安装的包

  cd ChatGLM3

  pip install -r requirements.txt  

 

检查环境

python check_pytorch.py (内容如下)

import torch

print(torch.__version__)
print(torch.cuda.is_available())

 输出如下ok >> 

2.1.0+cu121
True

从魔搭社区下载LLM

pip install modelscope

python start_demo.py (内容如下)
from modelscope import AutoTokenizer, AutoModel, snapshot_download
model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision = "v1.0.0")
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).quantize(4).cuda()
model = model.eval()
print("client > 你好")
response, history = model.chat(tokenizer, "你好", history=[])
print("chatGLM > "+response)
print("client > 晚上睡不着应该怎么办?")
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办?", history=history)
print("chatGLM > "+response)
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
print("接下来让我们开始聊天吧!")
user_input = input("请输入:")
response, history = model.chat(tokenizer, user_input, history=[])
print(response)
for i in range(50):
    user_input = input("请输入:")
    response, history = model.chat(tokenizer, user_input, history=history)
    print("chatGLM > "+response)

 会自动下载(到/root/.cache/modelscope/hub/ZhipuAI/chatglm3-6b),可运行,一般问题10s以内回答,速度可接受,下图推理时资源消耗。

  

5、部署chatglm.cpp

chatglm.cpp: 类似 llama.cpp 的量化加速推理方案,实现笔记本上实时对话

原始的ChatGLM-6B模型使用的是fp16半精度浮点数来存储其权重和激活值。而经过量化之后,这些值被转换为低精度整数,例如4位整数(int4)

 使用量化后的模型,内存占用下降,响应速度明显提升(秒级回答)。

参考: chatglm.cpp: Mirror image (gitee.com)

下载

git clone --recursive https://gitee.com/vividly/chatglm.cpp.git && cd chatglm.cpp

python3 -m pip install -U pip
python3 -m pip install torch tabulate tqdm transformers accelerate sentencepiece
python3 chatglm_cpp/convert.py -i /root/.cache/modelscope/hub/ZhipuAI/chatglm3-6b -t q4_0 -o chatglm-ggml.bin  # 转换本地的GLM

cd chatglm.cpp # 切到项目内

cmake -B build

cmake --build build -j --config Release # 构建项目

root@ubuntu:/opt/openai/chatGLM3/chatglm.cpp# ./build/bin/main -m chatglm-ggml.bin -p 你好     # 可以测试了!
你好👋!我是人工智能助手 ChatGLM3-6B,很高兴见到你,欢迎问我任何问题。

 6、界面化chatglm.cpp

本地代码安装:CMAKE_ARGS="-DGGML_CUBLAS=ON" pip install .  

因为example代码直接从pip库里使用,所以需要上面的安装。

cd chatglm.cpp/examples 目录下

1、终端聊天
python3 cli_demo.py -m ../chatglm-ggml.bin -i

2、浏览器聊天
python3 web_demo.py -m ../chatglm-ggml.bin
http://localhost:7860/

3、代码解释器和聊天
streamlit run chatglm3_demo.py
http://localhost:8501/

 

 7、API Server

LangChain API:

CMAKE_ARGS="-DGGML_CUBLAS=ON" pip install -U  chatglm-cpp[api]  # 安装相关依赖

cd chatglm.cpp/examples 目录下

 MODEL=../chatglm-ggml.bin uvicorn chatglm_cpp.langchain_api:app --host 172.19.0.44 --port 8000   #启动

 

posted @ 2023-11-29 17:26  我的天啊~  阅读(1533)  评论(0编辑  收藏  举报