崇州市微信端网站建,找人做网站一套多少钱,旅游网站网页设计报告,html需要下载什么软件文章目录 1、vLLM分布式部署 docker镜像构建通信环境配置 2、其他大模型部署工具3、问题记录参考文献
单台机器GPU资源不足以执行推理任务时#xff0c;一个方法是模型蒸馏量化#xff0c;结果就是会牺牲些效果。另一种方式是采用多台机器多个GPU进行推理#xff0c;资源不…文章目录 1、vLLM分布式部署 docker镜像构建通信环境配置 2、其他大模型部署工具3、问题记录参考文献
单台机器GPU资源不足以执行推理任务时一个方法是模型蒸馏量化结果就是会牺牲些效果。另一种方式是采用多台机器多个GPU进行推理资源不足就堆机器虽然暴力但也是个不错的解决方法。值得注意的是多机多卡部署的推理框架也适用于单机多卡单机单卡这里不过多赘述。
1、vLLM分布式部署
我的需求是Ubuntu中部署70B大模型不量化两台机器每台机器4张4090 24G显卡采用docker环境在稍微调研了一些支持多级多卡、支持serving部署的工具后最终选择vllm部署主要原因是看着简单主流的开源LLM都支持且提供OpenAI接口访问。
docker镜像构建
?? docker镜像构建基本上就是参照一位博主的文章vLLM分布式多GPU Docker部署踩坑记来构建的镜像区别就是去掉了里面的ENTRYPOINT以及添加node的entrypoint仅在执行命令docker run时加上了使容器不退出的一行代码tail -f /dev/null。 去掉的主要原因是作为新手小白部署环境在频繁的踩坑需要随时stop/start ray集群。
docker run -d --runtimenvidia --networkhost --ipchost -v ${volume_user}:/vllm --gpus $gpus --name $container_name vllm:v5 tail -f /dev/null注意: dockerfile里面不要使用命令EXPOSE暴露任何端口, vllm:v5是我自己构建的docker image.
通信环境配置
?? 我是一台机器启动了一个docker将docker当作一个节点在docker里面执行ray start --head --port6379将另一台机器的docker作为worker节点并加入到ray cluster中如果机器间的通信没有问题worker节点在几秒内就能加入集群。 docker run启动 ray集群的构建涉及到很多端口且有些是在某个范围内随机分配端口如果采用docker和容器间的端口一一映射形式启动dockerdocker run命令会执行相当久且不利于firewall规则的配置因此建议选用networkhost ipchost形式的docker启动方式。 firewall规则的配置 在work节点执行ray start --addressxxx命令后work节点加入了ray cluster短暂时间后执行ray status命令work节点掉线了多半是机器间的通信问题如果是同一网段的两台机器可以采用以下命令设置同一网段内的机器互相访问无限制命令仅需在head节点的宿主机中操作网段替换为宿主机的实际网段 firewall-cmd --permanent --zonetrusted --add-source192.168.0.0/16 #允许该网段所有访问所有端口
firewall-cmd --reload不建议直接关闭掉防火墙容易产生更大的安全问题。更多信息参考该博文。 环境变量配置 vllm多节点多GPU部署LLM节点间的通信涉及到GOO、TCP、NCCL等下面是一些配置信息docker内编辑/etc/profile文件并source /etc/profile或者写入~/.bashrc,同样需要source ~/.bashrc # 指定通信网卡
export GLOO_SOCKET_IFNAMEeno16np0
export TP_SOCKET_IFNAMEeno16np0# NCCL配置
# export NCCL_SOCKET_NTHREADS10
export NCCL_SOCKET_IFNAMEeno16np0
export NCCL_DEBUGinfo
export NCCL_NETSocket
export NCCL_IB_DISABLE0eno16np0是容器中的网卡名称指定采用哪个网卡进行通信。下面的CUDA_HOME替换为你的cuda的实际路径。 # 环境变量
export CUDA_HOME/usr/local/cuda-12.1
export PATH${CUDA_HOME}/bin${PATH::${PATH}}
export LD_LIBRARY_PATH${CUDA_HOME}/lib64:${CUDA_HOME}/extras/CUPTI/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATHdocker里面的主机设置 确保head节点的IP与指定的通信网卡的IP一致同时检查/etc/hosts里面的IP对应的主机名与docker的主机名是一致的。
2、其他大模型部署工具
推理工具 Deepspeed-inference Deepspeed-fastgenAccelerateTensorRT-LLMollamallama.cppFastChat serving部署工具 Triton inferece server(仅FasterTransformer后端支持多节点多卡部署)LMdeployvllm
3、问题记录
【1】vllm启动时出现 WARNING[XFORMERS]: xFormers can’t load C/CUDA extensions. xFormers was built for 问题 现象1PyTorch 2.3.0cu121 with CUDA 1201 (you have 2.3.0cu118)现象2Python 3.10.14 (you have 3.10.12)原因 xFormers与pytorch、cuda、python版本不一致解决办法就是找到相应的包重新安装conda-xFormers版本列表、Github-xFormers或者更新你得pytorch版本选择torch2.3.0cu12 【2】vllm启动时出现 NameError: name ‘vllm_ops’ is not defined 问题 为保持整篇文章的整洁原因分析和解决办法我放另一篇文章了 【3】vLLM执行推理时出现ValueError: Total number of attention heads (32) must be divisible by tensor parallel size (6). 更改vLLM的tensor_parallel_size参数使其可以被被部署的大模型的注意力头数整除即可头数可以查看大模型config.json中的参数num_attention_heads。 【4】vllm在线OpenAI接口推理服务启动后出现ValueError: Ray does not allocate any GPUs on the driver node. Consider adjusting the Ray placement group or running the driver on a GPU node 可能是后台有相同的命令 python -m vllm.entrypoints.openai.api_server 上次未正确退出导致kill掉再次执行即可或者重启整个ray即ray stop后再次ray start命令 【5】启动ray集群后再执行更新python库、环境变量变更等操作尝试启动vllm推理可能不起作用 ray stop后重新启动ray cluster 【6】vLLM未正常启动出现报错RuntimeError: Gloo connectFullMesh failed with […/third_party/gloo/gloo/transport/tcp/pair.cc:144] no erro 且 Error executing method init_device. This might cause deadlock in distributed execution. 未正确设置GLOO_SOCKET_IFNAME、TP_SOCKET_IFNAME或者NCCL通信相关的环境变量按照上述通信环境配置-环境变量配置后重启ray环境。极少可能是hosts文件中IP和主机名映射出现问题。
参考文献
vLLM分布式多GPU Docker部署踩坑记博客vLLM官方仓库及文档Github