数据中心中大语言模型开发的表征-NSDI’24
LLM和普通的深度学习不同。尤其是在范式转变,定制软件栈和模型架构层面。
为了解决这一差距,我们对上海人工智能实验室的数据中心Acme的运营经验进行了深入研究。 该中心拥有两个专门用于LLM开发的集群,Seren和Kalos,总共配备了4,704个A100 GPU。我们的分析基于从2023年3月到8月期间收集的日志数据,包括调度器日志、基础设施监控数据、故障日志和细粒度的性能分析数据 。我们的主要发现和识别的挑战总结如下:
1.更短的作业时长和不公平的排队延迟。
2.资源使用的不平衡。预训练作业很少但是占用了大量的计算资源;评估作业相反。在大模型中,GPU利用率中位数甚至高达99%,在传统的DL负载中没有这么高。(文章说这些观察结果证实了LLMs在计算和内存方面的高需求,也表明基于GPU共享的技术可能不适用于LLMs)
3.评估任务负载GPU比较空闲。只有一半的时间用于GPU推理。
4.频繁的作业失败。LLM工作负载的各种错误主要发生在作业开始阶段,导致快速终止。
根据我们的特征研究,我们发现了LLM开发过程中遇到的几个挑战,如训练进度不稳定、远程存储瓶颈和模型性能反馈延迟。为了解决这些问题,我们结合运营经验,构建了两个集成到LLM框架中的系统,以提高开发的稳健性和效率。
首先,为了缓解频繁的故障问题,我们建立了一个预训练容错系统。它包含三个关键设计:(1) 通过异步检查点实现频繁的模型保存,(2) 结合启发式规则和LLM识别各种故障的根本原因,(3) 使用综合检测工具包定位故障节点,并从适当保存的检查点自动重新开始训练。该系统使检查点速度提高了3.6至58.7倍,并显著减少了人工干预。
其次,我们开发了一个用于评估任务的解耦调度系统,为开发人员提供及时的模型质量反馈。它不仅通过解耦模型检索解决了远程模型加载争用问题,还通过解耦指标计算过程最小化了GPU空闲时间。该系统还利用数据集的先验知识和灵活性在所有GPU上平衡工作负载。实验表明,它可以将评估时间缩短最多达1.8倍。
二、背景
1.数据准备
2.预训练
3.对齐
4.评估
5.部署。为了满足LLM应用的严格成本和延迟要求,已经开发了多种先进技术来实现高效的模型服务,包括量化、蒸馏、CUDA内核优化、模型并行和内存管理等。
在本文中,我们专注于分析两个专门用于开发大语言模型(LLM)的集群:Seren 和 Kalos。这两个集群CPU和GPU资源一样,内存资源不一样。用的调度器也不一样。Seren 和 Kalos 上的调度器分别基于 Slurm 和 Kubernetes 构建。
LLM工作负载也不同,参数从70亿到1230亿不等。
微软的Phillty,商汤的Helios,阿里的PAI,上海AILAB的Acme。可以发现Transformer确实需要大量的GPU
图2(a)我们发现我们集群中的工作负载(蓝色和橙色线条)展示出较短的GPU作业持续时间。最主要的方面是硬件条件好。其次是高达40%的作业失败率。
图2(b)GPU利用率太两级分化了,可能与LLM的Transformer架构有关。
工作负载分布高度倾斜。大多数作业为单GPU作业。但是这些作业在LLM和PAI集群中,占据的GPU时间截然不同。
根据数据集特征设计调度器。大部分资源被分配给少数预训练作业,可能导致头部阻塞问题,从而造成严重的排队延迟。现有的DL集群调度器通常依赖于抢占机制,但是考虑到恢复的巨大开销,这些机制并不适用于LLM工作负载。
作业数和资源利用的不相关性:占大多数量的评估作业,资源消耗很小;预训练作业数量很少,但是占据了大量的GPU时间。
时间和延迟分布:评估作业的GPU需求最低,作业持续时间最短,但它们的排队延迟最长
基础设施利用情况:未发现异常
环境影响:GPU能耗是CPU的5倍
第四章:更专注于预训练工作和评估工作。因为他们是资源最密集或者数量最密集的。【这一章内容太难】
第五章:对作业失败进行分析。根据日志,主要将其分成三类。
基础设施: 基础设施相关的故障源于底层计算平台或远程存储的问题。这些故障主要发生在作业执行过程的中途阶段,尤其是在预训练任务中。它们由于复杂且耗时的恢复过程严重影响训练进度。
框架: 多种类型的运行时错误,如RuntimeError、ValueError和AttributeError,可能与张量操作、形状、数据类型或意外行为有关。它们通常出现在作业的初始阶段,并且通常通过修复配置来解决。
脚本: 脚本错误通常源于编程错误或用户疏忽。它们占据了大多数的故障,并且通常通过修订代码来解决.
第六章:部署LLM系统。本节将分两个阶段介绍我们的工作:(1) 预训练阶段:通过LLM相关的故障诊断和自动恢复来增强容错能力。(2) 评估阶段:通过任务分解实现及时的性能响应。
故障,容错。原来是人工手动值班。现在是开发了一个容错系统,将其无缝集成到LLM预训练框架中。
容错系统的关键模块:(1) 检查点:增加频繁的模型保存,以最小化训练进度的损失;(2) 诊断:使用启发式规则和LLM结合,准确识别不同故障的根本原因;(3) 恢复:采用全面的检测工具包,确定故障节点,并从适当保存的检查点自动重新启动训练。
6.2 用于评估的解耦调度。感觉依赖于方方面面,使用了很多解耦操作。很多粒度无法用伪代码实现。
参考资料:
https://blog.csdn.net/weixin_46091520/article/details/140328351