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

GLM模型这么火,咱们用vllm也咧一个呗!
1. k8s调度gpu集群管理员需要在worker节点上安装设备驱动并运行对应的设备插件。为了让 K8s 识别并使用 GPU这两个条件必须同时满足NVIDIA驱动NVIDIA Drivers操作系统与GPU 硬件通信的底层基础它让操作系统能够识别并控制 GPU 。NVIDIA Device PluginK8s的插件节点上以daemonset形式部署负责将GPU资源上报给K8s集群nvidia.com/gpu并让Pod可以请求和使用这些资源 。具体表现在kubectl describe node node10上能显示扩展资源对于扩展资源gpu请求和限制必须一样。requests:nvidia.com/gpu: 1limits: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 pluginNVIDIA Container Toolkit、使用 GFD 的自动节点标记基于 DCGM 的监控以下使用默认helm charts配置安装 gpu operatorhelm install --wait --generate-name \-n gpu-operator --create-namespace \nvidia/gpu-operator \--versionv24.9.2以上为worker节点配置了最常先按照文档步骤设置节点标签kubectl label node node-name --overwrite nvidia.com/gpu.workload.configvm-passthrough.2. vllm production-stack2.1 vllm的原理为了理解请求LLM 需要了解字词之间的关系以及如何在字词之间建立关联与人类使用语义和推理来理解字词不同LLM 是通过数学运算来“推理”的 面对大量用户请求时 需要消耗大量显存。vllm是伯克利大学开源的吞吐量最强、最容易使用的推理引擎。从本质上讲vLLM作为一组指令工作通过持续“批处理”用户请求鼓励KV Cache创建快捷方式。① KV Cache 是一种短期内存存储 它是将每个token(词元)所对应的值保存到缓存中, 以空间换时间的方式支持快速推理。②连续批处理是一种可同时处理多个查询的技术将先前计算的查询词元创建快捷方式。借助vLLMLLM可以将批处理请求中重复部分的词元字符串“what is the capital of”保存在短期记忆KV 缓存中并发送一个“翻译请求”而不是两个单独的请求。2.2 vllm production-stackLMCache大语言模型推理引擎的扩展目标是减小首字延迟TTFT提高吞吐量。LMCache与vllm结合产生了 vllm production-stack 通过这个项目可以得到无需更改任何应用代码 就能从单个vLLM实例扩展到分布式vLLM部署通过网页仪表盘监控指标基于请求路由和KVCache卸载带来的性能提升① KV Cache感知路由 确保具有相同prompt前缀的后续请求被路由到同一实例从而最大化 KV 缓存的利用率并提高性能。② KVCache卸载将大量KV Cache从GPU显存移动到CPU或磁盘从而实现更多潜在的KV Cache命中 在helm charts中要应用lmcache-vllm镜像。3. glm4.7-flashglm4.7-flash是一个 30B-A3B MoE 模型 号称30B级别中最强的模型。按照上文显存估算 权重值大概60GB 可部署在4卡24G 4090上。官方提示glm这货需要使用transformers框架, 最新的vllm-openai:latest镜像无 transformers框架使用vllm-openai:latest会报错。故需要我们自己建立一个镜像dockerfile也很简单(基础镜像不是lmcache-vllm 不带显存卸载能力)FROM vllm/vllm-openai:latestRUN apt-get update \apt-get install -y git \rm -rf /var/lib/apt/lists/*# 安装支持 GLM-4.7-Flash 的最新版 transformersRUN pip install --no-cache-dir githttps://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.yamlrootk8sctrl1:/home/czf/vllm-llm# cat glm47-flash.yamlrouterSpec:imagePullPolicy: IfNotPresentnodeSelectorTerms:- matchExpressions:- key: nvidia.com/gpu.workload.configoperator: Invalues:- vm-passthroughenv:- name: TZvalue: Asia/ShanghaiservingEngineSpec:runtimeClassName: nvidiaimagePullPolicy: IfNotPresentextraVolumes:- name: dshmemptyDir:medium: MemorysizeLimit: 30GiextraVolumeMounts:- name: dshmmountPath: /dev/shmmodelSpec:- name: glm47-flashrepository: 12205599/vllm-glm47tag: fixedmodelURL: ZhipuAI/GLM-4.7-FlashreplicaCount: 1requestCPU: 16requestMemory: 150GirequestGPU: 4shmSize: 30GipvcStorage: 120GipvcAccessMode: [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-choiceenv:- 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_ENABLEvalue: 0- name: TZvalue: Asia/Shanghai- name: MODELSCOPE_CACHE # 告诉vLLM 把模型下载到pod内的value路径value: /data/modelscopestartupProbe:initialDelaySeconds: 1800 # 第一次等待30min再探测periodSeconds: 15failureThreshold: 60timeoutSeconds: 10httpGet:path: /healthport: 8000镜像尽量使用IfNotPresent拉取策略因为这些镜像实在太大了为拉取模型权重文件启动探针可以先设置为较大的时间 30 * 601800后面可使用upgrade更改为合适的探针时间。设置环境变量VLLM_USE_MODELSCOPE true HF_ENDPOINThttps://hf-mirror.com 从国内的模搭社区下载文件验证时使用huggingface.com镜像站hf-mirror.com。多个pod可共享加载同一个模型文件 故模型文件应使用共享文件存储。pvcStorage: 120GipvcAccessMode: [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添加到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!}]}

最新新闻

日新闻

周新闻

月新闻