GPT的启示
ChatGPT石破天惊,GPT-4的问世又引发了进一步的轰动,GPT-5即将到来……它们的影响远远超出了大家的预期和想象。有观点认为,ChatGPT是通用人工智能的Singularity(奇点)。无独有偶,2022年,微软发布了一篇论文Singularity: Planet-Scale, Preemptive and Elastic Scheduling of AI Workloads,介绍其全局分布式调度服务,作者包括Azure的CTO MarkRussinovich。而Azure与OpenAI合作,重新设计了超级计算机,在Azure云上为OpenAI训练超大规模的模型。该论文将Azure的全局分布式调度服务命名为Singularity,可见其深意。
GPT-3模型的参数量是1750亿个,研发这个规模的大型模型,是一个极其复杂的系统工程,涵盖了算法、算力、网络、存储、大数据、框架、基础设施等多个领域。微软2020年发布的信息称,其计划为OpenAI开发的专用超级计算机包括28.5万个CPU、1万个GPU。市场调查机构TrendForce的报告则指出,ChatGPT需要3万个GPU。在OpenAI官网和报告中都提到,GPT-4项目的重点之一是开发一套可预测、可扩展的深度学习栈和基础设施(Infrastructure)。与之对应的是,在OpenAI研发团队的6个小组中,有5个小组的工作涉及AI工程和基础设施。
OpenAI没有提供GPT-4的架构(包括模型大小)、硬件、数据集、训练方法等内容,这非常令人遗憾,但是我们可以从微软发布的论文入手,来研究GPT-4这座冰山在水下的那些深层技术栈。从论文可以看出,GPT使用的底层技术并没有那么“新”,而是在现有技术基础之上进行的深度打磨,并从不同角度对现有技术进行了拓展,做到工程上的极致。比如Singularity在GPU调度方面,就有阿里巴巴AntMan的影子。再比如Singularity从系统角度出发,使用CRIU完成任务抢占、迁移的同时,也巧妙解决了弹性训练的精度一致性问题。
AI的黄金时代可能才刚刚开启,各行各业的生产力革命也会相继产生。诚然,OpenAI已经占据了领先位置,但是接下来的AI赛道会风起云涌,中国企业势必会在其中扮演极其重要的角色,也会在深度学习栈和基础设施领域奋起直追。然而,“弯道超车”需要建立在技术沉淀和产品实力之上,我们只有切实地扎根于现有的分布式机器学习技术体系,并对其进行深耕,才能为更好的创新和发展打下基础。大家都已在路上,没有人直接掌握着通向未来的密码,但面对不可阻挡的深层次的信息革命和无限的发展机遇,我们必须有所准备。复杂模型的挑战
为了降低在大型数据集上训练大型模型的计算成本,研究人员早已转向使用分布式计算体系结构(在此体系结构中,许多机器协同执行机器学习方法)。人们创建了算法和系统,以便在多个CPU或GPU上并行化机器学习(Machine Learning,ML)程序(多设备并行),或者在网络上的多个计算节点并行化机器学习训练(分布式并行)。这些软件系统利用最大似然理论的特性来实现加速,并随着设备数量的增加而扩展。理想情况下,这样的并行化机器学习系统可以通过减少训练时间来实现大型模型在大型数据集上的并行化,从而实现更快的开发或研究迭代。
然而,随着机器学习模型在结构上变得更加复杂,对于大多数机器学习研究人员和开发人员来说,即便使用TensorFlow、PyTorch、Horovod、Megatron、DeepSpeed等工具,编写高效的并行化机器学习程序仍然是一项艰巨的任务,使用者需要考虑的因素太多,比如:
系统方面。现有系统大多是围绕单个并行化技术或优化方案来构建的,对组合多种策略的探索不足,比如不能完全支持各种混合并行。
性能方面。不同并行化策略在面对不同的算子时,性能差异明显。有些框架未考虑集群物理拓扑(集群之中各个设备的算力、内存、带宽有时会存在层级的差距),使用者需要依据模型特点和集群网络拓扑来选择或者调整并行化策略。
易用性方面。很多系统需要开发人员改写现有模型,进行手动控制,比如添加通信原语,控制流水线等。不同框架之间彼此割裂,难以在不同并行策略之间迁移。
可用性方面。随着训练规模扩大,硬件薄弱或设计原因会导致单点故障概率随之增加,如何解决这些痛点是个严重问题。
总之,在将分布式并行训练系统应用于复杂模型时,“开箱即用”通常会导致低于预期的性能,求解最优并行策略成为一个复杂度极高的问题。为了解决这个问题,研究人员需要对分布式系统、编程模型、机器学习理论及其复杂的相互作用有深入的了解。
本书是笔者在分布式机器学习领域学习和应用过程中的总结和思考,期望能起到抛砖引玉的作用,带领大家走入/熟悉分布式机器学习这个领域。本书的内容组织
PyTorch是大家最常用的深度学习框架之一,学好PyTorch可以很容易地进入分布式机器学习领域,所以全书以PyTorch为纲进行穿插讲解,从系统和实践的角度对分布式机器学习进行梳理。本书架构如下。