本文 的 原文 地址
本文 的 原文 地址
尼恩: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
- https://github.com/vllm-project/vllm
复制代码 接下来,看看 vLLM在线文档。
vLLM在线文档
- 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安装- //(推荐)创建一个新的 conda 环境。
- conda create -n myenv python=3.10 -y
- conda activate myenv
- // 安装带有 CUDA 12.1 的 vLLM。
- pip install vllm
复制代码 建议使用全新的 conda 环境安装 vLLM。
如果您有不同的 CUDA 版本或者想要使用现有的 PyTorch 安装,则需要从源代码构建 vLLM。
vLLM启动
使用python 启动- 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命令启动- 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离线推理
- import os
- from transformers import AutoTokenizer
- from vllm import LLM, SamplingParams
- // 模型路径
- model_dir = '/root/autodl-tmp/models/Qwen-7b-instruct'
- // 加载tokenizer
- tokenizer = AutoTokenizer.from_pretrained(
- model_dir,
- local_files_only=True,
- )
- // Prompt
- messages = [
- {'role':'system','content':'You are a medical assistant'},
- {'role':'user','content':'最近经常熬夜,与之前生物钟颠倒,而且最近还肠胃发炎了不过已经好多了最近色斑越长越多'}
- ]
- // 将messages转换为text
- text = tokenizer.apply_chat_template(
- messages,
- tokenize=False,
- add_generation_prompt=True,
- )
- // 初始化LLM
- llm = LLM(
- model = model_dir,
- tensor_parallel_size=1,
- gpu_memory_utilization=0.9,
- max_model_len=4096
- )
- // 设置采样参数
- sampling_params = SamplingParams(temperature=1,top_p=0.8,max_tokens=512)
- // 生成输出
- outputs = llm.generate([text],sampling_params)
- // 打印输出
- for output in outputs:
- prompt = output.prompt
- generated_text = output.outputs[0].text
-
- print(f"Prompt: {prompt!r}, LLM output:{generated_text!r}")
复制代码 接下来,看看第二个示例。
第二个示例:OpenAI单一对话
- // 注意:请先安装 openai
- // pip install openai
- from openai import OpenAI
- // 设置 OpenAI API 密钥和 API 基础地址
- openai_api_key = "EMPTY" # 请替换为您的 API 密钥
- openai_api_base = "http://localhost:8000/v1" # 本地服务地址
- client = OpenAI(base_url=openai_api_base,api_key=openai_api_key)
- // Completion API 调用
- completion = client.chat.completions.create(
- model="/root/autodl-tmp/models/Qwen-7b-instruct",
- messages=[{"role":"user","content":"最近经常熬夜,与之前生物钟颠倒,而且最近还肠胃发炎了不过已经好多了最近色斑越长越多"}])
- print(completion.choices[0].message.content)
复制代码 接下来,看看第3个示例。
第三个示例:OpenAI多轮对话
- from openai import OpenAI
- import os
- from dotenv import load_dotenv
- import logging
- // 配置日志
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
- logger = logging.getLogger(__name__)
- class ChatSession:
- def __init__(self):
- # 加载环境变量
- load_dotenv()
- self.api_key = os.getenv("OPENAI_API_KEY", "EMPTY")
- self.api_base = os.getenv("OPENAI_API_BASE", "http://localhost:8000/v1")
- self.model = os.getenv("MODEL_PATH", "/root/autodl-tmp/models/Qwen-7b-instruct")
- self.client = OpenAI(base_url=self.api_base, api_key=self.api_key)
- self.chat_history = []
- def add_message(self, role, content):
- """添加消息到历史记录"""
- self.chat_history.append({"role": role, "content": content})
- def get_assistant_response(self, temperature=0.7):
- """获取助手响应"""
- try:
- response = self.client.chat.completions.create(
- model=self.model,
- messages=self.chat_history,
- temperature=temperature
- )
- return response.choices[0].message.content
- except Exception as e:
- logger.error(f"获取响应时发生错误: {str(e)}")
- return f"抱歉,发生了错误: {str(e)}"
- def run(self):
- """运行聊天会话"""
- logger.info("开始聊天会话")
- print("欢迎使用聊天助手!输入 'quit' 退出。")
-
- while True:
- try:
- user_input = input("n用户: ").strip()
- if user_input.lower() == "quit":
- print("再见!")
- break
-
- if not user_input:
- print("请输入有效内容")
- continue
- self.add_message("user", user_input)
- assistant_response = self.get_assistant_response()
- print(f"助手: {assistant_response}")
- self.add_message("assistant", assistant_response)
-
- except KeyboardInterrupt:
- print("n程序被用户中断")
- break
- except Exception as e:
- logger.error(f"运行时发生错误: {str(e)}")
- print("发生了错误,请重试")
- def main():
- try:
- chat_session = ChatSession()
- chat_session.run()
- except Exception as e:
- logger.error(f"程序启动失败: {str(e)}")
- if __name__ == "__main__":
- main()
复制代码 接下来,看看k8s+ vllm 安装 Deepseek大模型 和 容器调度。
二、k8s+ vllm 安装 Deepseek大模型 和 容器调度
(一)、vLLM 在 Kubernetes 中的安装部署
1 Helm Chart 部署
添加 vLLM Production Stack 的 Helm 仓库并安装:- helm repo add vllm-prod https://vllm-prod.github.io/charts
- 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 型号:- uname -r # 查看内核版本
- lspci | grep -i nvidia # 识别 GPU 型号
复制代码 禁用系统默认的 Nouveau 驱动,避免与 NVIDIA 官方驱动冲突:- echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
- sudo update-initramfs -u # 更新 initramfs
复制代码 安装 NVIDIA 官方驱动(建议选择与 H20 GPU 兼容的版本):- sudo apt-get install -y nvidia-driver-535 # 示例版本号需按实际调整
- sudo reboot # 重启生效
复制代码 验证驱动安装:输出 GPU 状态信息。
2、nvidia-docker 运行时配置
安装 NVIDIA Container Toolkit.
NVIDIA Container Toolkit 是 NVIDIA 官方提供的容器运行时扩展工具集,
核心作用是将宿主机的 GPU 驱动能力注入容器,使得容器内应用可直接调用 GPU 计算资源(如 CUDA 库、cuDNN 等),实现容器化环境中 GPU 资源的透明化调用。
添加 NVIDIA 容器工具包仓库并安装:- distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
- curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
- curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
复制代码 3、配置 Docker 默认运行时:
- sudo tee /etc/docker/daemon.json <<EOF
- {
- "runtimes": {
- "nvidia": {
- "path": "/usr/bin/nvidia-container-runtime",
- "runtimeArgs": []
- }
- },
- "default-runtime": "nvidia"
- }
- EOF
- 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给我提供了一个集群部署的脚本,可以用这个脚本- docker run --rm nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
复制代码 可以用ray框架,两个本质上是一样的- kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
复制代码 启动命令 如下:
启动命令(在头节点执行)
注意, 在头节点执行- kubectl describe node <node-name> | grep nvidia.com/gpu
复制代码 RDMA优化配置:
- apiVersion: v1
- kind: Pod
- metadata:
- name: gpu-test
- spec:
- containers:
- - name: cuda-container
- image: nvidia/cuda:12.2.0-base-ubuntu22.04
- command: ["sleep", "infinity"]
- resources:
- limits:
- nvidia.com/gpu: 1
复制代码 (九)、 部署步骤
安装依赖
- // 下载 DeepSeek-14B 的 INT4 量化版本(显存需求降至 12GB/卡)
- git lfs install
- git clone https://huggingface.co/deepseek-ai/DeepSeek-14B-4bit /mnt/nvme/deepseek-14b-4bit
复制代码 启动 vLLM 服务
- //PVC 配置文件 (deepseek-pvc.yaml)
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: deepseek-pvc
- spec:
- storageClassName: ssd
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 200Gi # 推荐 NVMe SSD 存储卷:ml-citation{ref="4,5" data="citationList"}
复制代码 监控工具
- NVIDIA Nsight:监控 GPU 利用率和显存占用。
- Ray Dashboard:查看集群任务分配和资源利用率。
- Prometheus + Grafana:全局监控 QPS、延迟和错误率。
性能测试
- // Dockerfile(基于 vLLM 官方镜像)
- FROM vllm/vllm-openai:latest
- COPY --from=deepseek-ai/DeepSeek-14B-4bit /model /app/model
- RUN pip install --no-cache-dir deepseek-ai==0.4.2 # 安装模型依赖库
复制代码 参数解释:
- docker build -t registry.example.com/deepseek-14b:v1 .
- 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自由” 。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |