Deepspeed原理(手写笔记)

前言 介绍了一下DeepSpeed的架构,以及部分重点内容的原理。 其实是看DeepSpeed源码时候随便写的一段笔记,没时间整理并且写的很潦草,所以不太想发,但是框架的代码读起来不容易,里面知识点确实花了一些时间才弄明白。 另外,也看到DeepSpeed框架在工作中使用越来越多,所以发出来给想要了解DeepSpeed原理的人一个参考,欢迎批评指正,献丑了。 正文

July 5, 2023 · 1 min · Dawson Chen

混合精度训练

神经网络的参数是用浮点精度表示的, 浮点精度的标准是IEEE 754 - Wikipedia,以下是一个FP16数值在内存中存储格式。 随着神经网络模型规模越来越大,如何减少模型占用的内存并且缩短训练时间成为亟需解决的问题,混合精度训练就是其中之一的解决方案,并且几乎不会影响模型训练的效果。 混合精度原理 想象一下,如果模型参数+loss+gradient都是用fp16保存的,fp16的最小值是$6.1\times 10^{-5}$,小于最小值的gradient都会变成0,相当于浪费了一次梯度传播。或许小的gradient并没有很重要,但是积累多次就会变得不可忽略。当前大模型普遍较低的学习率也会加剧这个问题的影响。 因此为了解决这个问题,就需要用更高精度fp32保存一份参数,在正常前向推理和反向传播时都用fp16,计算好得梯度先转换为fp32,再乘以学习率,然后更新到fp32存储得参数上,最终将fp32参数转换成fp16更新模型参数。 整个流程如下如: 这种用fp16和fp32共同训练模型得技术就叫做混合精度训练(MP, Mixed-Precision training),显然MP并不能节省模型加载需要的内存,因为需要多存储一份fp16的参数和梯度,但是用fp16进行模型前向和后向计算,能够减少中间计算值存储需要的内存,这部分内存会随着sequence length和batch size增大而增大,所以只有在这部分中间值占用内存比重较高时才能带来一定的内存节约。 虽然计算时间的影响不大,但是fp16训练时间的确会大大减少,通常是减少1.5~5.5倍。 更多资料: fastai - Mixed precision training Understanding Mixed Precision Training | by Jonathan Davis | Towards Data Science Loss Scale 是不是混合精度训练就完全没有梯度损失了呢,并不是,在反向传播过程中其实已经有部分梯度因为精度原因丢失了(因为正常模型梯度都不会太大,所以我们主要考虑下溢出)。那么如何解决这部分问题呢,就要用到Loss Scale。 原理是将Loss乘以一个比较大的数scale,因为Loss是用fp32存储的,所以scale的选值范围是比较大的。这样因为反向传播链式法则原理,梯度也会放大很多倍,原本下溢出的值也会保存下来。然后在梯度转换成fp32后除以scale,最后更新就与正常混合精度训练一致了。 流程如下: 一般在开始训练时scale会设定成一个比较大的值,如果计算过程中fp16梯度发生上溢出,会跳过当前步的参数更新,并将scale下调。训练log中会输出如下消息: ⚠️ Gradient overflow. Skipping step, loss scaler 0 reducing loss scale to…

July 5, 2023 · 1 min · Dawson Chen

ChatGPT Plugins原理介绍和讨论

背景 让我们回顾以下过去的半个月里重要的AI发展。 事件 时间 介绍 公司 Visual ChatGPT 3-12 可以通过文本和图片聊天,甚至修改图片内容。 Microsoft GPT4发布 3-13 更大的ChatGPT模型,部分专业能力达到人类水平,可以接收图片输入。 OpenAI 365 Copilot 3-16 智能办公大杀器。 Microsoft 文心一言 3-16 中国版的ChatGPT Baidu ChatGPT plugin 3-23 可以使用工具的ChatGPT OpenAI HuggingGPT 3-30 可以使用HuggingFace中模型能力的ChatGPT Microsoft 很多评价说过去的几周是AI发展的Crazy Week,这种速度疯狂到甚至让人们开始担心AI会影响到社会和人类,并在公开信中呼吁暂停AI的研究。造成这种现象的原因可以理解为,一是基于ChatGPT的成功,二是行业内大量的关注。 个人认为,这其中ChatGPT plugin可以认为是对行业应用最有影响力的一个技术,也是继ChatGPT发布以来OpenAI发布的最重要的更新,可以简单的理解为OpenAI发布了对应ChatGPT的应用商店。对未来人工智能应用的形态也有一定启发,以前的AI模型的定位更多的是充当的一个单一的智能工具,具体到某个任务上,还需要人工协同才能完成;但是有了plugin这项技术,那么AI模型可以代替之前人工的部分,自主使用工具,从而端到端的完成某一项任务。这也是为什么一些基础的工作岗位很有可能会被新一代AI技术取代。 在网上已经有很多对ChatGPT plugin如何使用的介绍,但是比较少有对其实现原理进行解析的内容。这篇文章里我们主要分析一下它的原理,以及可能造成的影响。 必要性 首先说为什么语言模型要使用插件?随着语言模型的规模不断变大,各种涌现能力被相继发现,从而衍生出各种关于模型能力的研究。但谈到语言模型的应用,始终绕不开一个问题,就是模型无法获取外界的信息。也就是,一旦模型训练完成,后续的所有输出都来自于训练数据中学习到的知识。 大语言模型存在的问题可以总结为以下2点: 缺少最新数据的补充; 在不同的应用场景,对数据的需求也是不同的。在开放问答领域,可以是维基百科一类的数据。在特定业务领域,可能是公司内部的一些私人数据集。 缺少专业的能力; 大型语言模型对通用逻辑的理解是比较好的,比方说写一篇文章,与人聊天。但是涉及到特殊的专业,比方说作数学题、求公式的解,这类型问题对模型来说是有点难的。 虽然GPT4号称用了更大的模型,可以在一些专业领域得到类似于人类的效果甚至超越。但是从本质上来看,语言模型所采用的文字接龙训练方式,对于这类问题是非常不友好的。 或许随着模型变大,训练时间更长可以得到更好的效果,但是花费巨大训练出的GPT3在计算能力上远远达不到1970年代出现的计算器,本身就可以说明大模型技术是不足以解决专业推理问题的。 了解了以上模型存在的问题,就可以理解教模型使用插件的必要性了。PS:使用插件、使用工具,在不同的地方有不同的说法,但是是一件事情。 模型使用工具技术发展 在GPT3发布以后,就有一些AI模型使用插件的技术研究陆续出现,甚至有一些开源的框架在github上收获不错的关注。 想法的提出:MRKL System MRKL System(全名是Modular Reasoning, Knowledge and Language,论文链接,博客链接)由以色列的一家人工智能公司AI21推出,可以被认为是语言模型使用工具系统想法的提出者。虽然在此之前有WebGPT这类教模型使用浏览器的工作,但它是第一个提出将模型作为中枢,接入各种不同类型的插件来完成任务的工作。 从工作流程上来看,MRKL已经完全接近于ChatGPT plugin。MRKL认为这是一种跨越神经学派和符号学派的架构(neuro-symbolic architecture),各种插件可以被认为是符号系统,由神经学派的语言模型进行统一调用。 这篇论文中以使用计算器为例子,主要描述了如何将自然语言中的内容转换为API所需要的参数,文中提出语言模型few-shot在复杂的问题上性能有限,所以用Prompt tuning这种轻量化的微调技术提升转换的准确率。Prompt tuning技术是用特定训练好的非自然语言prompt来控制模型在特定任务中的生成表现,对应到MRKL中那就是每一个插件都需要训练一个特定的Prompt,虽然说有一定训练成本,但也算是一种比较好的解决思路。 可是文中对于最重要的问题:”怎么决定调用插件?“,这块的细节并没有太多的描述,也引出了关于大模型推理技术的发展。 Reasoning技术:ReACT 为了教会模型实用工具,一种方法是首先让模型具备推理的能力,从而能够模拟人使用工具的过程。应该说语言模型的训练方式和推理是不沾边的,但是语言模型的美妙之处就在于,当模型大小足够大的时候,它会诞生出很多出乎意料的能力,比方说推理能力。 大语言模型的推理能力通过Chain-of-thought体现出来,但是这种推理能力需要显式的Prompt进行引导。根据引导方式的不同产生出各种不同的技术,其本质上是对不同思维方式的模拟,这里我们只介绍比较典型的ReACT技术。 ReACT用强化学习的方式建模推理的过程,agent认为是一个可以使用各种工具的智能体,environment为所有可用插件构成的工具箱集合,action为可以使用的插件功能集合。而控制策略为语言模型中学习到的知识。一个典型的推理的流程如下图所示:...

April 7, 2023 · 2 min · Dawson Chen