大模型在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
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 -i2、浏览器聊天
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 #启动