找回密码
 立即注册
首页 业界区 安全 生产环境 K8S + Deepseek 实现大模型部署 和 容器调度( ...

生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)

沦嘻亟 2025-6-1 18:24:42
本文 的 原文 地址

      本文 的 原文 地址     
尼恩:LLM大模型学习圣经PDF的起源

在40岁老架构师 尼恩的读者交流群(50+)中,经常性的指导小伙伴们改造简历。
经过尼恩的改造之后,很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会,拿到了大厂机会。
然而,其中一个成功案例,是一个9年经验 网易的小伙伴,当时拿到了一个年薪近80W的大模型架构offer,逆涨50%,那是在去年2023年的 5月。

  • 惊天大逆袭:8年小伙20天时间提75W年薪offer,逆涨50%,秘诀在这
不到1年,小伙伴也在团队站稳了脚跟,成为了名副其实的大模型 应用 架构师。接下来,尼恩架构团队,通过 梳理一个《LLM大模型学习圣经》 帮助更多的人做LLM架构,拿到年薪100W,  这个内容体系包括下面的内容:

  • Python学习圣经:从0到1精通Python,打好AI基础
  • LLM大模型学习圣经:从0到1吃透Transformer技术底座
  • 《LangChain学习圣经:从0到1精通LLM大模型应用开发的基础框架》
  • 《LLM大模型学习圣经:从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》
  • 《SpringCloud + Python 混合微服务架构,打造AI分布式业务应用的技术底层》
  • 《LLM大模型学习圣经:从0到1吃透大模型的顶级架构》
  • 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的架构 与实操》
  • 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的 中台  架构 与实操》
  • Spring 集成 DeepSeek 的 3大方法,史上最全
  • 《基于Dify +Ollama+ Qwen2 完成本地 LLM 大模型应用实战》
  • Spring AI 学习圣经  和配套视频   》
  • 《Text2SQL圣经:从0到1精通Text2Sql(Chat2Sql)的原理,以及Text2Sql开源项目的使用》
  • 《AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行部署架构?》
以上学习圣经 的  配套视频, 2025年 5月份之前发布。
一、vllm 基础知识:

(一)、核心功能与技术特性

vLLM 是专为大型语言模型(LLM)推理和部署设计的高性能开源框架,由社区维护并广泛应用于生成式 AI 的优化场景。
vllm 核心功能与技术特性

1 高效推理与内存管理
vllm 采用 ‌PagedAttention‌ 技术优化注意力键值的内存分配,减少资源浪费,支持长上下文窗口处理‌。
结合连续批处理(Continuous Batching)和 CUDA/HIP 图加速,显著提升吞吐量‌ 。
2 分布式与量化支持

  • 支持 ‌张量并行‌ 和流水线并行,实现多 GPU/TPU 分布式推理‌ 。
  • 提供多种量化方案(如 GPTQ、INT4、FP8),降低计算资源需求‌ 。
3  兼容性与扩展性
无缝集成 Hugging Face 模型生态,支持流式输出和 OpenAI API 兼容的服务器部署,适配 NVIDIA、AMD、Intel 等多种硬件‌ 。
vllm  的性能优势


  • 吞吐量对比‌:
    在相同延迟下,vLLM 的吞吐量较 HuggingFace Transformers 高 8.5–15 倍,较文本生成推理框架(TGI)高 3.3–3.5 倍‌ 。
  • 资源利用率‌:
    通过动态内存管理和分页技术,提升 GPU 利用率,降低中小型服务器或边缘设备的部署门槛‌ 。
(二)、vllm 安装和启动

github
  1. https://github.com/vllm-project/vllm
复制代码
接下来,看看 vLLM在线文档。
vLLM在线文档
  1. https://vllm.hyper.ai/docs/
复制代码
接下来,看看vLLM安装。
vLLM安装

vLLM 是一个 Python 库,包含预编译的 C++ 和 CUDA (12.1) 二进制文件。
环境

  • 操作系统:Linux
  • Python:3.8 - 3.12
  • GPU:计算能力 7.0 或更高(例如 V100、T4、RTX20xx、A100、L4、H100 等)
pip安装
  1. //(推荐)创建一个新的 conda 环境。
  2. conda create -n myenv python=3.10 -y
  3. conda activate myenv
  4. // 安装带有 CUDA 12.1 的 vLLM。
  5. pip install vllm
复制代码
建议使用全新的 conda 环境安装 vLLM。
如果您有不同的 CUDA 版本或者想要使用现有的 PyTorch 安装,则需要从源代码构建 vLLM。
vLLM启动

使用python 启动
  1. python3 -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/models/Qwen-7b-instruct --host 0.0.0.0 --port 8000 --dtype auto --max-num-seqs 32 --max-model-len 4096 --tensor-parallel-size 1 --trust-remote-code
复制代码
参数说明
--model                                 #指定要加载的模型路径
--dtyp                                         #指定模型权重的数据类型,auto 表示框架会根据硬件自动选择合适的数据类型(例如 FP16 或 BF16)
--max-num-seqs                         #设置最大并发序列数,服务器同时处理的最大请求数
--max-model-len                 #设置模型支持的最大上下文长度(token 数量)
--tensor-parallel-size         #1表示不使用张量并行,模型将在单个 GPU 上运行
--trust-remote-code                #允许加载远程代码或自定义模型代码
使用vllm命令启动
  1. vllm serve /root/autodl-tmp/models/Qwen-7b-instruct --max-model-len 4096 --tensor-parallel-size 1
复制代码
启动命令参考在线文档
https://vllm.hyper.ai/docs/getting-started/quickstart
(三)、使用openAI调用示例

第一个示例:vllm离线推理
  1. import os
  2. from transformers import AutoTokenizer
  3. from vllm import LLM, SamplingParams
  4. // 模型路径
  5. model_dir = '/root/autodl-tmp/models/Qwen-7b-instruct'
  6. // 加载tokenizer
  7. tokenizer = AutoTokenizer.from_pretrained(
  8.         model_dir,
  9.         local_files_only=True,
  10. )
  11. // Prompt
  12. messages = [
  13.         {'role':'system','content':'You are a medical assistant'},
  14.         {'role':'user','content':'最近经常熬夜,与之前生物钟颠倒,而且最近还肠胃发炎了不过已经好多了最近色斑越长越多'}
  15. ]
  16. // 将messages转换为text
  17. text = tokenizer.apply_chat_template(
  18.         messages,
  19.         tokenize=False,
  20.         add_generation_prompt=True,
  21. )
  22. // 初始化LLM
  23. llm = LLM(
  24.         model = model_dir,
  25.         tensor_parallel_size=1,
  26.     gpu_memory_utilization=0.9,
  27.     max_model_len=4096
  28. )
  29. // 设置采样参数
  30. sampling_params = SamplingParams(temperature=1,top_p=0.8,max_tokens=512)
  31. // 生成输出
  32. outputs = llm.generate([text],sampling_params)
  33. // 打印输出
  34. for output in outputs:
  35.         prompt = output.prompt
  36.         generated_text = output.outputs[0].text
  37.        
  38.         print(f"Prompt: {prompt!r}, LLM output:{generated_text!r}")
复制代码
接下来,看看第二个示例。
第二个示例:OpenAI单一对话
  1. // 注意:请先安装 openai
  2. // pip install openai
  3. from openai import OpenAI
  4. // 设置 OpenAI API 密钥和 API 基础地址
  5. openai_api_key = "EMPTY"  # 请替换为您的 API 密钥
  6. openai_api_base = "http://localhost:8000/v1"  # 本地服务地址
  7. client = OpenAI(base_url=openai_api_base,api_key=openai_api_key)
  8. // Completion API 调用
  9. completion = client.chat.completions.create(
  10.     model="/root/autodl-tmp/models/Qwen-7b-instruct",
  11.     messages=[{"role":"user","content":"最近经常熬夜,与之前生物钟颠倒,而且最近还肠胃发炎了不过已经好多了最近色斑越长越多"}])
  12. print(completion.choices[0].message.content)
复制代码
接下来,看看第3个示例。
第三个示例:OpenAI多轮对话
  1. from openai import OpenAI
  2. import os
  3. from dotenv import load_dotenv
  4. import logging
  5. // 配置日志
  6. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  7. logger = logging.getLogger(__name__)
  8. class ChatSession:
  9.     def __init__(self):
  10.         # 加载环境变量
  11.         load_dotenv()
  12.         self.api_key = os.getenv("OPENAI_API_KEY", "EMPTY")
  13.         self.api_base = os.getenv("OPENAI_API_BASE", "http://localhost:8000/v1")
  14.         self.model = os.getenv("MODEL_PATH", "/root/autodl-tmp/models/Qwen-7b-instruct")
  15.         self.client = OpenAI(base_url=self.api_base, api_key=self.api_key)
  16.         self.chat_history = []
  17.     def add_message(self, role, content):
  18.         """添加消息到历史记录"""
  19.         self.chat_history.append({"role": role, "content": content})
  20.     def get_assistant_response(self, temperature=0.7):
  21.         """获取助手响应"""
  22.         try:
  23.             response = self.client.chat.completions.create(
  24.                 model=self.model,
  25.                 messages=self.chat_history,
  26.                 temperature=temperature
  27.             )
  28.             return response.choices[0].message.content
  29.         except Exception as e:
  30.             logger.error(f"获取响应时发生错误: {str(e)}")
  31.             return f"抱歉,发生了错误: {str(e)}"
  32.     def run(self):
  33.         """运行聊天会话"""
  34.         logger.info("开始聊天会话")
  35.         print("欢迎使用聊天助手!输入 'quit' 退出。")
  36.         
  37.         while True:
  38.             try:
  39.                 user_input = input("n用户: ").strip()
  40.                 if user_input.lower() == "quit":
  41.                     print("再见!")
  42.                     break
  43.                
  44.                 if not user_input:
  45.                     print("请输入有效内容")
  46.                     continue
  47.                 self.add_message("user", user_input)
  48.                 assistant_response = self.get_assistant_response()
  49.                 print(f"助手: {assistant_response}")
  50.                 self.add_message("assistant", assistant_response)
  51.                
  52.             except KeyboardInterrupt:
  53.                 print("n程序被用户中断")
  54.                 break
  55.             except Exception as e:
  56.                 logger.error(f"运行时发生错误: {str(e)}")
  57.                 print("发生了错误,请重试")
  58. def main():
  59.     try:
  60.         chat_session = ChatSession()
  61.         chat_session.run()
  62.     except Exception as e:
  63.         logger.error(f"程序启动失败: {str(e)}")
  64. if __name__ == "__main__":
  65.     main()
复制代码
接下来,看看k8s+  vllm 安装 Deepseek大模型 和 容器调度。
二、k8s+  vllm 安装 Deepseek大模型 和 容器调度

(一)、vLLM 在 Kubernetes 中的安装部署‌

‌1  Helm Chart 部署‌

添加 vLLM Production Stack 的 Helm 仓库并安装:
  1. helm repo add vllm-prod https://vllm-prod.github.io/charts
  2. helm install vllm vllm-prod/vllm --namespace vllm --create-namespace
复制代码
支持通过values.yaml 自定义模型路径、GPU 驱动版本等参数‌ 。
‌2  Kubernetes 基础环境配置‌

确保集群节点已安装 NVIDIA GPU 驱动及 nvidia-docker 运行时,并配置 device-plugin 插件以支持 GPU 资源调度‌。
私有镜像仓库配置(如 Harbor),需同步证书至 /etc/docker/certs.d/ 目录并完成登录验证‌。
3  分布式 KV 缓存配置‌

启用 vLLM 的分布式 KV 缓存共享功能,通过 LMCache 技术减少内存冗余,需在部署时  指定共享存储后端(如 Redis 或 Alluxio)‌。
(二‌)、Kubernetes GPU 环境配置指南‌

‌1:NVIDIA GPU 驱动安装‌

环境检查与驱动安装
‌执行以下命令确认系统内核版本和 GPU 型号:
  1. uname -r          # 查看内核版本
  2. lspci | grep -i nvidia  # 识别 GPU 型号
复制代码
禁用系统默认的 Nouveau 驱动,避免与 NVIDIA 官方驱动冲突:
  1. echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
  2. sudo update-initramfs -u  # 更新 initramfs
复制代码
安装 NVIDIA 官方驱动(建议选择与 H20 GPU 兼容的版本):
  1. sudo apt-get install -y nvidia-driver-535  # 示例版本号需按实际调整
  2. sudo reboot  # 重启生效
复制代码
验证驱动安装:
  1. nvidia-smi
复制代码
输出 GPU 状态信息‌。
2、nvidia-docker 运行时配置‌

安装 NVIDIA Container Toolkit.‌
NVIDIA Container Toolkit‌ 是 NVIDIA 官方提供的容器运行时扩展工具集,‌
核心作用是将宿主机的 GPU 驱动能力注入容器‌,使得容器内应用可直接调用 GPU 计算资源(如 CUDA 库、cuDNN 等),‌实现容器化环境中 GPU 资源的透明化调用‌。

添加 NVIDIA 容器工具包仓库并安装:
  1. distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
  2. curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
  3. curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  4. sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
复制代码
3、配置 Docker 默认运行时:
  1. sudo tee /etc/docker/daemon.json <<EOF
  2. {
  3.   "runtimes": {
  4.     "nvidia": {
  5.       "path": "/usr/bin/nvidia-container-runtime",
  6.       "runtimeArgs": []
  7.     }
  8.   },
  9.   "default-runtime": "nvidia"
  10. }
  11. EOF
  12. sudo systemctl restart docker  # 重启 Docker
复制代码
(八)软件与环境配置

系统环境

组件版本/说明操作系统Ubuntu 22.04 LTS(所有节点)CUDACUDA 12.1(所有节点需版本一致)cuDNNcuDNN 8.9.5(与 CUDA 版本匹配)NCCLNCCL 2.17(优化多节点通信)PyTorchPyTorch 2.2.0(支持分布式训练和推理)vLLMvLLM 0.7.4(最新稳定版)RayRay 2.8.0(分布式集群管理)vllM集群配置

vllm给我提供了一个集群部署的脚本,可以用这个脚本
  1. docker run --rm nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
复制代码
可以用ray框架,两个本质上是一样的
  1. kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
复制代码
启动命令 如下:
启动命令(在头节点执行)

注意, 在头节点执行
  1. kubectl describe node <node-name> | grep nvidia.com/gpu
复制代码
RDMA优化配置:
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: gpu-test
  5. spec:
  6.   containers:
  7.   - name: cuda-container
  8.     image: nvidia/cuda:12.2.0-base-ubuntu22.04
  9.     command: ["sleep", "infinity"]
  10.     resources:
  11.       limits:
  12.         nvidia.com/gpu: 1
复制代码
(九)、 部署步骤

安装依赖
  1. // 下载 DeepSeek-14B 的 INT4 量化版本(显存需求降至 12GB/卡)
  2. git lfs install
  3. git clone https://huggingface.co/deepseek-ai/DeepSeek-14B-4bit /mnt/nvme/deepseek-14b-4bit
复制代码
启动 vLLM 服务
  1. //PVC 配置文件 (deepseek-pvc.yaml)
  2. apiVersion: v1
  3. kind: PersistentVolumeClaim
  4. metadata:
  5.   name: deepseek-pvc
  6. spec:
  7.   storageClassName: ssd
  8.   accessModes:
  9.     - ReadWriteOnce
  10.   resources:
  11.     requests:
  12.       storage: 200Gi  # 推荐 NVMe SSD 存储卷‌:ml-citation{ref="4,5" data="citationList"}
复制代码
监控工具


  • NVIDIA Nsight:监控 GPU 利用率和显存占用。
  • Ray Dashboard:查看集群任务分配和资源利用率。
  • Prometheus + Grafana:全局监控 QPS、延迟和错误率。
性能测试
  1. // Dockerfile(基于 vLLM 官方镜像)
  2. FROM vllm/vllm-openai:latest
  3. COPY --from=deepseek-ai/DeepSeek-14B-4bit /model /app/model
  4. RUN pip install --no-cache-dir deepseek-ai==0.4.2  # 安装模型依赖库‌
复制代码
参数解释:
  1. docker build -t registry.example.com/deepseek-14b:v1 .
  2. docker push registry.example.com/deepseek-14b:v1
复制代码
总结

按照如下步骤逐步的验证
(1) 单卡性能调优 → 2. 单节点扩展 → 3. 多机联合测试 → 4. 全集群压力测试。
遇到问题,找老架构师取经

借助此文,尼恩给解密了一个高薪的 秘诀,大家可以 放手一试。保证  屡试不爽,涨薪  100%-200%。
后面,尼恩java面试宝典回录成视频, 给大家打造一套进大厂的塔尖视频。
通过这个问题的深度回答,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。
在面试之前,建议大家系统化的刷一波 5000页《尼恩Java面试宝典PDF》,里边有大量的大厂真题、面试难题、架构难题。
很多小伙伴刷完后, 吊打面试官, 大厂横着走。
在刷题过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。
另外,如果没有面试机会,可以找尼恩来改简历、做帮扶。
遇到职业难题,找老架构取经, 可以省去太多的折腾,省去太多的弯路。
尼恩指导了大量的小伙伴上岸,前段时间,刚指导一个40岁+被裁小伙伴,拿到了一个年薪100W的offer。
狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由” 。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
1.jpeg
2.jpeg
3.jpeg
4.jpeg
您需要登录后才可以回帖 登录 | 立即注册