Bootstrap

大模型高并发部署方案探究

版本

内容

姓名

时间

V1.0

新建

xx

2025-01-16

声明:只是进行探究,后续真正实践后,会更新新的内容

前置条件:70B的模型,并发要求200

性能测试参考链接

Benchmarking LLM Inference Backends :表明一台A100(80GB)能够进行70b 4bit量化后进行满足100并发。

部署大模型基础知识参考

Fundamental of Deploying Large Language Model Inference

1.显存需求分析

  • 70B模型在FP8精度下单个模型加载约需要35GB显存
  • 考虑到推理时的中间变量和缓存,建议预留1.5倍显存,即约52.5GB/模型
  • 考虑KV Cache: 每个并发会话约需要0.5GB显存
  • 200并发总共需要: 52GB + (0.5GB × 200) =152 GB显存

2.硬件配置建议

  • 最低2卡,建议使用3卡服务器,GPU选型: NVIDIA H100 (80GB显存/卡)或A100 (80GB显存/卡)

3.部署方案

参考链接

vllm github: https://github.com/vllm-project/vllm

nccl:Overview of NCCL — NCCL 2.6.2 documentation

vllm+nccl: Vllm Nvlink NccL Integration | Restackio

vllm+nginx_loadbalancer+docker:Deploying with Nginx Loadbalancer — vLLM

3.1 为什么选择vllm进行推理?

  • 社区稳定
  • 可以高并发、多卡并行
  • 有较多实践可以参考

3.2 具体方案

使用 多个 vLLM 实例 来利用 两张 /三张 A100 GPU ,对外提供接口。为保证用户对话的连续性,让nginx根据ip路由来进行分发请求 。

为什么使用nginx分发,多个vllm实例进行?而不利用nvidia nccl技术直接使用一个vllm实例?

  1. 负载均衡:Nginx分发请求,提升并发处理能力。
  2. 扩展性强:未来可轻松增加更多GPU和vLLM实例。
  3. 容错性高:单卡故障时,另一卡仍可继续服务。
  4. 适用机制:nccl适用于单卡无法加载模型时使用,多机多卡可作为性能补充优化。

3.3 关于吞吐量 vs 延迟说明

  • 单实例多卡: 如果重点是吞吐量,使用单实例多卡的方式可能会更好,因为 vLLM 会在多个 GPU 上并行处理任务,且有 NCCL 加速优化。
  • 多个实例+Nginx: 如果目标是更高的并发和更加细粒度的负载分配,且可以接受可能出现的小量跨实例通信延迟,使用多个实例和 Nginx 分发会更适合。

4.其他部署方案

4.1 k8s+llm

提醒:若目前使用,单卡能够加载的模型。不涉及分布式处理、多个资源调度,因运维复杂,建议不使用

工具

优点

缺点

参考链接

SkyPilot

自动资源调度、多云支持、简化部署

社区支持有限、主要面向云环境

https://docs.skypilot.co/en/latest/docs/index.html

KServe

与 Kubernetes 集成、支持多种框架、自动化管理

依赖 Kubernetes、学习曲线较高

Home - KServe Documentation Website

KubeAI

自动化资源管理、高可用性、与云平台兼容

社区不稳定,成本较高、需要配置和集成工作

www.kubeai.org

Kubernetes

强大的扩展性、容器化部署、广泛的生态系统支持

部署和管理复杂、性能调优需要经验

4.2 推理工具LMDeploy

https://github.com/InternLM/lmdeploy/blob/main/README_zh-CN.md

Lmdepoly 对比vllm推理简单测试效果较好,但社区实践较vllm少。可供后续推理工具的备选

;