Docker安装分布式vLLM的实现步骤

 更新时间:2025年03月10日 11:40:34   作者:MasonYyp  
本文主要介绍了Docker使用vLLM库进行分布式推理和服务部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1 介绍

vLLM是一个快速且易于使用的LLM推理和服务库,适合用于生产环境。单主机部署会遇到显存不足的问题,因此需要分布式部署。

分布式安装方法

https://docs.vllm.ai/en/latest/serving/distributed_serving.html

2 安装方法

⚠️ 注意:前期一定要把docker环境、运行时和GPU安装好。

CUDA Version: 12.4

vllm:v0.7.2

2.1 下载镜像

# 下载镜像,镜像比较大
docker pull vllm/vllm-openai:v0.7.2

下载分布式部署的脚本

https://github.com/vllm-project/vllm/blob/main/examples/online_serving/run_cluster.sh

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

# Assign the first three arguments and shift them away
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 \
    --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}"

2.2 创建容器

两台主机的IP如下,主节点宿主机IP:192.168.108.100,工作节点宿主机IP:192.168.108.101。

主节点(head节点)运行分布式vLLM脚本

官网的说明

# ip_of_head_node:主节点容器所在宿主机的IP地址
# /path/to/the/huggingface/home/in/this/node: 映射到到容器中的路径
# ip_of_this_node:当前节点所在宿主机的IP地址
# --head:表示主节点
bash run_cluster.sh \
                vllm/vllm-openai \
                ip_of_head_node \
                --head \
                /path/to/the/huggingface/home/in/this/node \
                -e VLLM_HOST_IP=ip_of_this_node

本机执行

bash run_cluster.sh \
    vllm/vllm-openai:v0.7.2 \
    192.168.108.100 \
    --head \
    /home/vllm \
    -e VLLM_HOST_IP=192.168.108.100 \
    > nohup.log 2>&1 &

工作节点(worker节点)运行分布式vLLM脚本

官网的说明

# ip_of_head_node:主节点容器所在宿主机的IP地址
# /path/to/the/huggingface/home/in/this/node: 映射到到容器中的路径
# ip_of_this_node:当前节点所在宿主机的IP地址
# --worker:表示工作节点
bash run_cluster.sh \
                vllm/vllm-openai \
                ip_of_head_node \
                --worker \
                /path/to/the/huggingface/home/in/this/node \
                -e VLLM_HOST_IP=ip_of_this_node

本机执行

bash run_cluster.sh \
    vllm/vllm-openai:v0.7.2 \
    192.168.108.100 \
    --worker \
    /home/vllm \
    -e VLLM_HOST_IP192.168.108.101 \
    > nohup.log 2>&1 &

查看集群的信息

# 进入容器
docker exec -it node /bin/bash

# 查看集群信息
ray status
# 返回值中有GPU数量、CPU配置和内存大小等
======== Autoscaler status: 2025-02-13 20:18:13.886242 ========
Node status
---------------------------------------------------------------
Active:
 1 node_89c804d654976b3c606850c461e8dc5c6366de5e0ccdb360fcaa1b1c
 1 node_4b794efd101bc393da41f0a45bd72eeb3fb78e8e507d72b5fdfb4c1b
Pending:
 (no pending nodes)
Recent failures:
 (no failures)

Resources
---------------------------------------------------------------
Usage:
 0.0/128.0 CPU
 0.0/4.0 GPU
 0B/20 GiB memory
 0B/19.46GiB object_store_memory

Demands:
 (no resource demands)

3 安装模型

⚠️ 本地有4张GPU卡。

官网说明

# 启动模型服务,可根据情况设置模型参数
# /path/to/the/model/in/the/container:模型路径
# tensor-parallel-size:张量并行数量,模型层内拆分后并行计算;
# pipeline-parallel-size:管道并行数量,模型不同层拆分后并行计算,在单个显存不够时可以设置此参数
vllm serve /path/to/the/model/in/the/container \
     --tensor-parallel-size 8 \
     --pipeline-parallel-size 2

本机执行

将下载好的Qwen2.5-7B-Instruct模型,放在“/home/vllm”目录下

# 进入节点,主节点和工作节点都可以
docker exec -it node /bin/bash

# 执行命令参数
nohup vllm serve /root/.cache/huggingface/Qwen2.5-7B-Instruct \
    --served-model-name qwen2.5-7b \
    --tensor-parallel-size 2 \
    --pipeline-parallel-size 2 \
    > nohup.log 2>&1 &

在宿主机上调用参数

curl http://localhost:8000/v1/chat/completions \
-X POST \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-7b",
    "messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "介绍一下中国,不少于10000字"}
    ],
    "stream": true
}'

 到此这篇关于Docker安装分布式vLLM的实现步骤的文章就介绍到这了,更多相关Docker安装分布式vLLM内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 分享Ubuntu19无法安装docker源问题

    分享Ubuntu19无法安装docker源问题

    这篇文章主要介绍了Ubuntu19无法安装docker源问题,本文通过实例代码给大家讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • docker容器连接宿主机redis与mysql的配置方法

    docker容器连接宿主机redis与mysql的配置方法

    最近有朋友在工作时遇到一个问题,docker容器无法访问宿主机的redis,所以这里给大家总结下,这篇文章主要给大家介绍了关于docker容器连接宿主机redis与mysql的配置方法,需要的朋友可以参考下
    2023-06-06
  • windows下安装docker的教程详解

    windows下安装docker的教程详解

    这篇文章主要介绍了windows安装docker的教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • docker常用命令汇总

    docker常用命令汇总

    这篇文章主要介绍了docker常用命令汇总,都是一些常用的基本命令,有需要的同学可以尝试学习下
    2020-12-12
  • 如何用docker部署kafka

    如何用docker部署kafka

    本文详细介绍了使用Docker快速搭建Kafka集群的步骤,包括选用wurstmeister/kafka镜像、配置文件修改、集群启动与管理,适合需要在Docker环境中部署Kafka的开发者参考
    2024-09-09
  • Docker部署web项目的实现

    Docker部署web项目的实现

    这篇文章主要介绍了Docker部署web项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Docker容器进行健康检查的三种方式

    Docker容器进行健康检查的三种方式

    这篇文章主要介绍了如何对Docker容器进行健康检查,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • kali安装docker和portainer的配置方法

    kali安装docker和portainer的配置方法

    docker的出现给很多服务提供了方便,许多arm结构的硬件也能运行x86服务,今天给大家介绍kali安装docker和portainer的配置方法,感兴趣的朋友一起看看吧
    2021-06-06
  • AntDesign Docker部署详细流程

    AntDesign Docker部署详细流程

    这篇文章主要为大家介绍了AntDesign Docker部署流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • docker容器中切换用户,提示权限不足的解决

    docker容器中切换用户,提示权限不足的解决

    这篇文章主要介绍了docker容器中切换用户,提示权限不足的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论