alibaba/rtp-llm · 上手攻略

  • 仓库:alibaba/rtp-llm
  • 链接:https://github.com/alibaba/rtp-llm
  • 分类:ai
  • 作者:Jay
  • 更新:2026-08-22

这是什么

RTP-LLM(Real-Time Prefill-Decode LLM)是阿里巴巴大模型推理团队开发的高性能 LLM 推理加速引擎,脱胎于 FasterTransformer,在其基础上融合了 TensorRT-LLM 的部分 CUDA kernel 实现,并参考了 vLLM 的 PagedAttention 等设计。该项目已在阿里内部广泛落地,支持淘宝问问、淘宝搜索、Lazada、AE 等多个业务线,服务用户量级超过 1 亿。

0.2.0 版本(2025 年 9 月)包含 Prefill/Decode 分离、多模态支持、多机多卡张量并行等能力,是面向工业级部署的完整推理框架。

解决什么问题

大模型推理有三个核心瓶颈:GPU 内存效率(KVCache 管理)、计算吞吐(Attention kernel 优化)、多卡/多机并行效率。RTP-LLM 从底层 CUDA kernel 到上层调度框架做了一体化优化,目标是让 Qwen、DeepSeek 等开源模型的推理性能达到生产级别,同时保持部署灵活性(pip / Docker / Kubernetes 多路径)。

快速安装

方式一:pip(最简)

pip install --upgrade pip
pip install "rtp_llm>=0.2.0"

方式二:源码编译

前提:Linux + Python 3.10 + NVIDIA GPU(计算能力 7.0+,即 RTX 20xx 及以上 / V100 / A100 / H100 等)+ bazelisk。

# 克隆仓库(使用最新 release 分支)
git clone git@github.com:alibaba/rtp-llm.git
cd rtp-llm

# 编译(NVIDIA GPU,CUDA 12.6)
bazelisk build //rtp_llm:rtp_llm \
  --verbose_failures \
  --config=cuda12_6 \
  --test_output=errors \
  --test_env="LOG_LEVEL=INFO" \
  --jobs=64

# 建立 proto 文件软链
ln -sf "$(pwd)"/bazel-out/k8-opt/bin/rtp_llm/cpp/model_rpc/proto/model_rpc_service_pb2_grpc.py \
  "$(pwd)"/rtp_llm/cpp/model_rpc/proto/
ln -sf "$(pwd)"/bazel-out/k8-opt/bin/rtp_llm/cpp/model_rpc/proto/model_rpc_service_pb2.py \
  "$(pwd)"/rtp_llm/cpp/model_rpc/proto/model_rpc_service_pb2.py

方式三:Docker(推荐用于 DeepSeek / Kimi-K2 / QwenMoE)

docker run --gpus all \
  --shm-size 32g \
  -p 30000:30000 \
  -v /mnt:/mnt \
  -v /home:/home \
  --ipc=host \
  ali-hangzhou-hub-registry.cn-hangzhou.cr.aliyuncs.com/isearch/rtp_llm_sm8x_opensource:0.2.0_0.2.0_2025_10_09_17_35_8fa289f5 \
  /opt/conda310/bin/python -m rtp_llm.start_server \
  --checkpoint_path=/mnt/nas1/hf/models--Qwen--Qwen1.5-0.5B-Chat/snapshots/6114e9c18dac0042fa90925f03b046734369472f/ \
  --model_type=qwen_2 \
  --start_port=30000

更多 Docker 镜像版本见 RTP-LLM Release 页面。

核心用法

启动服务(Python)

from rtp_llm.utils.util import wait_sever_done
import subprocess

port = 8090
server_process = subprocess.Popen([
    "/opt/conda310/bin/python", "-m", "rtp_llm.start_server",
    "--checkpoint_path=/path/to/model/",
    "--model_type=qwen_2",
    f"--start_port={port}"
])
wait_sever_done(server_process, port)

curl 请求

curl -X POST http://localhost:8090/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "What is the capital of France?"}
    ]
  }'

Python Requests

import requests

port = 8090
url = f"http://localhost:{port}/v1/chat/completions"
response = requests.post(url, json={
    "messages": [{"role": "user", "content": "What is the capital of France?"}]
})
print(response.json())

OpenAI Python 客户端(兼容 OpenAI API 格式)

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8090/v1/chat/completions",
    api_key="None"  # RTP-LLM 不强制要求 API key
)

response = client.chat.completions.create(
    model="qwen/qwen2.5-0.5b-instruct",
    messages=[{"role": "user", "content": "List 3 countries and their capitals."}],
    temperature=0,
    max_tokens=64
)
print(response)

流式输出

from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:8090/v1/chat/completions", api_key="None")
stream = client.chat.completions.create(
    model="qwen/qwen2.5-0.5b-instruct",
    messages=[{"role": "user", "content": "List 3 countries and their capitals."}],
    temperature=0, max_tokens=64, stream=True
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

核心优化技术

RTP-LLM 的技术栈涵盖以下工业级优化(参考 arXiv:2605.29639v1):

  1. PagedAttention + FlashAttention + FlashDecoding:高性能 CUDA attention kernel,支持 vLLM 风格的显存管理
  2. WeightOnly INT8/INT4 量化:加载时自动 INT8 量化;INT4 支持 GPTQ / AWQ 量化权重
  3. 自适应 KVCache 量化:动态调整 KVCache 精度,减少显存占用
  4. Prefill/Decode 分离:将预填充和解码阶段分到不同实例处理,适合长上下文场景
  5. 动态批处理开销优化:框架层面精细化调度,降低 padding 开销
  6. 多 LoRA 单实例:一份模型权重同时服务多个 LoRA adapter,降低资源占用
  7. 多模态:支持图文混合输入(参考 LLaVA、Qwen-VL)
  8. Prefix Cache:多轮对话场景复用 system prompt 的 KVCache
  9. Speculative Decoding:投机解码加速生成
  10. 多机多卡张量并行:LeaderWorkerSet 方案,支持 TP=8 等大规模部署

Kubernetes 部署(生产级)

单实例 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: Qwen1.5-0.5B-Chat
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: Qwen1.5-0.5B-Chat
  template:
    spec:
      containers:
        - name: rtp-llm
          image: ali-hangzhou-hub-registry.cn-hangzhou.cr.aliyuncs.com/isearch/rtp_llm_sm8x_opensource:0.2.0_0.2.0_2025_10_09_17_35_8fa289f5
          command: ["/opt/conda310/bin/python", "-m", "rtp_llm.start_server",
                    "--checkpoint_path", "/mnt/models/Qwen1.5-0.5B-Chat/",
                    "--model_type", "qwen_2", "--start_port", "30000"]
          resources:
            limits:
              nvidia.com/gpu: "1"
              memory: "20G"
          volumeMounts:
            - name: shm
              mountPath: /dev/shm
      volumes:
        - name: shm
          emptyDir:
            medium: Memory
            sizeLimit: 2Gi

大模型多节点部署(LeaderWorkerSet)

部署 Qwen3-Coder-480B-A35B(TP=8,2 个节点各 4 卡):

apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
metadata:
  name: Qwen3-Coder-480B-A35B-Instruct
spec:
  replicas: 1
  leaderWorkerTemplate:
    size: 2
    restartPolicy: RecreateGroupOnPodRestart
    leaderTemplate:
      spec:
        containers:
          - name: rtp-llm
            image: ali-hangzhou-hub-registry.cn-hangzhou.cr.aliyuncs.com/isearch/rtp_llm_sm8x_opensource:0.2.0_0.2.0_2025_10_09_17_35_8fa289f5
            resources:
              limits:
                nvidia.com/gpu: "4"
                memory: "800G"
    workerTemplate:
      spec:
        containers:
          - name: rtp-llm
            resources:
              limits:
                nvidia.com/gpu: "4"
                memory: "800G"

⚠️ Docker 镜像托管在阿里云内网 registry(ali-hangzhou-hub-registry.cn-hangzhou.cr.aliyuncs.com),公网访问可能受限;可尝试代理或参考 RTP-LLM Release 查找公网镜像。

坑与注意

  1. 阿里云内网镜像:官方 Docker 镜像在阿里云内网 registry,公网可能拉不到;需要 VPN 或配置镜像代理
  2. Bazel 编译环境:从源码编译需要 Bazelisk、CUDA、cuDNN 等全套 GPU 开发环境,门槛较高;pip 安装是更务实的入门路径
  3. model_type 参数:必须与模型匹配(如 --model_type=qwen_2),不同模型系列参数不同,参考后端教程
  4. 模型权重格式:支持 SafeTensors、PyTorch、Megatron 格式;从 HuggingFace 加载时路径写法需包含快照目录(如 models--Qwen--Qwen1.5-0.5B-Chat/snapshots/...
  5. GPU 显存:INT4 量化可在单卡(如 T4)运行大模型;FP16 通常需要 A100/H100 等大显存卡;裸机 4×A100 约 160GB 可运行 Qwen-72B FP16
  6. 多模态配置:多模态模型需要额外配置 ViT 路径,参考 OpenAI Vision API

与同类对比

RTP-LLM vLLM TensorRT-LLM
开发方 阿里巴巴 UC Berkeley / vLLM 团队 NVIDIA
核心基础 FasterTransformer PagedAttention CUDA / TensorRT
量化支持 INT8 / INT4(GPTQ/AWQ) INT8 / FP8 INT8 / FP8
Prefill/Decode 分离 ✅ 原生支持
多模态 ✅(LLaVA / Qwen-VL) 有限
LoRA 多实例
多机多卡 ✅ LeaderWorkerSet
Kubernetes 原生 需自行适配 需自行适配
开源生态 参考 vLLM/TRT-LLM 主导 NVIDIA 官方

RTP-LLM 处于 vLLM 和 TensorRT-LLM 之间的定位——比 vLLM 更贴近工业定制,比 TensorRT-LLM 更易部署和扩展。适合已有阿里内部工程能力、需要在 Kubernetes 环境中规模化部署 Qwen/DeepSeek 系列模型的团队。

一句话推荐结论

需要在 Kubernetes 环境大规模部署 Qwen/DeepSeek 系列模型、追求 Prefill-Decode 分离和量化优化、且团队有一定 CUDA 编译能力的,推荐评估 RTP-LLM;个人用户或快速实验场景优先用 vLLM。