远程 vLLM 分发

llamastack/distribution-remote-vllm 分发版包含以下提供商配置:

API

提供商

agents

inline::meta-reference

datasetio

remote::huggingface, inline::localfs

eval

inline::meta-reference

inference

remote::vllm, inline::sentence-transformers

safety

inline::llama-guard

scoring

inline::basic, inline::llm-as-judge, inline::braintrust

telemetry

inline::meta-reference

tool_runtime

remote::brave-search, remote::tavily-search, inline::rag-runtime, remote::model-context-protocol, remote::wolfram-alpha

vector_io

inline::faiss, remote::chromadb, remote::pgvector

如果你想要运行一个独立的 vLLM 服务器进行推理,可以使用此分发版。

环境变量

可以配置以下环境变量

  • LLAMA_STACK_PORT: Llama Stack 分发服务器的端口 (默认值: 8321)

  • INFERENCE_MODEL: 加载到 vLLM 服务器的推理模型 (默认值: meta-llama/Llama-3.2-3B-Instruct)

  • VLLM_URL: 包含主要推理模型的 vLLM 服务器 URL (默认值: http://host.docker.internal:5100/v1)

  • MAX_TOKENS: 生成的最大 token 数 (默认值: 4096)

  • SAFETY_VLLM_URL: 包含安全模型的 vLLM 服务器 URL (默认值: http://host.docker.internal:5101/v1)

  • SAFETY_MODEL: 要使用的安全 (Llama-Guard) 模型名称 (默认值: meta-llama/Llama-Guard-3-1B)

设置 vLLM 服务器

在以下部分中,我们将使用 AMD、NVIDIA 或 Intel GPU 作为 vLLM 服务器的硬件加速器,vLLM 服务器同时充当 LLM 推理提供商和安全提供商。请注意,vLLM 也支持许多其他硬件加速器,我们在此仅使用 GPU 进行演示。请注意,如果遇到问题,可以在 docker run 命令中包含环境变量 --env VLLM_DEBUG_LOG_API_SERVER_RESPONSE=true (vLLM v0.8.3 及更高版本可用),以启用 API 服务器的日志响应进行调试。

在 AMD GPU 上设置 vLLM 服务器

AMD 提供两种主要的 vLLM 容器选项

  • rocm/vllm: 生产就绪容器

  • rocm/vllm-dev: 包含最新 vLLM 功能的开发容器

请查看 关于 ROCm vLLM 使用的博客 获取更多详情。

以下是通过 Docker 在本地启动 ROCm vLLM 服务器的示例脚本

export INFERENCE_PORT=8000
export INFERENCE_MODEL=meta-llama/Llama-3.2-3B-Instruct
export CUDA_VISIBLE_DEVICES=0
export VLLM_DIMG="rocm/vllm-dev:main"

docker run \
    --pull always \
    --ipc=host \
    --privileged \
    --shm-size 16g \
    --device=/dev/kfd \
    --device=/dev/dri \
    --group-add video \
    --cap-add=SYS_PTRACE \
    --cap-add=CAP_SYS_ADMIN \
    --security-opt seccomp=unconfined \
    --security-opt apparmor=unconfined \
    --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
    --env "HIP_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES" \
    -p $INFERENCE_PORT:$INFERENCE_PORT \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    $VLLM_DIMG \
    python -m vllm.entrypoints.openai.api_server \
    --model $INFERENCE_MODEL \
    --port $INFERENCE_PORT

请注意,你还需要设置 --enable-auto-tool-choice--tool-call-parser在 vLLM 中启用工具调用

如果你使用 Llama Stack 的 Safety / Shield API,那么你还需要运行另一个 vLLM 实例,并使用相应的安全模型,例如 meta-llama/Llama-Guard-3-1B,脚本如下:

export SAFETY_PORT=8081
export SAFETY_MODEL=meta-llama/Llama-Guard-3-1B
export CUDA_VISIBLE_DEVICES=1
export VLLM_DIMG="rocm/vllm-dev:main"

docker run \
    --pull always \
    --ipc=host \
    --privileged \
    --shm-size 16g \
    --device=/dev/kfd \
    --device=/dev/dri \
    --group-add video \
    --cap-add=SYS_PTRACE \
    --cap-add=CAP_SYS_ADMIN \
    --security-opt seccomp=unconfined \
    --security-opt apparmor=unconfined \
    --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
    --env "HIP_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES" \
    -p $SAFETY_PORT:$SAFETY_PORT \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    $VLLM_DIMG \
    python -m vllm.entrypoints.openai.api_server \
    --model $SAFETY_MODEL \
    --port $SAFETY_PORT

在 NVIDIA GPU 上设置 vLLM 服务器

请查看 vLLM 文档 获取 vLLM 端点。以下是通过 Docker 在本地启动 vLLM 服务器的示例脚本

export INFERENCE_PORT=8000
export INFERENCE_MODEL=meta-llama/Llama-3.2-3B-Instruct
export CUDA_VISIBLE_DEVICES=0

docker run \
    --pull always \
    --runtime nvidia \
    --gpus $CUDA_VISIBLE_DEVICES \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
    -p $INFERENCE_PORT:$INFERENCE_PORT \
    --ipc=host \
    vllm/vllm-openai:latest \
    --gpu-memory-utilization 0.7 \
    --model $INFERENCE_MODEL \
    --port $INFERENCE_PORT

请注意,你还需要设置 --enable-auto-tool-choice--tool-call-parser在 vLLM 中启用工具调用

如果你使用 Llama Stack 的 Safety / Shield API,那么你还需要运行另一个 vLLM 实例,并使用相应的安全模型,例如 meta-llama/Llama-Guard-3-1B,脚本如下:

export SAFETY_PORT=8081
export SAFETY_MODEL=meta-llama/Llama-Guard-3-1B
export CUDA_VISIBLE_DEVICES=1

docker run \
    --pull always \
    --runtime nvidia \
    --gpus $CUDA_VISIBLE_DEVICES \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
    -p $SAFETY_PORT:$SAFETY_PORT \
    --ipc=host \
    vllm/vllm-openai:latest \
    --gpu-memory-utilization 0.7 \
    --model $SAFETY_MODEL \
    --port $SAFETY_PORT

在 Intel GPU 上设置 vLLM 服务器

请参阅 vLLM XPU 文档 获取 vLLM 端点。除了指导从源码安装 vLLM 或自建 vLLM Docker 容器的 vLLM 侧设置外,Intel 还提供了预构建的 vLLM 容器,可在支持 PyTorch XPU 后端的 Intel GPU 系统上使用

以下是使用 Intel 提供的容器通过 Docker 在本地启动 vLLM 服务器的示例脚本

export INFERENCE_PORT=8000
export INFERENCE_MODEL=meta-llama/Llama-3.2-1B-Instruct
export ZE_AFFINITY_MASK=0

docker run \
    --pull always \
    --device /dev/dri \
    -v /dev/dri/by-path:/dev/dri/by-path \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
    --env ZE_AFFINITY_MASK=$ZE_AFFINITY_MASK \
    -p $INFERENCE_PORT:$INFERENCE_PORT \
    --ipc=host \
    intel/vllm:xpu \
    --gpu-memory-utilization 0.7 \
    --model $INFERENCE_MODEL \
    --port $INFERENCE_PORT

如果你使用 Llama Stack 的 Safety / Shield API,那么你还需要运行另一个 vLLM 实例,并使用相应的安全模型,例如 meta-llama/Llama-Guard-3-1B,脚本如下:

export SAFETY_PORT=8081
export SAFETY_MODEL=meta-llama/Llama-Guard-3-1B
export ZE_AFFINITY_MASK=1

docker run \
    --pull always \
    --device /dev/dri \
    -v /dev/dri/by-path:/dev/dri/by-path \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
    --env ZE_AFFINITY_MASK=$ZE_AFFINITY_MASK \
    -p $SAFETY_PORT:$SAFETY_PORT \
    --ipc=host \
    intel/vllm:xpu \
    --gpu-memory-utilization 0.7 \
    --model $SAFETY_MODEL \
    --port $SAFETY_PORT

运行 Llama Stack

现在你可以运行 Llama Stack 并使用 vLLM 作为推理提供商了。你可以通过 Conda (构建代码) 或 Docker (使用预构建镜像) 来实现。

通过 Docker

此方法可让你快速开始,无需构建分发代码。

export INFERENCE_PORT=8000
export INFERENCE_MODEL=meta-llama/Llama-3.2-3B-Instruct
export LLAMA_STACK_PORT=8321

# You need a local checkout of llama-stack to run this, get it using
# git clone https://github.com/meta-llama/llama-stack.git
cd /path/to/llama-stack

docker run \
  --pull always \
  -p $LLAMA_STACK_PORT:$LLAMA_STACK_PORT \
  -v ./llama_stack/templates/remote-vllm/run.yaml:/root/my-run.yaml \
  llamastack/distribution-remote-vllm \
  --yaml-config /root/my-run.yaml \
  --port $LLAMA_STACK_PORT \
  --env INFERENCE_MODEL=$INFERENCE_MODEL \
  --env VLLM_URL=http://host.docker.internal:$INFERENCE_PORT/v1

如果你使用 Llama Stack 的 Safety / Shield API,请使用

export SAFETY_PORT=8081
export SAFETY_MODEL=meta-llama/Llama-Guard-3-1B

# You need a local checkout of llama-stack to run this, get it using
# git clone https://github.com/meta-llama/llama-stack.git
cd /path/to/llama-stack

docker run \
  --pull always \
  -p $LLAMA_STACK_PORT:$LLAMA_STACK_PORT \
  -v ~/.llama:/root/.llama \
  -v ./llama_stack/templates/remote-vllm/run-with-safety.yaml:/root/my-run.yaml \
  llamastack/distribution-remote-vllm \
  --yaml-config /root/my-run.yaml \
  --port $LLAMA_STACK_PORT \
  --env INFERENCE_MODEL=$INFERENCE_MODEL \
  --env VLLM_URL=http://host.docker.internal:$INFERENCE_PORT/v1 \
  --env SAFETY_MODEL=$SAFETY_MODEL \
  --env SAFETY_VLLM_URL=http://host.docker.internal:$SAFETY_PORT/v1

通过 Conda

确保你已执行 uv pip install llama-stack 并拥有 Llama Stack CLI。

export INFERENCE_PORT=8000
export INFERENCE_MODEL=meta-llama/Llama-3.2-3B-Instruct
export LLAMA_STACK_PORT=8321

cd distributions/remote-vllm
llama stack build --template remote-vllm --image-type conda

llama stack run ./run.yaml \
  --port $LLAMA_STACK_PORT \
  --env INFERENCE_MODEL=$INFERENCE_MODEL \
  --env VLLM_URL=http://localhost:$INFERENCE_PORT/v1

如果你使用 Llama Stack 的 Safety / Shield API,请使用

export SAFETY_PORT=8081
export SAFETY_MODEL=meta-llama/Llama-Guard-3-1B

llama stack run ./run-with-safety.yaml \
  --port $LLAMA_STACK_PORT \
  --env INFERENCE_MODEL=$INFERENCE_MODEL \
  --env VLLM_URL=http://localhost:$INFERENCE_PORT/v1 \
  --env SAFETY_MODEL=$SAFETY_MODEL \
  --env SAFETY_VLLM_URL=http://localhost:$SAFETY_PORT/v1