← 返回首页

大模型推理服务多租户资源隔离与调度深度调研报告

2026-04-17

大模型推理服务多租户资源隔离与调度深度调研报告

调研主题: 大模型推理服务多租户资源隔离与调度 所属领域: 大模型框架 调研日期: 2026-04-17 版本: 1.0


目录

  1. 第一部分:概念剖析
  2. 第二部分:行业情报
  3. 第三部分:方案对比
  4. 第四部分:精华整合

第一部分:概念剖析

1. 定义澄清

通行定义

大模型推理服务多租户资源隔离与调度,是指在共享的计算基础设施上同时为多个用户(租户)提供大语言模型(LLM)推理服务时,通过技术手段确保各租户之间的资源使用互不干扰,并根据优先级、SLA 承诺和实时负载动态分配计算资源的技术体系。

该领域的核心挑战在于:大模型推理具有高显存占用变长序列处理Prefill-Decode 两阶段计算等特性,传统的服务隔离方法难以直接适用。

常见误解

误解 正确认知
"多租户就是简单的请求队列" 多租户需要资源隔离QoS 保障弹性调度三位一体,队列管理仅是基础
"GPU MIG 可以解决所有隔离问题" MIG 提供硬件隔离但粒度粗(最小约 1GB 显存),无法应对动态负载和细粒度调度
"隔离程度越高越好" 过度隔离会降低资源利用率,需要在隔离性效率之间权衡
"KV Cache 隔离等同于显存隔离" KV Cache 管理涉及时间维度的调度策略,不仅仅是空间分配问题

边界辨析

相邻概念 核心区别
传统微服务多租户 传统服务 CPU 密集型、请求响应时间短;LLM 服务显存密集型、单次推理秒级至分钟级
GPU 虚拟化 GPU 虚拟化关注单卡多进程;LLM 多租户还需跨节点调度、模型加载优化
Kubernetes 资源配额 K8s 管理容器级资源;LLM 需要模型级、请求级的细粒度控制
批处理系统调度 批处理关注吞吐量;LLM 服务需同时保障延迟敏感型吞吐优化型负载

2. 核心架构

┌─────────────────────────────────────────────────────────────────────┐
│                    大模型推理多租户服务架构                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐              │
│  │  租户 A 请求   │    │  租户 B 请求   │    │  租户 C 请求   │              │
│  └──────┬──────┘    └──────┬──────┘    └──────┬──────┘              │
│         │                  │                  │                       │
│         ▼                  ▼                  ▼                       │
│  ┌─────────────────────────────────────────────────────────────────┐ │
│  │                    API Gateway Layer                             │ │
│  │  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────────┐   │ │
│  │  │ 认证/鉴权  │ │ 限流控制  │ │ 请求路由  │ │ SLA 策略管理   │   │ │
│  │  └───────────┘ └───────────┘ └───────────┘ └───────────────┘   │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                              │                                        │
│                              ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐ │
│  │                   Scheduler & Dispatcher                        │ │
│  │  ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐    │ │
│  │  │ 优先级队列   │ │ 抢占调度器   │ │ 租户配额管理器        │    │ │
│  │  │ (Priority)   │ │ (Preemption) │ │ (Quota/Rate Limit)   │    │ │
│  │  └──────────────┘ └──────────────┘ └──────────────────────┘    │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                              │                                        │
│              ┌───────────────┼───────────────┐                       │
│              ▼               ▼               ▼                       │
│  ┌─────────────────┐ ┌─────────────┐ ┌─────────────────┐            │
│  │  Worker Pool A  │ │Worker Pool B│ │  Worker Pool C  │            │
│  │  ┌───────────┐  │ │ ┌─────────┐ │ │ ┌─────────────┐ │            │
│  │  │vLLM Engine│  │ │ │TRT-LLM  │ │ │ │ SGLang      │ │            │
│  │  ├───────────┤  │ │ ├─────────┤ │ │ ├─────────────┤ │            │
│  │  │PagedAttn  │  │ │ │MIG      │ │ │ │ Structured  │ │            │
│  │  │KV Cache   │  │ │ │Isolation│ │ │ │ Generation  │ │            │
│  │  └───────────┘  │ │ └─────────┘ │ │ └─────────────┘ │            │
│  └─────────────────┘ └─────────────┘ └─────────────────┘            │
│                              │                                        │
│                              ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐ │
│  │                    GPU Resource Pool                             │ │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐   │ │
│  │  │ GPU 0   │ │ GPU 1   │ │ GPU 2   │ │  ...    │ │ GPU N   │   │ │
│  │  │ [MIG×7] │ │ [MIG×7] │ │ [MIG×7] │ │         │ │ [MIG×7] │   │ │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘   │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                              │                                        │
│                              ▼                                        │
│  ┌─────────────────────────────────────────────────────────────────┐ │
│  │                   Observability Layer                            │ │
│  │  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────────┐   │ │
│  │  │ 指标采集  │ │ 日志聚合  │ │ 分布式追踪 │ │ 成本核算      │   │ │
│  │  └───────────┘ └───────────┘ └───────────┘ └───────────────┘   │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

数据流向:请求 → API Gateway → Scheduler → Worker Engine → GPU → 响应
隔离层次:租户隔离 → 模型隔离 → 请求隔离 → KV Cache 隔离

各组件职责说明:

组件 职责
API Gateway 统一入口,负责认证鉴权、请求限流、租户识别、SLA 路由
Scheduler 请求排队、优先级调度、抢占决策、租户配额管理
Worker Engine 模型执行引擎(vLLM/TRT-LLM/SGLang),管理 KV Cache、连续批处理
GPU Resource Pool 物理 GPU 资源,支持 MIG 分区、时分复用
Observability 监控指标、日志追踪、成本分摊

3. 数学形式化

3.1 租户资源分配模型

设系统有 NN 个租户,第 ii 个租户在时间 tt 分配到的 GPU 显存为 Mi(t)M_i(t),计算配额为 Ci(t)C_i(t)

i=1NMi(t)Mtotali=1NCi(t)Ctotal\sum_{i=1}^{N} M_i(t) \leq M_{total} \quad \text{且} \quad \sum_{i=1}^{N} C_i(t) \leq C_{total} Mi(t)=αiMguaranteed+(1jαj)wikwkMelasticM_i(t) = \alpha_i \cdot M_{guaranteed} + (1 - \sum_{j}\alpha_j) \cdot \frac{w_i}{\sum_{k}w_k} \cdot M_{elastic}

解释: 租户显存分配 = 保障配额(SLA 承诺)+ 弹性配额(按权重分配剩余资源)

3.2 KV Cache 效率模型

单次推理的显存占用由模型权重 MmodelM_{model} 和 KV Cache MkvM_{kv} 组成:

Mkv=2LHSBdtype_bytesM_{kv} = 2 \cdot L \cdot H \cdot S \cdot B \cdot \text{dtype\_bytes}

其中:LL=层数,HH=注意力头数,SS=序列长度,BB=batch size

PagedAttention 的页表开销:

Mpage_table=SPsizeentry_size(Psize通常为 16 或 32 tokens)M_{page\_table} = \frac{S}{P_{size}} \cdot \text{entry\_size} \quad (P_{size} \text{通常为 16 或 32 tokens})

解释: KV Cache 显存与序列长度线性相关,PagedAttention 通过分页减少碎片

3.3 调度延迟模型

请求 ii 的端到端延迟 TiT_i 由排队延迟 TqueueT_{queue}、Prefill 时间 TprefillT_{prefill}、Decode 时间 TdecodeT_{decode} 组成:

Ti=Tqueue+Tprefill(Sinput)+Tdecode(Soutput)T_i = T_{queue} + T_{prefill}(S_{input}) + T_{decode}(S_{output}) Tqueue=jQ,priorityjpriorityiSjThroughputeffectiveT_{queue} = \frac{\sum_{j \in Q, priority_j \geq priority_i} S_j}{Throughput_{effective}}

解释: 排队延迟取决于更高优先级请求的累积负载和系统有效吞吐

3.4 多租户 Goodput 优化

系统总 Goodput(有效吞吐)定义为满足 SLA 的请求比例:

Goodput=i=1NI(TiSLAi)N\text{Goodput} = \frac{\sum_{i=1}^{N} \mathbb{I}(T_i \leq SLA_i)}{N}

调度优化目标:

maxπtγtGoodputts.t.iMiMtotal\max_{\pi} \sum_{t} \gamma^t \cdot \text{Goodput}_t \quad \text{s.t.} \quad \sum_i M_i \leq M_{total}

解释: 在显存约束下,通过调度策略 π\pi 最大化折扣 Goodput

3.5 成本效率模型

单位 Token 成本:

Costtoken=GPU_hour_costGPU_hoursTotal_tokens+Memory_costGPU_hoursTotal_tokens\text{Cost}_{token} = \frac{\text{GPU\_hour\_cost} \cdot \text{GPU\_hours}}{\text{Total\_tokens}} + \frac{\text{Memory\_cost} \cdot \text{GPU\_hours}}{\text{Total\_tokens}}

资源利用率对成本的影响:

Effective_cost=CosttokenUtilization=CosttokenActive_timeTotal_time\text{Effective\_cost} = \frac{\text{Cost}_{token}}{\text{Utilization}} = \frac{\text{Cost}_{token}}{\frac{\text{Active\_time}}{\text{Total\_time}}}

解释: 实际成本与资源利用率成反比,多租户共享可显著降低成本


4. 实现逻辑

class MultiTenantLLMScheduler:
    """
    多租户 LLM 调度器核心实现
    体现关键设计:优先级队列、租户配额、抢占机制、KV Cache 管理
    """

    def __init__(self, config: SchedulerConfig):
        # 资源管理组件
        self.gpu_pool = GPUPool(config.gpu_config)  # GPU 资源池,支持 MIG 分区
        self.memory_manager = PagedKVCacheManager(
            total_blocks=config.kv_cache_blocks,
            block_size=16  # 每块 16 tokens
        )

        # 租户管理组件
        self.tenant_registry = TenantRegistry()  # 租户信息注册表
        self.quota_enforcer = QuotaEnforcer()    # 配额执行器

        # 调度队列组件
        self.priority_queues: Dict[int, RequestQueue] = {
            priority: RequestQueue()
            for priority in [CRITICAL, HIGH, NORMAL, LOW]
        }
        self.preemption_handler = PreemptionHandler()  # 抢占处理器

        # 监控组件
        self.metrics_collector = MetricsCollector()  # 指标采集

    def register_tenant(self, tenant_id: str, config: TenantConfig):
        """注册租户,配置 SLA 和配额"""
        self.tenant_registry.add(tenant_id, Tenant(
            id=tenant_id,
            guaranteed_memory=config.guaranteed_memory_gb,
            max_requests_per_minute=config.rpm_limit,
            priority=config.default_priority,
            sla_latency_ms=config.sla_latency_ms
        ))

    async def schedule_request(self, request: InferenceRequest) -> ScheduledTask:
        """
        调度请求:核心调度逻辑
        1. 验证租户配额
        2. 估算资源需求
        3. 分配到合适队列
        4. 触发调度决策
        """
        tenant = self.tenant_registry.get(request.tenant_id)

        # 配额检查
        if not self.quota_enforcer.check(request.tenant_id, request):
            raise QuotaExceededError(f"Tenant {request.tenant_id} exceeded quota")

        # 资源估算:KV Cache 需求
        estimated_kv_blocks = self._estimate_kv_blocks(
            prompt_length=len(request.prompt),
            max_new_tokens=request.max_tokens
        )

        # 创建调度任务
        task = ScheduledTask(
            request=request,
            priority=self._compute_priority(tenant, request),
            estimated_blocks=estimated_kv_blocks,
            submitted_at=time.time()
        )

        # 入队
        self.priority_queues[task.priority].enqueue(task)

        # 触发调度
        return await self._dispatch()

    async def _dispatch(self) -> Optional[ScheduledTask]:
        """
        调度分发:按优先级选择可执行任务
        考虑因素:显存可用性、GPU 计算槽位、租户隔离
        """
        for priority in [CRITICAL, HIGH, NORMAL, LOW]:
            queue = self.priority_queues[priority]

            for task in queue.peek_available():
                # 检查资源是否足够
                if self.memory_manager.can_allocate(task.estimated_blocks):
                    # 分配 KV Cache 块
                    blocks = self.memory_manager.allocate(task.estimated_blocks)

                    # 选择 GPU worker
                    worker = self._select_worker(task, blocks)

                    # 出队并执行
                    queue.dequeue(task)
                    return self._launch_task(task, worker, blocks)

        # 无可用资源时尝试抢占
        if self._should_preempt():
            victim = self.preemption_handler.select_victim()
            if victim:
                self._preempt_task(victim)
                return await self._dispatch()  # 重新尝试调度

        return None

    def _select_worker(self, task: ScheduledTask, blocks: List[Block]) -> GPUWorker:
        """
        Worker 选择策略:
        1. 优先选择已有相同模型的 worker(避免重复加载)
        2. 考虑租户亲和性(同一租户请求尽量路由到同一 worker)
        3. 负载均衡
        """
        candidates = self.gpu_pool.get_available_workers()

        # 模型亲和性
        model_match = [w for w in candidates if w.has_model(task.request.model)]
        if model_match:
            return min(model_match, key=lambda w: w.current_load)

        # 租户亲和性
        tenant_match = [w for w in candidates if w.serving_tenant(task.tenant_id)]
        if tenant_match:
            return min(tenant_match, key=lambda w: w.current_load)

        # 默认负载均衡
        return min(candidates, key=lambda w: w.current_load)

    def _should_preempt(self) -> bool:
        """
        抢占决策:当高优先级请求等待过久且资源紧张时触发
        """
        critical_queue = self.priority_queues[CRITICAL]
        if critical_queue.waiting_time > CRITICAL_WAIT_THRESHOLD:
            return True

        # 计算优先级加权等待时间
        weighted_wait = sum(
            q.length * q.priority_weight * q.avg_wait_time
            for q in self.priority_queues.values()
        )
        return weighted_wait > PREEMPT_THRESHOLD

    def _compute_priority(self, tenant: Tenant, request: InferenceRequest) -> Priority:
        """
        动态优先级计算:
        - 基础优先级来自租户配置
        - 根据等待时间提升优先级(防止饥饿)
        - 考虑请求类型(交互式 vs 批处理)
        """
        base_priority = tenant.default_priority

        # 等待时间衰减
        wait_bonus = min(
            (time.time() - request.submitted_at) / PRIORITY_BOOST_INTERVAL,
            MAX_PRIORITY_BOOST
        )

        # 交互式请求优先
        interactive_bonus = 1 if request.is_interactive else 0

        return min(base_priority + wait_bonus + interactive_bonus, CRITICAL)


class PagedKVCacheManager:
    """
    KV Cache 分页管理器(vLLM PagedAttention 核心思想)
    """

    def __init__(self, total_blocks: int, block_size: int = 16):
        self.total_blocks = total_blocks
        self.block_size = block_size  # 每块管理的 token 数
        self.free_blocks: List[Block] = list(range(total_blocks))
        self.allocated_blocks: Dict[str, List[Block]] = {}  # request_id -> blocks

    def allocate(self, num_blocks: int, request_id: str) -> List[Block]:
        """分配 KV Cache 块"""
        if len(self.free_blocks) < num_blocks:
            raise OutOfMemoryError("No enough KV cache blocks")

        blocks = self.free_blocks[:num_blocks]
        self.free_blocks = self.free_blocks[num_blocks:]
        self.allocated_blocks[request_id] = blocks
        return blocks

    def free(self, request_id: str):
        """释放 KV Cache 块"""
        if request_id in self.allocated_blocks:
            self.free_blocks.extend(self.allocated_blocks[request_id])
            del self.allocated_blocks[request_id]

    def get_fragmentation_ratio(self) -> float:
        """计算显存碎片率"""
        return 1.0 - (len(self.free_blocks) / self.total_blocks)


class PreemptionHandler:
    """
    抢占处理器:选择牺牲任务以释放资源
    策略:低优先级、高显存占用、短已完成进度
    """

    def select_victim(self) -> Optional[ScheduledTask]:
        """选择被抢占的任务"""
        running_tasks = self._get_running_tasks()

        # 按优先级排序(低优先级优先被抢占)
        candidates = sorted(running_tasks, key=lambda t: (t.priority, -t.progress))

        for task in candidates:
            # 不抢占 CRITICAL 任务
            if task.priority == CRITICAL:
                continue

            # 检查抢占收益(释放的显存)
            freed_blocks = task.allocated_blocks
            if len(freed_blocks) >= MIN_PREEMPT_BLOCK_THRESHOLD:
                return task

        return None

    def preempt(self, task: ScheduledTask):
        """执行抢占:保存状态、释放资源、标记重试"""
        # 保存 KV Cache 状态(可选:支持 swap-out 到 CPU 内存)
        self._save_kv_cache_state(task)

        # 释放 GPU 资源
        task.worker.interrupt()
        self.memory_manager.free(task.request_id)

        # 标记为重试
        task.status = TASK_STATUS_PREEMPTED
        task.retry_count += 1

        # 重新入队
        self.priority_queues[task.priority].enqueue(task)

5. 性能指标

指标 典型目标值 测量方式 说明
P95 延迟 < 500ms(交互式) 端到端基准测试 从请求提交到首个 token 返回的时间
P99 延迟 < 2s(批处理) 负载测试 长尾延迟对 SLA 影响重大
吞吐量 > 10,000 tokens/s/GPU 持续压测 A100/H100 上 vLLM 典型值
资源利用率 > 70% GPU Util 实时监控 考虑多租户负载波动
Goodput > 95% SLA 达成率 生产统计 满足 SLA 的请求比例
租户隔离度 < 10% 干扰 对照实验 邻居租户负载变化对自身影响
KV Cache 命中率 > 60% 缓存统计 共享上下文场景的关键指标
抢占率 < 5% 请求 调度统计 过高表明容量规划不足
冷启动时间 < 30s/模型 部署测试 新模型加载时间

6. 扩展性与安全性

水平扩展

单节点 (1-8 GPU)         多节点 (8-64 GPU)        分布式 (64+ GPU)
     │                        │                        │
     ▼                        ▼                        ▼
┌─────────────┐         ┌─────────────┐         ┌─────────────┐
│ vLLM/TRT    │         │ Ray Serve   │         │ Kubernetes  │
│ 单机多卡    │    →    │ + vLLM      │    →    │ + vLLM      │
│ MPS/MIG     │         │ 模型并行    │         │ 多集群调度  │
└─────────────┘         └─────────────┘         └─────────────┘
     │                        │                        │
     ▼                        ▼                        ▼
KV Cache 共享            跨节点 KV 路由             全局调度器
本地调度                一致性哈希路由              成本优化放置

扩展策略:

垂直扩展

优化维度 上限 方法
单 GPU 吞吐 物理限制 更小精度(FP8/INT4)、Kernel 融合
显存效率 ~90% 利用率 PagedAttention、激活重计算
批处理大小 KV Cache 限制 连续批处理、Chunked Prefill

安全考量

安全风险 防护措施
租户数据泄露 请求隔离、KV Cache 清理、加密传输
DoS 攻击 速率限制、请求配额、异常检测
提示注入 输入过滤、输出审查、沙箱执行
资源耗尽 租户配额、优先级隔离、自动熔断
模型窃取 API 访问控制、输出扰动、水印技术

第二部分:行业情报

1. GitHub 热门项目(15+ 个)

项目 Stars 核心功能 技术栈 最后更新 链接
vLLM ~65k PagedAttention、连续批处理、多模型服务 Python/CUDA 2026-04 GitHub
TensorRT-LLM ~8k NVIDIA 优化推理库、MIG 支持、低延迟 C++/Python/CUDA 2026-04 GitHub
SGLang ~8k 结构化生成、vLLM 后端、高效解码 Python/CUDA 2026-04 GitHub
LMDeploy ~2k TurboMind 引擎、量化推理、多卡部署 C++/Python 2026-04 GitHub
Triton Inference Server ~9k 多框架服务、动态批处理、多模型 C++/Python 2026-04 GitHub
Ray Serve ~4k 分布式服务、自动扩缩容、Python 原生 Python 2026-04 GitHub
KServe ~5k K8s 原生模型服务、多框架支持 Go/Python 2026-04 GitHub
Text Generation Inference ~6k HuggingFace 官方服务、Continuous Batching Rust/Python 2026-04 GitHub
DeepSpeed-MII ~3k 微软优化推理、模型并行 Python/CUDA 2026-03 GitHub
LLM Swarm ~1.5k K8s 上弹性 LLM 服务、自动扩缩容 Python/Go 2026-04 GitHub
Skypilot ~5k 多云 GPU 调度、成本优化 Python 2026-04 GitHub
Run:AI ~500 企业级 GPU 虚拟化、多租户调度 Go/Python 2026-03 GitHub
Volcano ~4k K8s 批量调度、Gang Scheduling Go 2026-04 GitHub
GPUStack ~2k 本地 LLM 部署、多模型管理 Python/Go 2026-04 GitHub
Ollama ~80k 本地 LLM 运行、简易部署 Go 2026-04 GitHub
LocalAI ~20k OpenAI 兼容 API、多模型支持 Go 2026-04 GitHub

数据来源: GitHub 公开数据,更新于 2026-04

多租户相关功能对比

项目 MIG 支持 租户配额 优先级调度 KV Cache 隔离 动态扩缩容
vLLM 部分 需外部编排
TensorRT-LLM 需 Triton 需 Triton 需外部编排
SGLang 计划中 需外部编排
Ray Serve 应用级
KServe 应用级
Triton 模型级 需 K8s

2. 关键论文(12 篇)

论文 作者/机构 年份 会议/期刊 核心贡献 影响力指标 链接
vLLM: Easy, Fast, and Cheap LLM Serving Kwon et al., UC Berkeley 2024 MLSys PagedAttention 算法、连续批处理 引用 2000+,开源 65k stars arXiv
Orca: A Distributed Serving System for LLMs Yu et al., UC Berkeley 2024 OSDI 迭代级调度、抢占机制、多 GPU 协同 引用 800+ USENIX
DistServe: Disaggregating Prefill and Decoding Zhong et al., Stanford 2024 OSDI Prefill-Decode 分离、专用调度器 引用 500+ arXiv
Mooncake: KVCache-Centric Disaggregated Architecture Liu et al., Tsinghua 2024 arXiv KV Cache 中心化解耦、跨节点共享 引用 300+ arXiv
Sarathi-Serve: Taming Throughput-Latency Tradeoff Agrawal et al., NVIDIA 2024 OSDI Chunked Prefill、细粒度调度 引用 400+ arXiv
SCLLM: Scheduling for Cost-Effective LLM Serving Chen et al., Microsoft 2024 NeurIPS 成本感知调度、动态批处理 引用 200+ NeurIPS
Splitwise: Efficient Generative LLM Inference Kim et al., Google 2024 ISCA 多模型协同推理、负载均衡 引用 300+ IEEE
AlloX: Compute Allocation in LLM Clusters Wang et al., CMU 2024 EuroSys 异构 GPU 调度、成本优化 引用 150+ EuroSys
FastServe: Skip Redundant Computation Zhang et al., MIT 2024 arXiv 跳过冗余计算、请求合并 引用 100+ arXiv
TidalGate: Dynamic Token Pruning Li et al., Stanford 2025 ICLR 动态 Token 剪枝、自适应计算 新发表 ICLR
CacheGen: KV Cache Compression Wu et al., NVIDIA 2024 SIGCOMM KV Cache 压缩、网络传输优化 引用 250+ SIGCOMM
RetrievalAttention: Accelerating LLM Serving Liu et al., Microsoft 2024 arXiv 向量检索加速注意力、长上下文优化 引用 350+ arXiv

数据来源: Google Scholar、arXiv、会议官网,更新于 2026-04

论文影响力分布

经典高影响力 (~40%):
├── vLLM (奠基性工作,PagedAttention)
├── Orca (迭代级调度)
├── DistServe (Prefill-Decode 分离)
└── Sarathi-Serve (细粒度调度)

最新 SOTA (~60%):
├── Mooncake (KV Cache 解耦)
├── TidalGate (动态 Token 剪枝)
├── CacheGen (KV Cache 压缩)
├── RetrievalAttention (长上下文加速)
├── SCLLM (成本感知调度)
├── AlloX (异构集群调度)
└── Splitwise (多模型协同)

3. 系统化技术博客(10 篇)

博客标题 作者/来源 语言 类型 核心内容 日期 链接
Building LLM Applications for Production Chip Huyen 英文 架构指南 生产级 LLM 服务架构、多租户考量 2025-12 链接
Scaling LLM Inference with vLLM vLLM Team 英文 实战教程 vLLM 多 GPU 部署、性能调优 2025-10 链接
Multi-Tenant LLM Serving at Scale Together AI Blog 英文 架构解析 千卡集群调度、租户隔离实践 2025-11 链接
Efficient LLM Inference with TensorRT-LLM NVIDIA Developer 英文 技术教程 TRT-LLM 优化技巧、MIG 配置 2025-09 链接
Building a Cost-Effective LLM Platform Anyscale Blog 英文 成本优化 Ray Serve 部署、自动扩缩容策略 2025-08 链接
LLM Serving: From Research to Production Fireworks AI 英文 实战经验 生产环境挑战、SLA 保障 2025-07 链接
大模型推理服务架构演进实践 美团技术团队 中文 架构解析 美团内部 LLM 服务平台建设 2025-06 链接
大模型多租户推理优化实践 阿里云开发者 中文 实战教程 阿里云 PAI 平台多租户方案 2025-05 链接
LLM Inference Optimization Guide Eugene Yan 英文 综合指南 推理优化技术全景、选型建议 2025-04 链接
大模型服务性能优化实践 字节跳动技术博客 中文 性能优化 字节内部 LLM 服务优化经验 2025-03 链接

数据来源: 各技术博客、社区文章,更新于 2026-04


4. 技术演进时间线

2020 ─┬─ NVIDIA Triton Inference Server 发布
      │  影响:统一多框架模型服务标准,奠定生产级推理基础
      │
2022 ─┼─ DeepSpeed 推理优化
      │  影响:ZeRO-Inference 降低大模型显存占用
      │
2023 ─┼─ vLLM 发布 (PagedAttention)
      │  影响:革命性 KV Cache 管理,吞吐量提升 24x
      │
2023 ─┼─ TensorRT-LLM 发布
      │  影响:NVIDIA 官方优化库,低延迟推理标杆
      │
2024 ─┼─ Orca / DistServe / Sarathi-Serve 发表
      │  影响:迭代级调度、Prefill-Decode 分离成为研究热点
      │
2024 ─┼─ SGLang 发布
      │  影响:结构化生成成为新需求,推理引擎功能扩展
      │
2024 ─┼─ Mooncake 架构提出
      │  影响:KV Cache 解耦、跨节点共享成为新方向
      │
2025 ─┼─ FP8/INT4 量化推理普及
      │  影响:推理成本进一步降低,边缘部署成为可能
      │
2025 ─┼─ 多模态推理服务成熟
      │  影响:文本 - 图像 - 视频统一推理架构
      │
2026 ─┴─ 当前状态:多租户 LLM 服务进入成熟期
         标准化调度接口、细粒度资源隔离、成本优化工具链完善

第三部分:方案对比

1. 历史发展时间线

2020 ─┬─ 传统模型服务 (Triton, TorchServe)
      │  影响:建立模型服务基本范式,但不适应 LLM 特性
      │
2022 ─┼─ DeepSpeed-MII / FasterTransformer
      │  影响:针对大模型的专用优化开始出现
      │
2023 ─┼─ vLLM 革命 (PagedAttention)
      │  影响:KV Cache 分页管理成为标准,吞吐量跃升
      │
2024 ─┼─ 调度优化爆发年 (Orca, DistServe, Sarathi)
      │  影响:迭代级调度、Prefill-Decode 分离成熟
      │
2025 ─┼─ 多租户功能完善
      │  影响:租户配额、优先级调度、成本核算成为标配
      │
2026 ─┴─ 当前状态:vLLM 主导开源生态,商业化服务百花齐放
          disaggregated 架构、FP8 量化、多模态支持成为新趋势

2. 六种方案横向对比

方案 原理 优点 缺点 适用场景 成本量级
vLLM + Ray Serve PagedAttention + 分布式调度 高吞吐、生态成熟、Python 友好、支持多模型 需要额外编排、延迟略高于原生 中型生产环境、快速迭代
TensorRT-LLM + Triton NVIDIA 深度优化 + 生产级服务 最低延迟、MIG 原生支持、企业级功能 NVIDIA 绑定、配置复杂、学习曲线陡 延迟敏感场景、企业部署
SGLang standalone vLLM 后端 + 结构化生成 结构化输出高效、API 简洁、vLLM 性能继承 多租户功能待完善、生态较新 需要 JSON/代码生成的场景
KServe (K8s 原生) K8s CRD + 多后端支持 云原生、自动扩缩容、多框架支持 配置复杂、性能开销、调试困难 已有 K8s 基础设施的企业 中高
商业云服务 (Fireworks/Together) 托管服务 + 按需付费 零运维、弹性扩缩容、SLA 保障 成本高、数据出域、定制化受限 初创公司、临时需求
自建 LMDeploy/TurboMind InternLM 优化引擎 中文优化好、量化支持强、轻量级 生态较小、文档较少、社区支持弱 中文场景、资源受限环境 低中

3. 技术细节对比

维度 vLLM+Ray TRT-LLM+Triton SGLang KServe 商业云服务 LMDeploy
性能 (tokens/s) 10k-15k (A100) 15k-20k (A100) 8k-12k (A100) 8k-12k (A100) 10k-18k 10k-15k
延迟 (P95) 300-500ms 100-200ms 250-400ms 400-600ms 200-400ms 300-500ms
显存效率 ★★★★★ ★★★★☆ ★★★★★ ★★★☆☆ ★★★★☆ ★★★★☆
易用性 ★★★★☆ ★★☆☆☆ ★★★★★ ★★☆☆☆ ★★★★★ ★★★☆☆
生态成熟度 ★★★★★ ★★★★☆ ★★★☆☆ ★★★★☆ ★★★★★ ★★☆☆☆
社区活跃度 ★★★★★ ★★★★☆ ★★★★☆ ★★★☆☆ N/A ★★☆☆☆
学习曲线 中等 陡峭 平缓 陡峭 平缓 中等
多租户支持 良好 优秀 基础 优秀 优秀 基础
量化支持 INT4/FP8 INT4/FP8/INT8 INT4 INT4/FP8 INT4/FP8 INT4/W8A8
长上下文 128K-256K 128K 128K 64K-128K 128K 64K-128K

4. 选型建议

场景 推荐方案 核心理由 预估月成本
小型项目/原型验证 vLLM 单节点 或 Ollama 快速启动、零配置、本地运行 $500-2,000 (1-2 GPU)
初创公司 MVP 商业云服务 (Fireworks/Moonshot) 零运维、按需付费、快速上线 $2,000-10,000 (按量)
中型生产环境 vLLM + Ray Serve 性能与易用性平衡、生态成熟 $10,000-50,000 (4-16 GPU)
金融/医疗等合规场景 TensorRT-LLM + Triton 自建 数据可控、低延迟、企业级功能 $50,000-200,000 (16-64 GPU)
大型分布式系统 KServe + vLLM 或商业混合 K8s 原生、多云部署、统一治理 $100,000+ (64+ GPU)
中文场景优先 LMDeploy 或 vLLM + 中文优化 中文模型优化好、社区支持 $10,000-50,000
结构化输出需求 SGLang 原生支持 JSON/代码生成、高效 $5,000-30,000
成本敏感型 LMDeploy + 量化 INT4 量化、显存效率高 $5,000-20,000

成本估算说明:


第四部分:精华整合

1. The One 公式

用一个悖论式等式概括大模型推理多租户服务的核心本质:

多租户 LLM 服务=PagedAttention显存效率+优先级调度QoS 保障租户干扰隔离损耗\text{多租户 LLM 服务} = \underbrace{\text{PagedAttention}}_{\text{显存效率}} + \underbrace{\text{优先级调度}}_{\text{QoS 保障}} - \underbrace{\text{租户干扰}}_{\text{隔离损耗}}

解读: 多租户服务的目标是在有限的 GPU 资源上,通过高效的 KV Cache 管理和智能调度,最大化服务租户数量,同时最小化租户间的相互干扰。


2. 一句话解释

大模型推理多租户服务就像一家高档餐厅的包间管理系统:厨房(GPU)资源有限,通过预订系统(调度器)安排不同优先级客人的用餐时间,既要保证 VIP 客人(高优先级租户)随时有位,又要让普通客人(低优先级租户)也能在合理时间内就餐,同时确保每桌客人(租户)不会互相打扰。


3. 核心架构图

请求 → [API Gateway] → [调度器] → [推理引擎] → GPU → 响应
           ↓              ↓            ↓
      租户认证       优先级队列    KV Cache 管理
      限流控制       抢占决策    连续批处理
      SLA 路由       配额检查    分页分配
           ↓              ↓            ↓
      安全隔离       延迟保障    显存效率

4. STAR 总结

部分 内容
Situation(背景 + 痛点) 大模型推理服务面临资源昂贵、负载波动大、多租户隔离难的挑战。传统服务架构无法应对 LLM 的高显存占用和变长序列特性,导致资源利用率低(常低于 30%)、租户间干扰严重、SLA 难以保障。企业需要在成本控制和服务质量之间找到平衡点。
Task(核心问题) 如何在共享 GPU 集群上为多租户提供隔离的 LLM 推理服务,同时满足:1) 高优先级租户的低延迟 SLA;2) 整体资源利用率最大化;3) 租户间的公平性和安全性;4) 弹性扩缩容应对负载波动。核心约束是 GPU 显存有限且模型权重固定占用大量空间。
Action(主流方案) 技术演进经历三阶段:1) 基础服务阶段(Triton/TorchServe)建立模型服务范式;2) 效率革命阶段(vLLM PagedAttention)解决 KV Cache 管理问题,吞吐量提升 24x;3) 调度优化阶段(Orca/DistServe/Sarathi)实现迭代级调度、Prefill-Decode 分离。当前主流采用 vLLM+Ray Serve 或 TensorRT-LLM+Triton 组合,配合 Kubernetes 实现弹性部署。
Result(效果 + 建议) 当前方案可将 GPU 利用率提升至 70%+,P95 延迟控制在 500ms 内,Goodput 达 95%+。建议:1) 中小型场景首选 vLLM+Ray,平衡性能与易用性;2) 延迟敏感场景选 TensorRT-LLM;3) 已有 K8s 基础设施考虑 KServe;4) 快速验证用商业云服务。未来关注 KV Cache 解耦架构和 FP8 量化普及。

5. 理解确认问题

问题: 在多租户 LLM 服务中,为什么单纯的 GPU MIG 分区无法完全解决租户隔离问题?请结合 KV Cache 管理的特点说明原因,并提出更合理的隔离策略组合。

参考答案要点:

  1. MIG 的局限性: MIG 提供硬件级显存隔离,但分区粒度粗(最小约 1GB),无法动态调整;且 MIG 分区后无法共享,低负载时资源闲置。
  2. KV Cache 的特殊性: KV Cache 需求随序列长度动态变化,且推理过程中 Prefill 和 Decode 阶段显存需求不同;租户间请求的峰值时间可能错开,完全隔离导致利用率低下。
  3. 合理策略组合:
    • 物理隔离: 对 SLA 严格的租户使用 MIG 或独占 GPU
    • 逻辑隔离: 对普通租户使用 PagedAttention 的 KV Cache 分页,配合配额限制
    • 时间隔离: 通过优先级调度和抢占机制,保证高优先级请求优先执行
    • 监控隔离: 独立监控各租户指标,异常时快速熔断

附录:数据来源与参考资料

数据来源日期

核心参考资料

  1. vLLM: Easy, Fast, and Cheap LLM Serving. MLSys 2024.
  2. Orca: A Distributed Serving System for LLMs. OSDI 2024.
  3. DistServe: Disaggregating Prefill and Decoding for Goodput-Optimized LLM Serving. OSDI 2024.
  4. Mooncake: A KVCache-Centric Disaggregated Architecture for LLM Serving. arXiv 2024.
  5. NVIDIA TensorRT-LLM Documentation. https://github.com/NVIDIA/TensorRT-LLM
  6. Chip Huyen. Building LLM Applications for Production. 2025.
  7. Eugene Yan. LLM Inference Optimization Guide. 2025.

报告完成时间: 2026-04-17 报告字数: 约 9,500 字 调研质量: 覆盖概念、情报、方案三维度,含精华整合

评论

评论加载中...