使用动态批次调整防止PyTorch中的CUDA内存溢出
摘要
MEM v3 是一个用于PyTorch的内存管理工具,它动态调整批次大小和梯度累积,以防止训练和微调过程中的CUDA内存溢出崩溃,具有抗混乱性、防崩溃检查点和实时遥测功能。
我构建了MEM v3来解决PyTorch中的一个令人沮丧的问题:长时间训练和微调运行中的CUDA内存溢出崩溃。MEM充当内存管理器,而不是在内存峰值时重启或为了安全而将批次大小设置得过小。它实时监控VRAM和吞吐量,然后在不中断进程的情况下动态调整批次大小和梯度累积。
它做了什么:
- 动态批次调整:根据实际GPU内存压力,在毫秒内调整批次大小。
- 抗混乱性:经过测试,能够应对突然增加10 GB VRAM分配的冲击而不崩溃。
- 防崩溃检查点:使用原子文件替换和SHA-256校验跨轮换插槽,因此断电不会损坏保存的权重。
- 实时遥测:内置本地网络仪表盘,用于跟踪损失、吞吐量和批次切换。
您可以直接在免费的Colab GPU上测试它,无需在本地设置任何内容:https://colab.research.google.com/github/nobazzy/mem-llm-orchestrator/blob/main/notebooks/mem_orchestrator_interactive_demo.ipynb
仓库:https://github.com/nobazzy/mem-llm-orchestrator
非常乐意听取您的想法和反馈!
相似文章
在8GB GPU上实验用于PyTorch的自适应内存管理器——非常期待反馈
作者正在实验用于PyTorch的自适应内存管理器,以防止8GB GPU上的CUDA内存溢出错误,分享代码并寻求社区反馈。
@PyTorch: TRANSIT(TRANsparent Scale-In for multi-node Training)是一种使统一虚拟内存对大规模训练实用的运行时
TRANSIT是一种运行时,使统一虚拟内存对大规模LLM训练实用,无需更改代码即可将GPU使用率降低高达50%,并将在PyTorch Conference North America上展示。
@PyTorch:在NVIDIA NeMo框架内使用PyTorch原生库自定义模型以满足您对延迟、速度、内存和计算的严格要求…
NVIDIA展示了如何使用NVIDIA模型优化器进行量化感知蒸馏(QAD)来改进Nemotron 3.5 Lightning模型,在保持代理基准准确性的同时减少内存使用并提高吞吐量。
将大规模MoE训练保持在固定GPU内存内(20分钟阅读)
本文介绍了限制大规模MoE训练中四个关键内存峰值的方法,使得在1M上下文长度下使用固定GPU内存进行训练成为可能,并且相比基线,吞吐量提升高达10.4倍。
构建了一个LLM训练框架,能在旧款GPU上运行而不崩溃
介绍Picotron,它是Nanotron的净室重写版本,消除了强制性的GPU特定依赖,使得LLM训练能够在T4和V100等旧款GPU上进行。它默认使用标准PyTorch SDPA,但在运行时支持FlashAttention-2。