背景

前段时间接到需求要在内网部署DeepSeekR1:70b,由于手里的服务器和显卡比较差(四台 四块Tesla T4- 16g显存的服务器),先后尝试了ollama、vllm、llamacpp等,最后选择用vllm的分布式推理来部署。

需要准备的资源

  1. vllm的docker镜像(可以从docker hub 下载,使用docker save -o命令保存拿到内网服务器中)
  2. run_cluster.sh脚本(用来启动docker镜像和进行ray通信,下面会贴上我目前在用的版本)
  3. 模型文件(huggingface下载,国内可以用hf-mirror镜像站),需要下载到所有分布式机器的磁盘中,最好保持存储路径一致。
  4. nvidia驱动、cuda等是必备的,不提了

部署过程

  1. 载入vllm的docker镜像

    docker load -i vllm.tar

  2. 编写脚本vi run_cluster.sh

    所有机器都使用如下脚本

点击查看代码
``#!/bin/bash

# Check for minimum number of required arguments
if [ $# -lt 4 ]; then
echo "Usage: $0 docker_image head_node_address --head|--worker path_to_hf_home [additional_args...]"
exit 1
fi DOCKER_IMAGE="$1"
HEAD_NODE_ADDRESS="$2"
NODE_TYPE="$3" # Should be --head or --worker
PATH_TO_HF_HOME="$4"
shift 4 # Additional arguments are passed directly to the Docker command
ADDITIONAL_ARGS=("$@") # Validate node type
if [ "${NODE_TYPE}" != "--head" ] && [ "${NODE_TYPE}" != "--worker" ]; then
echo "Error: Node type must be --head or --worker"
exit 1
fi # Define a function to cleanup on EXIT signal
cleanup() {
docker stop node
docker rm node
}
trap cleanup EXIT # Command setup for head or worker node
RAY_START_CMD="ray start --block"
if [ "${NODE_TYPE}" == "--head" ]; then
RAY_START_CMD+=" --head --port=6379"
else
RAY_START_CMD+=" --address=${HEAD_NODE_ADDRESS}:6379"
fi # Run the docker command with the user specified parameters and additional arguments
#docker run \
# -d \
# --entrypoint /bin/bash \ docker run \
--entrypoint /bin/bash \
--network host \
--name node \
--shm-size 10.24g \
--gpus all \
-v "${PATH_TO_HF_HOME}:/root/.cache/huggingface" \
"${ADDITIONAL_ARGS[@]}" \
"${DOCKER_IMAGE}" -c "${RAY_START_CMD}"
  1. 查看网卡信息

    输入ip a

    找到这台机器对应的编号,用在之后的启动命令中

  2. 启动脚本(每台机器都需要启动,选择任意一台为主节点,其他为工作节点)

    启动命令:( --head为主机 --worker为其他机器使用,命令中的ip都需要填写主机的ip)

    主机脚本 bash run_cluster.sh vllm/vllm-openai:v0.6.4.post1 主机ip --head /data/vllm_model -v /data/vllm_model/:/model/ -e GLOO_SOCKET_IFNAME=ens13f0 -e NCCL_SOCKET_IFNAME=ens13f0

    工作机脚本 bash run_cluster.sh vllm/vllm-openai:v0.6.4.post1 主机ip --worker /data/vllm_model -v /data/vllm_model/:/model/ -e GLOO_SOCKET_IFNAME=ens13f0 -e NCCL_SOCKET_IFNAME=ens13f0

    后台运行 也可以通过nohup后台运行,如:nohup bash run_cluster.sh vllm/vllm-openai:v0.6.4.post1 主机ip --worker /data/vllm_model -v /data/vllm_model/:/model/ -e GLOO_SOCKET_IFNAME=ens13f0 -e NCCL_SOCKET_IFNAME=ens13f0 >/ray_file 2>&1 &

/data/vllm_model为你模型文件的位置,如下图则启动成功

  1. 所有都成功启动后可以使用任何一台机器的ssh会话,因为已经通信,所以哪台机器都可以启动vllm。注意不要关闭任何一台机器的run_cluster启动的页面,

    使用docker ps 查看运行的镜像

    进入镜像内部

    输入docker exec -it 镜像号 /bin/bash进入

    输入ray status可以查看当前通信状态

  2. 直接在docker中启动vllm

    命令:vllm serve /model/DeepSeek-R1-Distill-Llama-70B --tensor-parallel-size 4 --pipeline-parallel-size 4 --dtype=float16

注:我的vllm运行命令中tensor-parallel对应每台服务器的gpu数,pipeline-parallel-size对应服务器数,--dtype=float16这个由于Tesla T4计算精度的问题需要添加这个配置降低模型的精度,如果显卡计算能力8.0以上可以不加这个配置。关于分布式并行的参数这里博主没有深究含义,如果有更好的使用方式也可以交流下。

参数含义

--tensor-parallel-size

这个参数表示 张量并行(Tensor Parallelism) 的规模。

将一个神经网络的 权重矩阵 切分到多个 GPU 上。

通常用于切分 Transformer 中的 attention 或 FFN 层的权重。

例如设置为 4,意味着一个 attention 层的计算会被分成 4 份,在 4 个 GPU 上并行进行。

适用于具有较大权重矩阵的模型,如 LLaMA、GPT 等,能充分利用多个 GPU 的显存和计算资源。

--pipeline-parallel-size

这个参数表示 流水线并行(Pipeline Parallelism) 的规模。

将整个模型的 不同层 分配到不同的 GPU 上,形成一个“流水线”。

每个 GPU 处理模型的一部分,然后把结果传给下一个 GPU。

设置为 2 表示模型被分成 2 段,分别在两个 GPU 上依次运行。

适用于模型层数较多时进一步扩展模型到更多 GPU 上。

记录-内网部署vllm分布式推理DeepSeekR1:70b的更多相关文章

  1. Redis-3.2.1集群内网部署

    摘要: Redis-3.2.1集群内网部署 http://rubygems.org国内连不上时的一种Redis集群部署解决方案.不足之处,请广大网友指正,谢谢! 一. 关于redis cluster  ...

  2. centos7谷歌chrome内网部署演示

    上传需要的包,注释网关创建内网环境 [root@localhost ~]# ls anaconda-ks.cfg chrome mcw4 mcw4.tar.gz mcwchromerpm.tar.gz ...

  3. 内网部署Docker版本Gitlab

    Gitlab部署: 1. 还原备份文件后记得拷贝gitlab-secrets.json,不然会遇到500错误 2. 下载Docker以及依赖项rpm包 3. 在外网机器下载镜像 a. 拉取——Dock ...

  4. 内网部署YApi

    官网地址:https://hellosean1025.github.io/yapi/devops/index.html 环境要求 nodejs(7.6+) mongodb(2.6+),安装看这篇文章: ...

  5. yapi内网部署 centos

    1.部署方案 官方说明: https://hellosean1025.github.io/yapi/devops/index.html 2.需要注意的点 (1)在centos等服务启上最好使用“命令行 ...

  6. DLINK 企业路由器内网部署web开启端口转发后还需要开启是否支持端口回流功能

    跑后台使用的服务器,配置一般都很低,带宽只有2Mb 一些大型文件比如app的更新包使用这种服务器不可行 但是公司的网络是100Mb对等静态ip专线 所以能利用起来,每年将会省下8万块 说干就干,这个步 ...

  7. 外网访问内网工具ngrok tunnel 使用总结

    需求分析 在软件开发测试过程中,我们会经常遇到需要网站部署测试.给客户演示.APP开发的调试这样的需求.通常的做法是申请一个域名和空间,将网站放到外网上给客户演示. 这种方法确实可行不过会有两点不好, ...

  8. EasyNVR内网摄像机接入网关+EasyNVS云端管理平台,组件起一套轻量级类似于企业级萤石云的解决方案

    背景分析 对于EasyNVR我们应该都了解,主要应用于互联安防直播,对于EasyNVR,我们可以清楚的发现,EasyNVR的工作机制是EasyNVR拉取摄像机的RTSP/Onvif视频流,然后客户端可 ...

  9. Centos下内网DNS主从环境部署记录

    一.DNS是什么?DNS(Domain Name System),即域名系统.它使用层次结构的命名系统,将域名和IP地址相互映射,形成一个分布式数据库系统. DNS采用C-S架构,服务器端工作在UDP ...

  10. yum仓库配置与内网源部署记录

    使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...

随机推荐

  1. Quartz调度框架详解、运用场景、与集群部署实践

    以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...

  2. 利用JavaScript自定义事件完成组件间的数据通信

    我们知道,在JavaScript中,原生DOM事件在开发中是很有用的(与用户交互的重要方式),但是操作原生DOM事件其实有两大缺点:性能低.依赖于浏览器(NodeJs.小程序等不可用).那么这个时候, ...

  3. 创建多线程的方式二:实现Runnable接口

      /** * 创建多线程的方式二:实现Runnable接口 * 1. 创建一个实现了Runnable接口的类 * 2. 实现类去实现Runnable中的抽象方法:run() * 3. 创建实现类的对 ...

  4. 从0到1构建开源 vue-uniapp-template:使用 UniApp + Vue3 + TypeScript 和 VSCoe、CLI 开发跨平台移动端脚手架

    作者主页: 有来技术 开源项目: youlai-mall︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 仓库主页: GitCode︱ Gitee ...

  5. gitblit 安装

    github 私有代码库收费属于正常商业操作,毕竟现在鼓励开源,但是受到美国出口管制,这就有些不妙了. 所以有必要自己搭建一个私有的托管服务,经过比较并且,选择了gitblit(因为最近偶尔搞搞jav ...

  6. centos 8 mysql 更改数据存储位置

    登录mysql后,先切换到myql数据库下通过show global variables like '%datadir%'; 可以查看数据默认的存储路径(一般在 /var/lib/mysql) 新建数 ...

  7. 8款支持 C# 语言的 AI 辅助编程神器,高效编程利器!

    前言 在当今这个AI技术日新月异的时代,一股创新的浪潮正席卷着软件开发领域,其中AI辅助编程工具以其独特的魅力脱颖而出,成为了众多开发者不可或缺的得力助手.这些工具不仅能够显著提升开发效率,优化代码质 ...

  8. PD还是QC?快充协议全解析

    什么是快充协议 快充协议是一种通过提高充电效率来缩短设备充电时间的电池充电技术.它是通过在充电器和设备之间建立一种沟通机制,充电器能够根据设备的需求和状态,调整输出的电压和电流.这种沟通机制由快充协议 ...

  9. Python - [04] 面试题汇总

    题记部分 001 || Python的特点和优点 Python可以作为编程的入门语言,因为他具有以下特质: (1)解释型 (2)动态特性 (3)面向对象 (4)语法简洁 (5)开源 (6)丰富的社区资 ...

  10. MD5 - windows也可以查询某个文件的MD5码

    命令格式 certutil -hashfile 文件名称 md5 示例 Microsoft Windows [版本 10.0.22621.1702] (c) Microsoft Corporation ...