新老用户进群领券,100% 有券等你来冲!新老用户进群领券,100% 有券等你来冲! 体验按量付费开发机!立即领券
Skip to content
回到全部文章

推理服务极简部署:使用专用 vLLM 镜像

简介

本文将介绍如何使用专用容器镜像来部署大型语言模型(LLM)。我们提供的推理服务专用容器镜像已经预装了 FastChat 和 vLLM,通过使用这个镜像,您可以简化部署过程,并专注于模型的服务和优化。

目前已提供的专用镜像名称:

  • cr.infini-ai.com/infini-ai/inference-base:v1-vllm0.4.0-torch2.1-cuda12.3-ubuntu22.04

准备工作

在开始部署之前,请确保您的 LLM 已经放置在共享高性能存储服务中。您可以在创建推理服务时添加挂载点,以便访问模型文件。

创建推理服务

访问智算云控制台的推理服务页面,可创建推理服务。

启动命令

使用专用 vLLM 镜像时,只需要在启动命令中指定模型路径,并启动 FastChat 的相应服务。

TIP

请特别注意容器的生命周期管理,在启动命令中需要有一个前台运行的主进程。如果全部使用 nohup 命令启动服务,当容器的启动命令执行完毕,平台会认为容器的主进程已经结束,导致容器陷入销毁与创建的循环。

bash
#!/bin/bash

# 设置必要的环境变量
export MODEL="/path/to/model"  # 模型在您租户的共享高性能存储的路径

# 检查环境变量是否已设置
if [ -z "$MODEL" ]; then
    echo "Error: MODEL must have value."
    exit 1
fi

echo "Loading model (${MODEL})"
echo "Running with log ..."

# 启动 Metrics 服务,输出监控指标;端口为 2000 时,可与平台的监控功能集成
echo "Running metrics (1/4) ... (see /app/metrics.log)"
nohup python3 -m fastchat.serve.metrics --host 0.0.0.0 --port 20000 > metrics.log 2>&1 &

# 启动 controller 服务
echo "Running controller (2/4) ... (see /app/controller.log)"
nohup python3 -m fastchat.serve.controller --host 0.0.0.0 > controller.log 2>&1 &

# 启动 api_server
echo "Running api_server (3/4) ... (see /app/api_server.log)"
nohup python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 8000 > api_server.log 2>&1 &

# 启动 vLLM worker
echo "Running vllm_worker (4/4) ... (see /app/vllm_worker.log)"
python3 -m fastchat.serve.vllm_worker --host 0.0.0.0  --model-path ${MODEL} 2>&1 | tee vllm_worker.log

您将可以将以上启动命令封装为一个 Shell 脚本,方便管理。

详细介绍

  1. 环境变量

    • MODEL:指定要服务的模型路径。
  2. 命令选项

    • fastchat.serve.metrics: 启动监控服务,监控 2000 端口。
    • fastchat.serve.controller:启动控制器服务,监听所有接口上的 21001 端口。
    • fastchat.serve.vllm_worker:启动 vLLM 工作节点服务,监听 21002 端口,使用指定的模型路径。
    • fastchat.serve.openai_api_server:启动 OpenAI API服务器,监听 8000 端口,并连接到控制器。
  3. 日志处理

    • 使用 > log_file 2>&1 & 将标准输出和标准错误重定向到日志文件中,并在后台运行命令。这样可以记录每个服务的日志,便于调试和监控。

通过以上步骤,您可以使用预装 FastChat 和 vLLM 的容器镜像,轻松部署和管理大型语言模型。希望这篇指南能帮助您更好地理解和应用这项技术。

参考脚本

预置镜像中打包一个 /app/entrypoint 脚本,您可以自行查看,仅供参考。

bash
#!/bin/bash

export LOGDIR="" # don't output to local file
VLLM_USE_MODELSCOPE=False # use local model path

# check envs
LOG=${LOG:-1} # LOG=1 as default
if [ -z "$MODEL" ] || [ -z "$TP" ]; then
    echo "Error: MODEL and TP must have values."
    exit 1
fi
echo "Load model (${MODEL}) with tp (${TP}) ..."

# build lora options
if [ -n "${LORA_MODELS}" ]; then
    LORA_OPTIONS="--enable-lora --lora-modules "
    IFS=',' read -ra LORA_MODELS <<< "${LORA_MODELS}"
    for LORA_MODEL in "${LORA_MODELS[@]}"; do
        LORA_OPTIONS+="${LORA_MODEL}=/app/model/${LORA_MODEL} "
    done
fi

# load services
if [ "${LOG}" = "1" ]; then
    echo "Running with log ..."


    echo "Running metrics (1/4) ... (see /app/metrics.log)"
    nohup python3 -m fastchat.serve.metrics \
                  --host 0.0.0.0 --port 20000 > metrics.log 2>&1 &

    echo "Running controller (2/4) ... (see /app/controller.log)"
    nohup python3 -m fastchat.serve.controller \
                  --host 0.0.0.0 > controller.log 2>&1 &

    echo "Running api_server (3/4) ... (see /app/api_server.log)"
    nohup python3 -m fastchat.serve.openai_api_server \
                  --host 0.0.0.0 --port 8000 > api_server.log 2>&1 &

    echo "Running vllm_worker (4/4) ... (see /app/vllm_worker.log)"
    python3 -m fastchat.serve.vllm_worker \
            --host 0.0.0.0 \
            --model-path /app/model/${MODEL} \
            --trust-remote-code \
            --tensor-parallel-size ${TP} \
            --gpu-memory-utilization 0.95 \
            --dtype auto \
            ${LORA_OPTIONS} 2>&1 | tee vllm_worker.log
else
    echo "Running without log ..."

    echo "Running metrics (1/4) ... "
    nohup python3 -m fastchat.serve.metrics \
                  --host 0.0.0.0 --port 20000 >/dev/null 2>&1 &


    echo "Running controller (2/4) ..."
    nohup python3 -m fastchat.serve.controller \
                  --host 0.0.0.0 > /dev/null 2>&1 &

    echo "Running api_server (3/4) ..."
    nohup python3 -m fastchat.serve.openai_api_server \
                  --host 0.0.0.0 --port 8000 > /dev/null 2>&1 &

    echo "Running vllm_worker (4/4) ..."
    python3 -m fastchat.serve.vllm_worker \
            --host 0.0.0.0 \
            --model-path /app/model/${MODEL} \
            --trust-remote-code \
            --tensor-parallel-size ${TP} \
            --gpu-memory-utilization 0.95 \
            --dtype auto \
            ${LORA_OPTIONS} > /dev/null 2>&1

fi

参考资料

  • 关于 FastChat 的详细介绍,请参考 FastChat