当前位置: 首页 > news >正文

GLM模型这么火,咱们用vllm也咧一个呗!

上文《higress这个中登才是AI时代的心头好》提到用vll production-stack 部署LLM,
今天我们补交作业, 记录使用vllm production-stack 部署llm。

1. k8s调度gpu

集群管理员,需要在worker节点上安装设备驱动,并运行对应的设备插件。

为了让 K8s 识别并使用 GPU,这两个条件必须同时满足:

  • NVIDIA驱动(NVIDIA Drivers):操作系统与GPU 硬件通信的底层基础,它让操作系统能够识别并控制 GPU 。

  • NVIDIA Device Plugin:K8s的插件(节点上以daemonset形式部署),负责将GPU资源上报给K8s集群(nvidia.com/gpu),并让Pod可以请求和使用这些资源 。

image

具体表现在:

kubectl describe node node10上能显示扩展资源:

image

对于扩展资源gpu,请求和限制必须一样。

requests:nvidia.com/gpu: 1
limits:nvidia.com/gpu: 1

为帮助我们在k8s中便捷配置、管理GPU,英伟达推出了gpu operator ,具备以下能力

  • NVIDIA 驱动程序(以启用 CUDA)

每个节点上以pod形式安装,kubectl exec -it -n gpu-operator nvidia-driver-daemonset-xxxxx -- nvidia-smi, 或者sudo chroot /run/nvidia/driver nvidia-smi(因为驱动文件被挂载到主机这个目录下); 另外如果主机上安装了nvidia-smi驱动,gpu operator将不会在该节点上部署driver pod.

  • k8s device plugin
  • NVIDIA Container Toolkit、
  • 使用 GFD 的自动节点标记
  • 基于 DCGM 的监控

以下使用默认helm charts配置安装 gpu operator:

helm install --wait --generate-name \-n gpu-operator --create-namespace \nvidia/gpu-operator \--version=v24.9.2

以上为worker节点配置了最常见的容器gpu加速, gpu operator还支持配置虚拟机gpu加速、管理vgpu设备, 如果你的k8s集群要管控云原生虚拟机(kubevirt)[https://github.com/kubevirt/kubevirt],需要先按照文档步骤设置节点标签kubectl label node <node-name> --overwrite nvidia.com/gpu.workload.config=vm-passthrough.

2. vllm production-stack

2.1 vllm的原理

为了理解请求,LLM 需要了解字词之间的关系以及如何在字词之间建立关联,与人类使用语义和推理来理解字词不同,LLM 是通过数学运算来“推理”的, 面对大量用户请求时, 需要消耗大量显存。

vllm是伯克利大学开源的吞吐量最强、最容易使用的推理引擎。

从本质上讲,vLLM作为一组指令工作,通过持续“批处理”用户请求,鼓励KV Cache创建快捷方式

① KV Cache: 是一种短期内存存储, 它是将每个token(词元)所对应的值保存到缓存中, 以空间换时间的方式支持快速推理。

连续批处理:是一种可同时处理多个查询的技术(将先前计算的查询词元创建快捷方式),。

借助vLLM,LLM可以将批处理请求中重复部分的词元字符串(“what is the capital of”)保存在短期记忆(KV 缓存)中,并发送一个“翻译请求”,而不是两个单独的请求。

2.2 vllm production-stack

LMCache大语言模型推理引擎的扩展,目标是减小首字延迟TTFT,提高吞吐量。

LMCache与vllm结合产生了 vllm production-stack, 通过这个项目可以得到:

  • 无需更改任何应用代码, 就能从单个vLLM实例扩展到分布式vLLM部署
  • 通过网页仪表盘监控指标
  • 基于请求路由和KVCache卸载带来的性能提升

image

① KV Cache感知路由: 确保具有相同prompt前缀的后续请求被路由到同一实例,从而最大化 KV 缓存的利用率并提高性能。

② KVCache卸载
将大量KV Cache从GPU显存移动到CPU或磁盘,从而实现更多潜在的KV Cache命中, 在helm charts中要应用lmcache-vllm镜像。

3. glm4.7-flash

glm4.7-flash是一个 30B-A3B MoE 模型, 号称30B级别中最强的模型。

按照上文显存估算: 权重值大概60GB, 可部署在4卡24G 4090上。

官方提示glm这货需要使用transformers框架, 最新的vllm-openai:latest镜像无 transformers框架,使用vllm-openai:latest会报错。

image

故需要我们自己建立一个镜像,dockerfile也很简单(基础镜像不是lmcache-vllm, 不带显存卸载能力):

FROM vllm/vllm-openai:latest
RUN apt-get update && \apt-get install -y git && \rm -rf /var/lib/apt/lists/*# 安装支持 GLM-4.7-Flash 的最新版 transformers
RUN pip install --no-cache-dir git+https://github.com/huggingface/transformers.git \-i https://mirrors.aliyun.com/pypi/simple/# docker  build -t12205599/vllm-glm47:fixed -f  Dockerfile
# docker push 12205599/vllm-glm47:fixed

使用vllm production-stack时,要注关注 helm charts value文件:

下面使用4卡4090部署1个glm4.7-flash模型实例。

# glm4.7-flash.yaml
root@k8sctrl1:/home/czf/vllm-llm# cat glm47-flash.yaml
routerSpec:imagePullPolicy: "IfNotPresent"nodeSelectorTerms:- matchExpressions:- key: nvidia.com/gpu.workload.configoperator: Invalues:- "vm-passthrough"env:- name: TZvalue: "Asia/Shanghai"servingEngineSpec:runtimeClassName: "nvidia"imagePullPolicy: "IfNotPresent"extraVolumes:- name: dshmemptyDir:medium: MemorysizeLimit: "30Gi"extraVolumeMounts:- name: dshmmountPath: /dev/shmmodelSpec:- name: "glm47-flash"repository: "12205599/vllm-glm47" tag: "fixed"modelURL: "ZhipuAI/GLM-4.7-Flash"replicaCount: 1requestCPU: 16    requestMemory: "150Gi"requestGPU: 4shmSize: "30Gi"pvcStorage: "120Gi"pvcAccessMode: ["ReadWriteMany"]storageClass: "csi-cephfs-models-sc"   # 自动创建pvcpvcAnnotations:helm.sh/resource-policy: "keep"    # helm uninstall 之后不要删除pvcvllmConfig:tensorParallelSize: 4   # 不要使用6卡maxModelLen: 120000extraArgs:- "--gpu-memory-utilization"- "0.90"- "--tool-call-parser"- "glm45"- "--reasoning-parser"- "glm45"- "--enable-auto-tool-choice"env:- name: VLLM_USE_MODELSCOPEvalue: "true"- name: HF_ENDPOINTvalue: "https://hf-mirror.com"  # 当必须联网时 使用hf国内镜像站点- name: NCCL_DEBUGvalue: "INFO"- name: NCCL_P2P_DISABLEvalue: "1"- name: NCCL_IB_DISABLEvalue: "1"- name: NCCL_SHM_DISABLEvalue: "0"- name: PYTORCH_ALLOC_CONFvalue: "expandable_segments:True"- name: NCCL_CUDA_MEM_MANAGEvalue: "0"- name: NCCL_CUMEM_HOST_ENABLE        value: "0"                         - name: TZvalue: "Asia/Shanghai"- name: MODELSCOPE_CACHE     #  告诉vLLM 把模型下载到pod内的value路径value: "/data/modelscope"startupProbe:initialDelaySeconds: 1800  # 第一次等待30min再探测periodSeconds: 15failureThreshold: 60       timeoutSeconds: 10httpGet:path: /healthport: 8000
  • 镜像尽量使用IfNotPresent拉取策略,因为这些镜像实在太大了
  • 为拉取模型权重文件,启动探针可以先设置为较大的时间 30 * 60=1800,后面可使用upgrade更改为合适的探针时间。
  • 设置环境变量:VLLM_USE_MODELSCOPE: true, HF_ENDPOINT:"https://hf-mirror.com" 从国内的模搭社区下载文件,验证时使用huggingface.com镜像站hf-mirror.com

多个pod可共享加载同一个模型文件, 故模型文件应使用共享文件存储。

    pvcStorage: "120Gi"pvcAccessMode: ["ReadWriteMany"]storageClass: "csi-cephfs-models-sc"   # 自动创建pvc

这个配置会自动产生pvc,产生的pvc会默认挂载pod内/data目录,这个信息要与环境变量MODELSCOPE_CACHE匹配, 这个变量指示vllm将模型文件下载到pod内目录。

helm install glm4.7-flash vllm/vllm-satck -f glm4.7-flash.yaml -n vllm-product-stack

image

添加到higress网关之后,兼容openai的api如下:

curl -v http://studio.panguclouds.com/v1/chat/completions -X POST -H 'Content-Type: application/json' -d '{"model": "ZhipuAI/GLM-4.7-Flash", "messages": [{"role": "user", "content": "Hello!"}]}'

image

4. 总结

gpu在整个AI生态占据了黄金生态位, 目前算力市场一卡难求, token coding plan价格也是水涨船高。

AI基础设施团队的目标就是不断压榨gpu, 高质量高效地产出token。

本文概述了vllm 这一流行推理框架的原理, 核心是批处理用户请求(对有相同词元字符串部分建立KV Cache快捷方式);

社区引入的LMCache进一步将昂贵的KVCache显存卸载到内存或其他存储, 目的是提高显存使用率,优化吞吐量和首字延迟。

二者结合就是 vllm production-stack的实践。

http://www.jsqmd.com/news/651336/

相关文章:

  • Steam成就管理终极指南:如何免费掌控你的游戏成就
  • 手把手教你用STM32F103C8T6和ZH03B传感器DIY一个PM2.5检测仪(附完整代码)
  • 中小企业福音:5分钟搞定StarWind Virtual SAN双节点安装(附详细截图)
  • 国产崛起之路:本土在线粘度计品牌技术实力与市场表现评析 - 品牌推荐大师1
  • 百度网盘秒传脚本:三步实现永久文件分享的革命性方案
  • 2026年正规外汇平台有哪些 盘点新手必读 - 速递信息
  • CSS复合属性:交互提效与实战技巧
  • 用MATLAB手把手复现OFDM通信:从子载波到循环前缀,一个完整帧的诞生记
  • PvZWidescreen:为经典游戏注入现代显示适配能力
  • Android Studio中文语言包:打破语言壁垒,提升中文开发者效率的终极解决方案
  • 不变扩展卡尔曼滤波(IEKF)在无人机位姿估计中的实践与优化
  • 人源肝芯片前沿研究:Thykamine在MASH纤维化与炎症中的剂量依赖性调控作用【曼博生物供应微流控器官芯片】
  • PHP SAAS 框架常见问题——配置问题——小程序消息推送配置 Token 校验失败
  • 掌握高效笔记迁移:OneNote Md Exporter全面解析与最佳实践指南
  • 别再死记硬背UML九种图了!用这套实战案例(含CPS系统建模)帮你真正理解
  • 5分钟打造你的专属音乐伴侣:foobar2000开源歌词插件终极指南
  • 手把手教你用C语言在粤嵌GEC6818上实现一个多媒体桌面(附完整源码)
  • 手把手解决小熊派H3863开发板Python环境冲突问题(附conda避坑指南)
  • 别再手动配时钟树了!用STM32CubeMX 6.7.0图形化工具5分钟搞定STM32F1/F4系列工程初始化
  • 炉石传说HsMod插件:55项功能全面指南与高效安装教程
  • 告别启动恐慌:详解嵌入式Linux中root=参数的正确姿势(附mmcblk、mtd、nfs实例)
  • 别再让FreeRTOS空跑耗电了!手把手教你配置STM32F4的Tickless模式(基于CubeMX)
  • 用ESP32和光敏传感器DIY一个智能小夜灯,5分钟搞定自动开关
  • 魔兽争霸III兼容性修复终极指南:3大核心功能让经典游戏重生
  • 2026年4月贵阳贴隐形车衣/汽车玻璃贴膜/汽车改色贴膜/汽车订制彩绘/汽车凹陷无痕修复哪家好 - 2026年企业推荐榜
  • 终极指南:3分钟快速部署PVE-VDIClient,轻松管理Proxmox虚拟桌面
  • Triton的并行哲学:从Grid与Program ID到高效GPU任务分发
  • 2026年东莞包装印刷厂推荐指南:技术、认证、产能多维度选型手册 - 速递信息
  • 企业级百度云自动化管理终极指南:bypy命令行工具深度解析
  • B站缓存视频格式转换技术方案:m4s-converter架构解析与实现原理