实战大规模GPU集群推理部署

最近在Tesla V100 32GB 8GPUs x 1000 nodes的大规模集群的工作中,收获不少宝贵一手经验——

【硬件问题】

首先了解到,在这样规模的集群下,GPU硬件本身出问题的几率很大。

第一类问题是ECC,数据校验错误。

RuntimeError: CUDA error: uncorrectable ECC error encountered

CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.

数据校验错误那是内存存储出了问题。

第二类是AsyncEngineDeadError:

vllm.engine.async_llm_engine.AsyncEngineDeadError: Background loop has errored already.

这个虽然是vLLM抛出的错误(Error),具体原因不明,但似乎跟GPU密切相关。很可能也是GPU有硬件问题。

其实用nvidia-smi查看GPU信息时,在有故障GPU的node上,就会执行得非常卡顿,且能看到这样的端倪:

【vLLM vs Ollama】

vLLM针对具体GPU在调试阶段的可视度比Ollama似乎好一些,需要你去理解大模型的各参数及GPU的相关性,比如以Tesla V100启动会报一下的错:

ValueError: Bfloat16 is only supported on GPUs with compute capability of at least 8.0. Your Tesla V100-SXM2-32GB GPU has compute capability 7.0. You can use float16 instead by explicitly setting the`dtype` flag in CLI, for example: --dtype=half.

这里附上常见GPU的Compute Capability列表:

Compute 
capability
(version)


GPUs

10.0B100、B200、GeForce RTX 5090、5080 
9.0

H100、H200

8.9
GeForce RTX 4090、4080、4070、4060
8.6

GeForce RTX 3090、3080、3070、3060

8.0
A100、A30
7.5

GeForce RTX 2080、2070、2060、1660

7.0
Tesla V100
6.1
Tesla P40、GeForce GTX 1080、1070、1060
6.0
Tesla P100

由此可见Tesla V100的Compute Capability是7.0,也就是不能用Bfloat16进行计算,要对Bfloat16减半转换为float16,所以运行时的dtype是half或者float16,否则vLLM会报错。

在国内需要设置环境变量VLLM_USE_MODELSCOPE=True,然后就可以启动一个vLLM大模型API服务了:

$ CUDA_VISIBLE_DEVICES=0,1 nohup python -m vllm.entrypoints.openai.api_server --model pooka74/LLaMA3-8B-Chat-Chinese --dtype=half --port 8000 &> ~/logs/vllm.log &

两种推理工具都可以用环境变量CUDA_VISIBLE_DEVICES来控制对具体单个或多个GPU的使用。

【分布式推理】

分布式无非是“分而治之”的思路解决计算、存储等问题。一个GPU装得下,当然不会退而求其次,因为处理分布式架构相关的成本是不低的,主要包括:通讯开销任务调度资源分配内存管理容错性

Ollama可以完全透明的将大模型部署在同一个node的多个GPU上,vLLM稍微麻烦一点点,就是需要带上参数tensor-parallel-size:

python -m vllm.entrypoints.api_server \`    `--model qwen/Qwen2-72B-Instruct \`    `--tensor-parallel-size 4

唯一Ollama不支持,但是vLLM支持的,是通过Ray进行跨node的分布式部署。Ray是一种基于Python的分布式编程框架[2]。Ray框架提供了内存管理策略,包括分布式内存共享和对象存储;Ray还具备容错机制,比如对象重建和GCS容错。

pip install ray

需要选择一个头节点head node,并将子节点worker nodes指向它。

# On head node``ray start --head``   ``# On worker nodes``ray start --address=<ray-head-address>

但是你真的需要这种分布式推理架构吗?首先即使节点之间网络采用了InfiniteBand或者光纤(万兆),跟总线上的PCIe和NVLink差了1-3个数量级[3]。

NVLink是一种NVidia的专属技术,用于连接多个GPU。这样的GPU需要Compute Capability 8.0以上。上图可以看出,其连接带宽比PCIe还高了一个数量级。

所以,除非只是为了验证Ray的分布式能力,或者真的别无它法,跨node的分布式推理真是一个鸡肋。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### 使用GPU加速大模型训练与推理实战案例 #### 案例背景 为了更高效地训练和推理大规模深度学习模型,合理利用硬件加速是不可或缺的一环。图形处理单元(GPU)和张量处理单元(TPU)等专用硬件被广泛应用于深度学习任务,能够显著提升计算速度[^1]。 #### 解决方案概述 针对大型神经网络如GPT-3,在单个GPU上难以完成整个模型的加载和训练,因为其所需的显存远超现有设备的能力。例如,175B参数的GPT-3模型需要大约700GB的存储空间来保存权重,这远远超过了当前主流GPU的最大容量80GB显存[^3]。因此,采用分布式训练策略成为必然选择。 #### 技术实现细节 ##### 数据并行化 数据并行是一种简单有效的扩展方式,它将输入的数据集划分为多个子集,并分配给不同的工作节点进行独立运算后再汇总结果。这种方法可以充分利用集群中的多台机器以及每台机器上的多个GPU来进行快速迭代更新。 ```python import torch.nn as nn from torch.utils.data.distributed import DistributedSampler from torchvision.datasets import CIFAR10 from torch.utils.data import DataLoader, random_split dataset = CIFAR10(root='./data', train=True, download=True) train_size = int(0.9 * len(dataset)) val_size = len(dataset) - train_size train_dataset, val_dataset = random_split(dataset, [train_size, val_size]) sampler = DistributedSampler(train_dataset) dataloader = DataLoader( dataset=train_dataset, batch_size=64, sampler=sampler ) ``` ##### 模型并行化 当单一GPU无法容纳完整的模型结构时,则需考虑拆分模型的不同部分到不同设备上去执行前向传播与反向传播操作。这种做法虽然复杂度较高但也非常必要,特别是对于那些拥有极深层数或巨大宽度的大规模预训练语言模型而言。 ```python class ModelParallelResNet50(nn.Module): def __init__(self): super().__init__() self.dev0 = 'cuda:0' self.dev1 = 'cuda:1' # 将一部分层放在第一个gpu上... self.prep_layer = nn.Sequential(...).to(self.dev0) ... # ...另一些放到第二个gpu上 self.fc = nn.Linear(in_features=..., out_features=num_classes).to(self.dev1) def forward(self, x): x = self.prep_layer(x.to(self.dev0)) # 输入先传入dev0 # 中间特征图传输至下一个gpu继续处理 x = x.to(self.dev1) output = self.fc(x.view(-1,...)) return output ``` ##### 训练过程优化技巧 除了上述两种主要方法外还有一些辅助性的措施可以帮助进一步提高效率: - **混合精度训练**:使用FP16代替传统的FP32浮点数表示形式可以在不损失太多准确性的情况下加快收敛速率并且节省内存占用。 - **梯度累积**:如果批次大小受限于可用RAM数量不足以获得良好性能的话可以通过累加多次小批量样本对应的梯度再统一做一次参数调整从而模拟较大batch size的效果而不增加额外开销。 这些技术共同作用使得即使面对极其庞大的AI项目也能顺利完成开发部署流程的同时保持较高的生产力水平[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值