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

02-大模型部署之Kubernetes+vLLM安装大模型和容器调度

02-大模型部署之KubernetesvLLM安装大模型和容器调度1. Kubernetes基础与vLLM集成概述1.1 为什么使用Kubernetes部署vLLMKubernetes提供了企业级的容器编排能力特别适合vLLM部署的以下场景弹性伸缩根据负载自动调整vLLM实例数量高可用性自动故障恢复和负载均衡资源管理精细化的GPU资源分配和调度多租户隔离不同模型或用户之间的资源隔离版本管理无缝的模型版本升级和回滚1.2 Kubernetes与vLLM架构┌─────────────────────────────────────────────────────────────┐ │ Kubernetes集群 │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Master节点 │ │ Worker节点1 │ │ Worker节点2 │ │ │ │ │ │ │ │ │ │ │ │ API Server │ │ vLLM Pod 1 │ │ vLLM Pod 2 │ │ │ │ Scheduler │ │ (GPU 0,1) │ │ (GPU 2,3) │ │ │ │ Controller │ │ │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘2. 环境准备与依赖安装2.1 Kubernetes集群要求硬件要求Master节点至少2 CPU4GB内存Worker节点至少4 CPU16GB内存1-2张NVIDIA GPU网络节点间万兆网络推荐软件要求Kubernetes 1.24NVIDIA GPU OperatorContainer Runtime (containerd或Docker)kubectl命令行工具2.2 NVIDIA GPU Operator安装# 添加NVIDIA Helm仓库helm repoaddnvidia https://nvidia.github.io/gpu-operator helm repo update# 安装GPU Operatorhelminstallgpu-operator nvidia/gpu-operator\--namespacegpu-operator\--create-namespace\--setdriver.enabledtrue\--settoolkit.enabledtrue\--setdevicePlugin.enabledtrue2.3 验证GPU资源# 检查GPU节点kubectl get nodes-lgputrue# 查看GPU资源kubectl describenodeworker-node-name|grep-igpu# 验证NVIDIA设备插件kubectl get pods-ngpu-operator3. vLLM容器镜像构建3.1 基础DockerfileFROM nvidia/cuda:11.8-devel-ubuntu20.04 # 设置环境变量 ENV DEBIAN_FRONTENDnoninteractive ENV PYTHONUNBUFFERED1 # 安装系统依赖 RUN apt-get update apt-get install -y \ python3.9 \ python3.9-pip \ python3.9-dev \ git \ wget \ rm -rf /var/lib/apt/lists/* # 创建软链接 RUN ln -s /usr/bin/python3.9 /usr/bin/python \ ln -s /usr/bin/pip3 /usr/bin/pip # 升级pip RUN pip install --upgrade pip # 安装vLLM RUN pip install vllm0.2.5 torch2.0.1 # 创建应用目录 WORKDIR /app # 复制启动脚本 COPY start_vllm.sh /app/ RUN chmod x /app/start_vllm.sh # 暴露端口 EXPOSE 8000 # 启动命令 CMD [/app/start_vllm.sh]3.2 启动脚本 (start_vllm.sh)#!/bin/bash# 设置模型路径MODEL_PATH${MODEL_PATH:-meta-llama/Llama-2-7b-chat-hf}# 设置GPU内存使用率GPU_MEMORY_UTILIZATION${GPU_MEMORY_UTILIZATION:-0.9}# 设置张量并行大小TENSOR_PARALLEL_SIZE${TENSOR_PARALLEL_SIZE:-1}# 启动vLLM API服务器python-mvllm.entrypoints.api_server\--model${MODEL_PATH}\--host0.0.0.0\--port8000\--gpu-memory-utilization${GPU_MEMORY_UTILIZATION}\--tensor-parallel-size${TENSOR_PARALLEL_SIZE}\--max-num-batched-tokens8192\--max-num-seqs2563.3 构建和推送镜像# 构建镜像dockerbuild-tyour-registry/vllm-server:latest.# 推送到镜像仓库dockerpush your-registry/vllm-server:latest4. Kubernetes资源配置4.1 Namespace创建# namespace.yamlapiVersion:v1kind:Namespacemetadata:name:vllm4.2 ConfigMap配置# configmap.yamlapiVersion:v1kind:ConfigMapmetadata:name:vllm-confignamespace:vllmdata:MODEL_PATH:meta-llama/Llama-2-7b-chat-hfGPU_MEMORY_UTILIZATION:0.85TENSOR_PARALLEL_SIZE:1MAX_NUM_BATCHED_TOKENS:8192MAX_NUM_SEQS:2564.3 Secret配置用于模型访问# secret.yamlapiVersion:v1kind:Secretmetadata:name:huggingface-secretnamespace:vllmtype:Opaquedata:# echo -n your-huggingface-token | base64HF_TOKEN:eW91ci1odWdnaW5nZmFjZS10b2tlbg4.4 PVC配置用于模型缓存# pvc.yamlapiVersion:v1kind:PersistentVolumeClaimmetadata:name:vllm-model-cachenamespace:vllmspec:accessModes:-ReadWriteOnceresources:requests:storage:100GistorageClassName:fast-ssd4.5 Deployment配置# deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:vllm-deploymentnamespace:vllmspec:replicas:2selector:matchLabels:app:vllmtemplate:metadata:labels:app:vllmspec:nodeSelector:gpu:truecontainers:-name:vllm-containerimage:your-registry/vllm-server:latestimagePullPolicy:Alwaysports:-containerPort:8000env:-name:MODEL_PATHvalueFrom:configMapKeyRef:name:vllm-configkey:MODEL_PATH-name:GPU_MEMORY_UTILIZATIONvalueFrom:configMapKeyRef:name:vllm-configkey:GPU_MEMORY_UTILIZATION-name:TENSOR_PARALLEL_SIZEvalueFrom:configMapKeyRef:name:vllm-configkey:TENSOR_PARALLEL_SIZE-name:HF_TOKENvalueFrom:secretKeyRef:name:huggingface-secretkey:HF_TOKENresources:requests:nvidia.com/gpu:1memory:16Gicpu:4limits:nvidia.com/gpu:1memory:32Gicpu:8volumeMounts:-name:model-cachemountPath:/root/.cache/huggingfacereadinessProbe:httpGet:path:/healthport:8000initialDelaySeconds:60periodSeconds:10livenessProbe:httpGet:path:/healthport:8000initialDelaySeconds:120periodSeconds:30volumes:-name:model-cachepersistentVolumeClaim:claimName:vllm-model-cachetolerations:-key:nvidia.com/gpuoperator:Existseffect:NoSchedule4.6 Service配置# service.yamlapiVersion:v1kind:Servicemetadata:name:vllm-servicenamespace:vllmspec:selector:app:vllmports:-port:80targetPort:8000protocol:TCPtype:ClusterIP4.7 Ingress配置# ingress.yamlapiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:vllm-ingressnamespace:vllmannotations:nginx.ingress.kubernetes.io/rewrite-target:/nginx.ingress.kubernetes.io/proxy-body-size:100mspec:rules:-host:vllm.example.comhttp:paths:-path:/pathType:Prefixbackend:service:name:vllm-serviceport:number:805. 部署与管理5.1 部署vLLM服务# 创建命名空间kubectl apply-fnamespace.yaml# 应用配置kubectl apply-fconfigmap.yaml kubectl apply-fsecret.yaml kubectl apply-fpvc.yaml# 部署应用kubectl apply-fdeployment.yaml kubectl apply-fservice.yaml kubectl apply-fingress.yaml# 检查部署状态kubectl get pods-nvllm kubectl get services-nvllm5.2 扩缩容操作手动扩缩容# 扩容到3个副本kubectl scale deployment vllm-deployment--replicas3-nvllm# 缩容到1个副本kubectl scale deployment vllm-deployment--replicas1-nvllm自动扩缩容配置# hpa.yamlapiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:name:vllm-hpanamespace:vllmspec:scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:vllm-deploymentminReplicas:1maxReplicas:10metrics:-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:70-type:Resourceresource:name:memorytarget:type:UtilizationaverageUtilization:805.3 滚动更新# 更新镜像版本kubectlsetimage deployment/vllm-deployment\vllm-containeryour-registry/vllm-server:v2.0-nvllm# 查看更新状态kubectl rollout status deployment/vllm-deployment-nvllm# 回滚到上一版本kubectl rollout undo deployment/vllm-deployment-nvllm6. 监控与日志6.1 Prometheus监控配置# servicemonitor.yamlapiVersion:monitoring.coreos.com/v1kind:ServiceMonitormetadata:name:vllm-monitornamespace:vllmspec:selector:matchLabels:app:vllmendpoints:-port:httppath:/metricsinterval:30s6.2 日志收集# fluentd-config.yamlapiVersion:v1kind:ConfigMapmetadata:name:fluentd-confignamespace:vllmdata:fluent.conf:|source type tail path /var/log/containers/*vllm*.log pos_file /var/log/fluentd-vllm.log.pos tag kubernetes.* format json /sourcematch kubernetes.**type elasticsearch host elasticsearch.logging.svc.cluster.local port 9200 index_name vllm-logs /match6.3 健康检查端点# 在vLLM容器中添加健康检查端点fromflaskimportFlask,jsonifyimportpsutil appFlask(__name__)app.route(/health)defhealth_check():健康检查端点try:# 检查GPU状态importtorch gpu_availabletorch.cuda.is_available()gpu_memory_usedtorch.cuda.memory_allocated()/1024**3ifgpu_availableelse0# 检查系统资源cpu_percentpsutil.cpu_percent()memory_percentpsutil.virtual_memory().percentreturnjsonify({status:healthy,gpu_available:gpu_available,gpu_memory_used_gb:gpu_memory_used,cpu_percent:cpu_percent,memory_percent:memory_percent})exceptExceptionase:returnjsonify({status:unhealthy,error:str(e)}),500if__name____main__:app.run(host0.0.0.0,port8001)7. 故障排查7.1 常见问题GPU资源不足# 检查GPU资源分配kubectl describe podpod-name-nvllm# 检查GPU节点资源kubectltopnodes kubectl describenodenode-name模型加载失败# 查看Pod日志kubectl logspod-name-nvllm# 进入容器调试kubectlexec-itpod-name-nvllm -- /bin/bash网络连接问题# 测试服务连通性kubectl run test-pod--imagebusybox--rm-it-- /bin/sh# 在测试Pod中执行wget-qO- http://vllm-service.vllm.svc.cluster.local/health7.2 性能调优资源限制优化resources:requests:nvidia.com/gpu:1memory:24Gi# 根据模型大小调整cpu:6limits:nvidia.com/gpu:1memory:48Gi# 避免OOMcpu:12调度策略优化# 使用节点亲和性spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:-matchExpressions:-key:gpu-typeoperator:Invalues:[A100,V100]8. 最佳实践8.1 安全配置镜像安全使用最小化基础镜像网络策略限制Pod间通信RBAC最小权限原则密钥管理使用Kubernetes Secret管理敏感信息8.2 成本优化资源配额合理设置资源请求和限制节点池使用GPU专用节点池自动扩缩容根据负载动态调整实例数Spot实例非关键服务使用Spot实例8.3 运维建议版本管理使用Git管理Kubernetes配置渐进式部署使用金丝雀发布策略备份策略定期备份重要配置和数据文档维护保持部署文档的及时更新通过以上配置和实践可以在Kubernetes环境中成功部署和管理vLLM大语言模型服务实现高可用、可扩展的模型推理能力。

相关文章:

02-大模型部署之Kubernetes+vLLM安装大模型和容器调度

02-大模型部署之KubernetesvLLM安装大模型和容器调度 1. Kubernetes基础与vLLM集成概述 1.1 为什么使用Kubernetes部署vLLM Kubernetes提供了企业级的容器编排能力,特别适合vLLM部署的以下场景: 弹性伸缩:根据负载自动调整vLLM实例数量高可用…...

Linux系统基础安全总结

只开放必要端口 80、443、SSH 等 禁用或删除无用账号 禁止使用 root 直接登录清理多余系统账号、测试账号启用防火墙强化密码策略◦密码长度 ≥8 位,字母 数字 符号◦ 定期更换、禁止使用历史密码 关闭无用端口与服务 用 ss -tulnp 查看监听端口停止并禁用无用…...

传统企业每一次招聘,本质都是一次“盲选”

传统企业招聘确实常陷入"盲选困局"。据统计,超过60%的企业因招聘失误导致人才流失,平均每位错误招聘造成损失达入职薪资的30%以上。究其根源,在于三大痛点:面试主观性强、评价标准模糊、缺乏系统化人才甄别工具。HR往往…...

计算机毕业设计之基于SpringBoot的自驾游出行一站式物资商城

随着社会的发展,系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得自驾游出行物资信息,因此,设计一种安全高效的基于SpringBoot的自驾游出行…...

191.Vue3 + OpenLayers 实战:可控化版权信息(Attribution)详解与完整示例

🧩 一、效果目标我们要实现以下效果:✅ 自定义版权内容(HTML)✅ 内置版权(右下角,可折叠)✅ 外部版权(自定义位置展示)✅ 自定义按钮样式✅ 控制是否折叠🧠 二…...

CCF-GESP 等级考试 2026年3月认证C++一级真题解析

2026年3月真题 一、单选题(每题2分,共30分)正确答案:B 考察知识点:计算机相关知识 解析:输入设备是从外界获取信息交付计算机进行处理,重力传感器检测重心,遥控器接受指令&#xff0…...

UV胶粘度硬度伸长率详解 如何选对UV胶

工程师必读:UV胶性能参数解读——粘度、硬度、伸长率意味着什么?UV胶(光固化胶粘剂)因其秒级固化、高透明度、低收缩率等优势,已成为电子、光学、医疗器械、精密组装等领域工程师的首选材料。但要选对UV胶,…...

全球六维力传感器行业发展洞察:高速增长下的国产突围与市场机遇

QYResearch(恒州博智)作为全球领先的专业咨询机构,长期深耕各行业细分市场调研,尤其聚焦高端制造领域存在“卡脖子”风险的高科技赛道。依托全球化调研网络与深度数据挖掘能力,机构重点追踪国内外标杆企业,…...

YTM32

记录一个很愚蠢的小bug在用云途系列MCU时,我喜欢先用串口打印功能,但是多次卡在PRINTF里,于是花了很多时间在串口配置上。解决后没有当回事,结果就是今天再次卡死在这个问题,又浪费一个多小时的时间在这个愚蠢的bug上&…...

颠覆“回老家更轻松”,计算机会,收入,生活成本,颠覆安逸幻想,输出长期发展路线。

颠覆"回老家更轻松" - 长期发展路线规划系统一、实际应用场景描述场景:李明,28岁,北京某互联网大厂高级工程师,年薪45万。面对北京的高房价、996工作制和通勤压力,他经常被家人劝说"回老家发展"。…...

高精度毫米级室内定位:机器人导航的“最后一厘米”难题如何破解

在机器人技术加速落地的今天,一个看似简单的问题始终困扰着行业:机器人到底能不能知道自己“精确”在哪?这个问题听起来有些哲学,但在工程实践中却极为现实。一台AGV在仓库中穿梭数百米后,能否准确停在货架前5毫米的位…...

大模型理论学习之基本概念理解

大模型,agentagentic工具调用MCP向量模型RAG大语言模型(large language model):理解自然语言,生成自然语言。多模态大模型:不仅可以处理文本,同时可以处理图片,音频,视频…...

华为 HCIA-Datacom考试版本升级 V2.0!2026年7月起考新版

华为认证新动态! 2025年12月31日,华为官方已在中国区正式发布 HCIA-Datacom V2.0(中文版)。 此次更新不仅是版本迭代,更是对数通领域入门级人才能力标准的一次全面重塑,标志着认证内容向 “实战化、智能化”…...

基于DSP28335主控的直流有刷电机闭环控制系统:转速PID调控与上位机可视化操作指南

直流有刷电机闭环控制 主控dsp28335,直流有刷电机,采用ab编码器,进行速度闭环。 有转速指令规划处理,速度环pid控制,eqep位置解算、转速解算,可以通过上位机控制电机正反转,发送指令等。 可以直…...

最新 AI 论文盘点(2026-03-18):6 篇新作看记忆、长上下文、医疗评测、机器人策略与世界模型

最新 AI 论文盘点(2026-03-18):6 篇新作看记忆、长上下文、医疗评测、机器人策略与世界模型今天这批新论文里,我觉得有几条线特别值得看。一条是 LLM / Agent 的记忆与长上下文,讨论怎么把“记住信息”和“真正用好上下…...

2023升级版-Spark+ClickHouse实战企业级数据仓库,进军大厂必备

大数据技术升级:2023 版 Spark ClickHouse 重塑企业级数据仓库架构在数据爆炸式增长的今天,企业级数据仓库(Data Warehouse)已不再仅仅是数据的存储库,而是驱动商业智能、实时决策和人工智能模型的核心引擎。传统的“…...

拒绝做“表哥表姐”!OpenClaw 接入飞书全攻略:靠这个“向量引擎”中转站,我让全公司的 AI 卷起来了!

一、 2026 职场真相:你是在用 AI,还是被 AI 玩? 2026 年了,如果你的飞书还只是用来打卡和发表情包,那真是暴殄天物。 现在的职场现状是: 老板在群里丢了一份 50 页的 PDF 调研报告,让你 10 分…...

FPGA SDIO模式读写SD卡程序功能说明

FPGA以SDIO模式读写SD卡源码,可移植到任何FPGA中。 在SDIO模式下,SD卡读写速率50Mbps以上。 文件里包含tb和说明文档,已经下板验证通过。一、程序核心功能概述 本程序实现了FPGA通过SDIO模式对SD卡进行高速读写操作的完整解决方案&#xff0c…...

售后管理不再“掉链子”:一套系统如何打通从报修到结算的全链路?

对于制造、家电、医疗器械、智能硬件等拥有实体产品的企业而言,售后服务是品牌口碑的生命线,却也是管理难度最高、成本最不可控的环节之一。传统的售后管理常常“掉链子”:客户报修难:只能打电话,描述不清产品型号&…...

Tetramethylrhodamine,四甲基罗丹明甲酯,115532-49-5:

基础试剂介绍英文名称:TMRM,Tetramethylrhodamine,Tetramethylrhodamine methyl ester中文名称:四甲基罗丹明甲酯CAS 号:115532-49-5分子式:C25H25N2O3分子量:401.49纯度:>95%外观性状:固体激…...

Gemini Embedding 2:五大模态统归一境,跨模态 Agent 的最强“大脑”!

本文内容来源于谷歌官方,由谷歌云钻石合作伙伴、谷歌地图一级代理商 CloudAce 深圳云一进行翻译发布。导语:Google 正式发布了基于 Gemini 架构构建的首款全多模态嵌入模型 Gemini Embedding 2 的公开预览版 。该模型打破了传统文本嵌入的局限&#xff0…...

筑牢防线:SQL注入与XSS攻击的防御实战指南

筑牢防线:SQL注入与XSS攻击的防御实战指南在Web安全的广阔战场上,**SQL注入(SQL Injection)和跨站脚本攻击(XSS, Cross-Site Scripting)**长期占据OWASP Top 10漏洞榜单的前列。尽管它们已是“老牌”漏洞&a…...

微信接口调不通 500 未知错误

再看下公钥 和证书 配置对了吗...

CLM陆面过程模式详细应用教程

NCAR陆面模式CLM (Community Land Model)是地球系统模式CESM (Community Earth System Model)中的陆面过程模式分量,是在结合了BATS、LSM和IAP94等众多陆面模式的优点后,加入水文过程而开发出的综合性陆面模式,是目前国际上发展最为完善且得到…...

Claude Code 实战一:从零开发电商小程序(全流程)

前言 有了入门基础,我们来看一个完整的实战案例——使用 Claude Code 开发一个具备支付功能的电商小程序。这个案例整合了 Figma 设计稿还原、后端开发、数据库管理和微信支付集成,是一次典型的“全栈 AI 驱动开发”实践。 🎯 项目概况 项目目…...

高分子功能母粒技术迭代,福尔蒂新材料的研发方向展望

在高分子材料改性与精细化加工领域,功能母粒一直是连接基础树脂与高端终端制品的核心中间体,堪称塑料产业链的“功能芯片”。历经数十年发展,功能母粒早已跳出单一着色的基础定位,朝着高性能化、绿色化、智能化、定制化方向全面迭…...

影视仓2026最新接口配置合集,tvbox4K高清源,值得收藏!

🔥TVBox影视仓:免费看遍全网影视的神器! 安卓/电视端通用 | 无广告 | 4K超清 📺什么是TVBox影视仓? TVBox影视仓是一款 免费、无广告、无需会员 的影视聚合神器!专为安卓/电视端打造,整合了全网…...

人力资源战略与业务战略对齐的重要性及正确实施方法

众所周知,人力资源战略必须与业务需求相契合。我们从 1200 多家组织收集的数据显示,人力资源领导者深知这一需求。人力资源领导者花费大量时间进行对齐、分解目标、构建计分卡以及定义相关 KPI 以展示影响力。 但问题往往出在翻译转换环节。一旦完成转换…...

卫星姿态轨道控制Simulink仿真:一个基于资料的学习实践

卫星姿态轨道控制simulink仿真/姿轨控 卫星姿轨控仿真,基于simulink 自己在国外文献和资料基础上修改 资料包含源程序和英文版报告,是学习卫星姿轨控和simulink仿真的好资料一、引言随着航天技术的飞速发展,卫星姿态轨道控制(姿轨…...

指纹浏览器为什么要自建IP检测?基于IP数据云离线库的架构实践

一、为什么指纹浏览器必须自建IP检测? 2026年,亚马逊、Temu等平台的风控已从“指纹识别”升级到“IP信誉优先”。一个被标记为“数据中心”或“高代理风险”的IP,即使浏览器指纹伪装得再完美,也会在登录瞬间被判定为“非自然人操…...