大模型-docker环境
介绍
本篇文章主要介绍在docker下,配置大模型环境并部署服务。
基于开源项目(开源docker镜像)
以Yuan2-M32为例
1. 拉取镜像并创建容器
# 拉取开源镜像
docker pull yuanmodel/vllm-v0.4.0:latest
# 创建容器
docker run --gpus all -itd --network=host -v /mnt:/mnt --cap-add=IPC_LOCK --device=/devinfiniband --privileged --name vllm_yuan --ulimit core=0 --ulimit memlock=1 --ulimit stack=68719476736 --shm-size=1000G yuanmodel/vllm-v0.4.0:latest
# 进入容器
docker exec -it vllm_yuan bash
参数解释:
--gpus all、"device=0"、"device=2,3"
#docker新版本提供了NVIDIA Container Toolkit支持,在启动容器时,可以指定容器中可用的gpu资源,all代表所有gpu,也可配置单个或多个
-itd
# -d(后台方式运行) -it(指定交互方式运行,进入容器查看内容) 合并版
--network host、none、bridge(默认)、container(container:NAME_or_ID)
# 用来指定容器的网络模式,host模式的容器和宿主机共用一个网络命名空间(Network Namespace),使用宿主机的ip和端口
# bridge模式,为容器创建独立的网络命名空间,容器会虚拟出自己独立的网卡,默认模式
# none模式,为容器创建独立网络命名空间,但不为它做任何网络配置,需用户在此基础上定制,自己添加网卡、配置ip
# container模式,只是容器将与指定的容器共享网络命名空间。这个模式就是指定一个已有的容器,共享该容器的IP和端口
-v 主机目录:容器内目录
# 挂载资源目录、配置文件等,将容器内目录挂载到主机上
# 可实现容器间数据共享,容器的持久化与同步操作。容器删除后,挂载到本地的数据卷依然不会丢失
--cap-add
# 出于容器之间和容器与宿主机的安全隔离保护,在默认的Docker配置下,Docker容器是没有系统权限的。
#可通过--cap-add添加系统权限,如IPC_LOCK(锁定内存),可添加的linux功能选项可参考:https://developer.aliyun.com/article/722230
--device
# (我自己理解的,如果有误,欢迎指正)与cap-add等配合使用,指定需要添加系统权限的目录
--privileged
# 给容器添加了所有的capabilities
# 允许容器访问主机的所有设备
# 具体参考: https://blog.csdn.net/Dontla/article/details/132996095
--ulimit
# 为容器中的进程设置资源限制
# core=0 core文件大小,核心转储被禁用
# 赞未找到清晰的资料,后续补充,欢迎评论区指正
2. 安装大模型运行环境
#进入工作目录
cd /mnt
# 拉取开源项目
git clone https://github.com/IEIT-Yuan/Yuan2.0-M32.git
# 进入vLLM项目
cd Yuan2.0-M32/vllm
# 安装依赖
CUDA_HOME=/usr/local/cuda MAX_JOBS=64 NVCC_THREADS=8 python setup.py install
# 拷贝.so文件
cp build/lib.linux-x86_64-3.10/vllm/*.so vllm/
3. 推理部署
进入容器后,推理部署流程与容器外类似