网站网页设计培训班,鞍山seo外包,全球搜索引擎排名2021,嵌入式开发工程师是干嘛的2022年11月#xff0c;ChatGPT横扫全球#xff0c;成为应用人工智能#xff08;AI#xff09;领域迄今为止最令人惊叹的“哇#xff01;”时刻#xff0c;也是当前科技投资激增的催化剂。2023年11月#xff0c;首席执行官Sam Altman宣布该产品周用户量达到1亿#xff0…2022年11月ChatGPT横扫全球成为应用人工智能AI领域迄今为止最令人惊叹的“哇”时刻也是当前科技投资激增的催化剂。2023年11月首席执行官Sam Altman宣布该产品周用户量达到1亿这在该领域内的增长速度是前所未有的。随着用户量爆炸性增长真正的扩展挑战是什么呢为了深入了解我再次采访了Evan Morikawa他是ChatGPT发布和扩展过程中的应用工程团队负责人。那么让我们听听Evan的分享。
1. 关于OpenAI和Evan的简介 Evan是如何加入OpenAI并最终领导应用工程团队的这个团队也参与了ChatGPT的构建。
OpenAI是ChatGPT的创造者ChatGPT只是公司众多产品之一。其他产品包括DALL·E 3图像生成、GPT-4一种高级模型以及OpenAI API开发者和公司利用这个API将AI整合到他们的流程中。ChatGPT和API都提供了多种模型类别GPT-3、GPT-3.5和GPT-4。
负责制作和扩展这些产品的工程、产品和设计组织称为“应用”成立于2020年GPT-3发布时。它的主要任务是安全地将OpenAI的研究成果推向世界。OpenAI本身成立于2015年今天公司的核心仍然是一个研究实验室旨在创建一个安全且对齐的人工通用智能AGI。
2. ChatGPT是如何工作的回顾一下。
对于那些没有从头开始构建ChatGPT的人来说它是如何工作的
为了引入一些扩展话题让我简单介绍一下这些AI模型是如何工作的。如果你已经熟悉基础知识可以跳到第3部分。
当你向ChatGPT提问时会发生几个步骤
输入。我们从文本输入中获取你的文本。
分词。我们将其切分成令牌。一个令牌大致对应几个Unicode字符。你可以将其视为一个词。
创建嵌入向量。我们将每个令牌转换成一系列数字这被称为嵌入向量。
通过模型权重乘以嵌入向量。然后我们将这些嵌入向量与数以百亿计的模型权重相乘。
抽样预测。在这些乘法操作结束时数字向量代表了下一个最可能令牌的概率。接下来最可能的令牌是从ChatGPT中输出的下几个字符。
让我们可视化这些步骤。前两步比较简单
步骤1和2当你向ChatGPT提出问题时发生的事情 注意分词不一定意味着将文本分成单词令牌也可以是单词的子集。
嵌入向量是大型语言模型LLM的核心我们在下一步从令牌中创建它们
步骤3当你向ChatGPT提出问题时发生的事情。嵌入向量代表了令牌作为向量。上述嵌入向量中的值是示例 一个嵌入向量是令牌的多维表示。我们明确训练一些模型以显式允许捕获单词或短语之间的语义意义和关系。例如“狗”和“小狗”的嵌入向量在几个维度上比“狗”和“电脑”更接近。这些多维嵌入向量帮助机器更有效地理解人类语言。
模型权重用于计算加权嵌入向量矩阵这用于预测下一个可能的令牌。对于这一步我们需要使用OpenAI的权重矩阵该矩阵由数以百亿计的权重组成并将其与我们从嵌入向量构造的矩阵相乘。这是一次计算密集型的乘法操作。
步骤4当你向ChatGPT提出问题时发生的事情。权重矩阵包含数以百亿计的模型权重抽样预测是在我们进行了数十亿次乘法操作后完成的。最终向量代表了下一个最可能令牌的概率。抽样是我们选择下一个最可能的令牌并将其发送给用户的过程。ChatGPT中的每个单词都是通过每秒多次重复这个过程生成的。
预训练和推理 我们如何生成这套复杂的模型权重其值编码了大部分人类知识我们通过一个称为预训练的过程来完成。预训练的目标是构建一个模型它可以预测下一个令牌你可以将其视为一个词对于互联网上的所有单词都是如此。
在预训练期间通过梯度下降权重会逐渐更新这是一种数学优化方法。梯度下降的类比是一位徒步旅行者被困在山上他们正试图下山。然而由于浓雾限制了他们的视野他们只能看到周围的一小片区域。梯度下降意味着查看徒步旅行者当前位置的坡度并朝着最陡峭的下降方向前进。我们可以假设从简单的观察中并不明显坡度但幸运的是这位徒步旅行者有一个测量坡度的仪器。然而进行单次测量需要时间他们希望在日落前下山。因此这位徒步旅行者需要决定多久停下来测量一次坡度以便他们还能在日落前下山。
一旦我们有了我们的模型我们就可以在其上运行推理这是当我们用文本提示模型时发生的事情。例如提示可能是“为Pragmatic Engineer写一篇客座文章。”这个提示然后要求模型预测下一个最可能的令牌单词。它基于过去的输入做出这个预测并且这个过程反复进行一个接一个地令牌一个接一个地单词直到它吐出你的帖子
自我关注的可扩展性挑战
在底层我们使用的是Transformer架构其关键特性是每个令牌都知道每个其他令牌。这种方法被称为自我关注。一个后果是你的文本越长——或上下文越多——需要的数学运算就越多。
不幸的是自我关注的规模呈二次方增长。如果你想让模型预测第100个令牌它需要做大约10,000次操作。如果你想让它预测第1,000个令牌它需要做大约1,000,000次操作。
起初这听起来像是坏消息。然而我们可以使用一些巧妙的方法来规避这个二次方规模问题。在我们讨论如何解决它之前我们需要讨论为ChatGPT提供动力的基础设施。
3. GPU的重要性
GPU图形处理单元是ChatGPT及其构建的API的生命线。GPU的极度短缺、它们的怪癖和成本主导了我们的运营和扩展方式。
为了铺垫让我介绍一下我们使用的一种GPU。 NVIDIA H100。NVIDIA H100。它配备了特殊的高带宽内存HBM每个GPU都附加了HBM内存。GPU之间可以通过一种高带宽互连叫做NVLink进行通信它们可以通过一种特殊的以太网替代品叫做Infiniband与外界通信。我们在单个节点中打包了8个这样的GPU。Nvidia销售了一种类似的配置称为DGX H100。对我们来说每一点增加的计算或带宽直接影响ChatGPT用户体验。
4. 五大扩展挑战 有很多关于GPU的扩展挑战需要讨论。我们关注的是
#1GPU RAM和KV缓存
#2批量大小、操作字节比和算术强度
#3衡量正确指标的重要性
#4在任何地方寻找GPU
#5缺乏自动扩展
在我们扩展ChatGPT时理解这些是至关重要的。让我们深入了解
挑战#1KV缓存和GPU RAM 我们的一个大挑战是自我关注的规模呈二次方增长这意味着我们生成的令牌越多我们需要的操作就越多大约对于第100个令牌是~10,000次操作但对于第1,000个令牌是大约1,000,000次。我们如何提高性能
一个初始的解决方法是缓存我们为所有先前令牌所做的数学运算即KV缓存。我们在我们的机器学习ML模型中使用注意力机制。有了这个模型我们使用三个向量
Q与我们包含的内容相关
K与我们用作输入到输出的内容相关
V学到的向量计算的输出
我们可以缓存K和V因此得名“KV缓存”。然而我们不能缓存Q因为这个向量每次都会改变。
我们必须将KV缓存存储在GPU RAM中。这是因为在GPU RAM中移动数据的速度大约为3TB/秒当我们使用高带宽内存HBM时。然而如果我们将数据通过PCIe总线PCI Express一种高速总线标准常见于主板上用于数据传输推送我们得到的速度大约为30GB/秒。使用HBM的速度大约快两个数量级大约100倍
为什么HBM这么快它是通过堆叠层与GPU物理绑定的拥有数千个引脚用于大规模并行数据吞吐量。
这种GPU HBM RAM非常昂贵且相当有限。大多数HBM RAM也用于保存模型权重。就像任何缓存一样当它填满时我们通过“过期”最旧的数据来释放空间。
“缓存未命中”对我们的用例来说非常昂贵。缓存未命中是指系统尝试从缓存中检索数据——比如KV缓存——但没有缓存任何内容的事件。通常是因为我们不得不“过期”这个值并将其从我们的HBM内存中踢出来以释放空间。如果发生缓存未命中我们需要重新计算整个ChatGPT对话而且我们处于第1,000个字符所以那可能更接近1,000,000次操作
我们的基础设施在用户之间共享GPU RAM。这意味着作为用户如果你的对话闲置时间过长你的对话可能会从系统GPU缓存中被逐出因为我们需要为其他对话释放空间。
这种缓存方法有几个含义
GPU RAM是最宝贵的商品。实际上GPU RAM而不是计算资源是LLM操作最常见的瓶颈。
缓存未命中率非常重要缓存未命中是指系统尝试从缓存中检索数据——如KV缓存——但没有缓存任何内容的事件。缓存未命中对GPU工作量的影响是巨大的非线性的。缓存未命中率越高GPU需要做的工作就越多呈二次方而非线性。
这意味着在扩展ChatGPT时没有一些简单的CPU利用率指标可以查看。我们不得不关注KV缓存利用率以及如何最大化GPU RAM。
挑战#2优化批量大小 批量大小是扩展ChatGPT时需要平衡的第二个指标。粗略地说批量大小是我们通过GPU运行的并发请求的数量。H100 GPU最多可以在一秒钟内将3.35TB的RAM移动到其寄存器中。GPU寄存器是快速的片上内存存储计算核心将要执行的操作数。在数据移动到寄存器的同一秒钟内H100可以乘以1.98千万亿个8位浮点数。让我们将这1.98千万亿次操作除以移动的3.35TB数据H100可以在移动1字节所需的时间内执行591次浮点运算。H100的操作字节比为591:1。如果你要花时间移动1GB你应该至少每秒执行591亿次浮点运算FLOPS。如果做得少于这个数值意味着浪费了GPU FLOPS。然而如果你做得更多你就在等待内存带宽。在我们的模型中我们移动的内存量相对固定大约是我们模型权重的大小。通过调整我们的批量大小我们对这个过程有一定的控制这改变了涉及的数学计算量。
在扩展ChatGPT时我们需要充分“饱和”GPU这意味着监控我们的批量大小以便我们有正确的FLOPS这样GPU就不会因为计算而未被充分利用也不会因为等待内存带宽而过度利用。
实际上要真正维持盒子上打印的flop数字是几乎不可能的。我们可以使用数学来接近但在生产中需要大量实验来微调一切。
挑战#3衡量正确的指标 批量大小和KV缓存利用率的组合是我们关注的主要指标。这是我们用来确定服务器负载的两个数字。我们并没有一开始就得到这个指标花了时间才发现它对我们最有效。最初我们有一个类似于标准CPU利用率指标的更简单的gpu利用率指标。然而它证明是误导性的因为简单的利用率只说明了GPU在一个时间段内是否在进行数学计算。它没有告诉我们
我们是否已经饱和了算术强度浮点运算与总数据移动量的比率FLOPS/字节。基本上GPU利用率没有告诉我们我们是否在计算上未被充分利用或者是否被内存饿死。
我们是否正在耗尽KV缓存。这是一个问题因为有了KV缓存未命中GPU需要进行更多的计算来计算未缓存的结果。
还有其他瓶颈。KV缓存和批量大小并不是我们发现的唯一瓶颈。在现实世界中我们遇到了来自
内存带宽GPU之间的网络带宽节点机器之间的网络带宽
……只是列举了三个
让情况变得更复杂的是瓶颈的位置经常变化。例如要求ChatGPT总结一篇论文与要求它写一篇论文的性能特性截然不同。我们不断调整LLM变压器模型架构的特定细节这些变化会影响瓶颈出现的地方。
在LLM的问题空间中你会遇到的约束的变化范围出奇地广泛。这使得我们难以解决问题也使得芯片制造商难以设计出能够实现最佳平衡的芯片。
例如NVidia的新H100芯片是A100芯片之后的一代。H100在计算即FLOPS上增加了大约6倍而内存大小保持不变内存带宽只增加了1.6倍。由于我们经常受到内存的限制FLOPS和成本的戏剧性增加往往未被充分利用。
事实是像NVIDIA H100这样的顶级芯片今天的设计是几年前就锁定的。当H100芯片设计时NVIDIA无法知道内存的重要性的发现因为未来的架构很难预测。最近宣布的H200芯片增加了内存然而该行业花了一段时间才更好地理解这些独特的瓶颈以大规模运行LLM。
挑战#4在任何地方寻找GPU 与GPU相关的另一个挑战是在哪里找到它们我们的公司——以及整个AI领域——的增长速度远远超过了供应商如NVIDIA或完整的TSMC供应链可以生产GPU的速度。对于像半导体和数据中心这样复杂的供应链瓶颈会发生在许多地方。
一种解决方案是从我们能找到的任何地方获取GPU。我们使用Microsoft Azure作为我们的云提供商它在许多不同的地理区域和数据中心都有GPU。因此我们很快就发现自己遍布全球的许多地区。
从第一天起我们的小团队被迫采取多区域、多集群和全球分布的做法。我们的kubernetes集群很快就从被视为宠物转变为更像牲畜。
一个平衡良好的GPU舰队比分配附近的GPU更重要。对于ChatGPT来说响应时间的最大瓶颈是GPU可以多快地逐个输出令牌。这意味着GPU地理位置靠近最终用户的优先级较低因为网络请求的往返时间影响较小而GPU“随时准备好”更重要。我的职业生涯教会了我计算在边缘的重要性出于延迟原因。这对于这些工作负载来说不太相关尤其是在GPU如此受限的情况下。
挑战#5无法自动扩展 最后一个主要挑战是无法扩展我们的GPU舰队。简单地说就是没有更多的GPU可以购买或租用因此没有GPU可以自动扩展到。获得GPU的困难持续到今天看起来没有缓解的迹象。需求的指数当前看起来比供应的指数大。不仅有更多的用户而且更大的模型需要更多的计算新技术如代理每个用户需要大量更多的计算。
所以如果你看到ChatGPT的“我们已满载”消息这是一个正确的陈述这意味着我们没有地方可以扩展因为我们当时已经利用了所有的GPU。
不幸的是像GPT-4这样的模型需要如此多的计算以至于GPU目前是我们唯一的选择以便在规模上提供我们的服务。普通CPU将慢几个数量级。
5. 学到的经验
扩展ChatGPT当然不是你平均的软件工程扩展问题。然而它一直是工程扩展的速成课有很多经验可以在其他情况下应用。这里是我们学到的关键经验。
在早期扩展中森林和树木都很重要。低级细节树木如KV缓存优化和CUDA内核与更高级别的系统细节森林一样重要例如全球数据中心战略。我们团队在堆栈中跳跃的能力——从GPU的最低级别一直到产品决策——是至关重要的。
以一种适应性的方式考虑系统的约束。在加入OpenAI之前我习惯于做一些事情如
调整系统以达到大约80%的CPU利用率指标——通常被认为是“好的”。一旦达到这个指标就坐下来而该指标保持不变。
自动扩展到一个“无限大”的云意味着总是可以配置更多的机器。
优先考虑边缘计算将其移动得非常靠近用户以减少往返请求的延迟并改善用户体验。
在OpenAI这些做法都不适用我们需要提出新的方法这些方法既实用又易于衡量和扩展。
而且就在我们弄清楚有效的东西时模型架构会发生变化或者会提出一个新的推理想法或者产品决策会改变系统的使用方式。因此我们需要一次又一次地适应。
深入挖掘。在我们运作的问题空间中最低级别的实现细节真的很重要。将ChatGPT视为一个“黑盒”它将文本作为输入并在另一端吐出稍微聪明一些的文本这很诱人。然而越多的人深入到“黑盒”究竟如何工作的最小细节我们就越能成为一个更好的团队和产品。
这还只是早期。挑战的规模只会增长。随着从GPT-2、3到4的每一次跳跃我们需要完全新的方法来训练和运行模型以实现规模。这将在未来的版本中继续。我们所有的新模式如视觉、图像和语音都需要重新架构系统同时解锁新的用例。
OpenAI的发展速度——以及整个生态系统——正在加速。我们将看到下一个10倍规模的挑战是什么
ChatGPT的工作方式并不神奇值得了解。像大多数人一样我第一次尝试ChatGPT时的反应是它感觉很神奇。我输入了问题并得到了感觉像是来自人类的答案ChatGPT在处理人类语言方面做得非常出色并且可以访问比任何一个人都多的信息。它在编程相关的问题上也很擅长有一段时间我怀疑ChatGPT是否可以在编程等领域比人类更有能力直到现在
为了了解ChatGPT的局限性你需要了解它是如何工作的。ChatGPT和其他LLM不会像人类那样“思考”和“理解”。然而ChatGPT确实会根据下一个最可能的单词是什么根据输入和到目前为止生成的所有内容来生成单词。
在关于ChatGPT如何工作的一篇精彩深入文章中WolframAlpha的创造者Stephen Wolfram总结了ChatGPT
“ChatGPT的基本概念在某种程度上相当简单。从网上、书籍等处获取大量人类创建的文本样本。然后训练一个神经网络生成“类似于此”的文本。特别是让它能够从一个“提示”开始然后继续输出“像它所训练的那样”的文本。
正如我们所看到的ChatGPT中的实际神经网络由非常简单的元素组成——尽管有数十亿个。神经网络的基本操作也非常简单基本上由将输入派生自到目前为止生成的文本“一次通过其元素”没有任何循环等的每一个新单词或单词的一部分生成。但令人惊讶的是——出乎意料的是——这个过程可以产生成功地“类似于”网络、书籍等上的文本。
ChatGPT的具体工程使其相当引人注目。但最终至少在它可以使用外部工具之前ChatGPT只是从它积累的“常识统计”中提取出一些“连贯的文本线索”。但结果的人类化程度令人惊叹。”
扩展ChatGPT的工程挑战是可以理解的。当扩展一个系统时这些是常用的技术
通过交换内存以节省重复的、昂贵的计算操作记忆化反之亦然如果内存不足且有大量未使用的计算使用计算来节省内存购买更多硬件以横向扩展找出要衡量的正确事物并进行改进使这些指标朝着正确的方向发展冲洗并重复
OpenAI的工程团队采用了所有这些技术来扩展该产品。
一些扩展挑战可以简化为解决一个数学问题。在挑战#2中——优化批量大小——解决最大利用率的问题归结为在操作和内存带宽之间进行最大化。一旦你知道了操作和内存带宽的值这就成了一个优化练习。
当面临优化效率的挑战时可以从这种方法中汲取灵感。弄清楚你的系统的特性——吞吐量、延迟、CPU利用率、内存利用率和其他相关值——并弄清楚改变一个将如何改变另一个。更高的CPU利用率使用更少的机器意味着什么每台机器增加或减少内存会怎样等等。
即使是OpenAI也在努力寻找GPU硬件。大型语言模型需要大量的计算GPU芯片是这种用例最适合的硬件。今天NVIDIA的H100——一种高性能GPU——是大多数投资大量AI的公司的硬件选择。
对H100的需求超过了供应尤其是像Meta这样的公司在获取它们上花费了巨额资金。我们最近报道了Meta希望到2024年底拥有350,000个H100单位。
尽管与Microsoft有着强大的合作伙伴关系并拥有大量资金OpenAI也面临着获取足够GPU的挑战。
NVIDIA应该从需求中获得巨大利润但我们可以期待其他玩家加大力度设计芯片与之竞争。实际上Meta正在构建自己的定制AI芯片AWS也是如此。主要芯片制造商也没有闲着AMD在2023年12月推出了MI300X处理器早期基准测试显示其性能优于H100。Intel正在开发Gaudi3处理器旨在与H100竞争并计划在2024年晚些时候推出。
尽管有新GPU进入市场但扩大大规模生产还需要更多时间。AI领域的公司可能在未来一两年内仍然可以预期GPU的稀缺。
由于硬件稀缺而导致的工程挑战往往会导致巧妙的解决方案。今天由于云提供商的存在几乎没有软件工程师熟悉硬件稀缺因为没有计算或存储容量的短缺。如果需要更多的CPU或存储问题是它将花费多少而不是是否有容量可用。
同时我们之前也看到了行业范围内硬件稀缺的挑战。这样的约束促使工程师提出巧妙的效率胜利。例如虚拟化诞生于更好地利用硬件资源的努力正如我们在《现代后端实践的过去和未来》中所涵盖的那样。
我希望看到OpenAI等公司因必要而产生的更多巧妙解决方案这将导致即使是更复杂的AI应用也需要更少的计算。我对应用AI应用带来的未来感到兴奋但希望实用的AI应用不需要消耗比当前计算基础设施多几百倍的能源来运行的计算基础设施。计算机是高效的机器可以用相对较少的能源完成大量工作。希望我们保持这种方式即使在构建更好、更有能力的AI应用的竞赛中也是如此。