jjzjj

亚马逊云科技:云端算力,如何带ChatGPT狂飙?

CC橙子呀 2024-06-27 原文

ChatGPT有多强?这取决于这个问题提出的时间。一个月以前,这可能还是个问题。但是,当ChatGPT连续创造纪录、并不断颠覆人们认知的现在,这已经不是个问题了。真正的问题是,ChatGPT如何变得这么强?

有人做过统计,ChatGPT需要超过1万颗A100 GPU提供算力支持,单次训练成本超过400万美元,每天成本超过10万美元。「算力」,再一次被推到所有人眼前,但其实这并不是一个新概念。

顾名思义,算力指的就是计算的能力。如果你从来没听说过这个词,或许可以把它等价成A100的数量。但很多人还没意识到的是,算力已经像水、电、气一样,成为了我们现代社会不可或缺的关键基础资源。

也正是因为看到算力的重要性,包括亚马逊微软谷歌阿里腾讯在内的这些国内外的顶级科技巨头,已经早早地把业务重点转向云计算了。而云计算的本质,就是希望能像自来水一样,为用户提供源源不断的算力。拧开水龙头就会出水,插上电源就会有电,未来接上算力网络,就能使用云端的大量算力。

                 云厂商为何要自研芯片

云计算领域的一个重要趋势,就是这些云计算和互联网大厂都在纷纷自研芯片,包括亚马逊云科技、微软、阿里云都是如此。他们并不是在玩票,而是把自研芯片作为自己的核心竞争优势和主要的差异化。

要说清楚为什么云厂商要自研芯片,就要首先看一下云计算里的一个「不可能三角」,也就是说在云计算里,性能、成本、安全性,这三点不可同时兼得。如果既要又要,就不能还要。比如,追求高性能和低成本,那安全性就要妥协;追求低成本和高安全,那就很难做到高性能;如果既要高性能又要高安全,那成本肯定低不了。

不可能三角出现的本质原因,就是市面上的那些通用软硬件并没有针对特定场景做优化。比如CPU厂商提供的处理器芯片,并不是专门为了某个云厂商的实际应用专门设计的,那么在核心数量、主频、缓存大小,以及软件的并行性支持和应用开发上,肯定不会优化得那么深入。这就像去商店买的公版的衣服或许也不错,但肯定不如裁缝量体裁衣来得合适。

于是,这些财大气粗的互联网和云计算大厂,就纷纷开始下水自己做芯片了,而亚马逊云科技,应该算是最早吃螃蟹的那个。

         Nitro:亚马逊云科技的基石芯片

Nitro是亚马逊云科技自研芯片的起点,从2013年推出首颗Nitro芯片起,它已经经历了4代迭代,并且已经成为驱动当今所有EC2实例的基础性技术。我们先介绍下Nitro的技术特点,然后来看看这次大会上发布的最新一代Nitro v5芯片。

从广义上来说,Nitro并不是单独的芯片本身,而是由多个芯片和板卡组成的基础架构,可以实现存储访问、加密、监控、实例配置等等几乎所有的工作。对于云计算、特别是公有云来说,Nitro最重要的意义就是帮助CPU减负。也就是说,它能把数据中心里的「网络」「计算」「存储」这些基本功能都从CPU里卸载出来,从而释放CPU宝贵的内核资源。专用的Nitro卡可以实现高速网络、高速EBS和I/O加速,不需要在CPU上运行额外的管理软件。

 同时,Nitro系统还能虚拟出来一个统一的用户接口,不管底层硬件用的是x86 CPU、ARM CPU,甚至是苹果的Mac硬件,对于用户来说都没有区别。这种软硬件的解耦,就极大地释放了软硬件设计的灵活性,让二者不会相互掣肘,这也是亚马逊云科技能大规模部署基于ARM架构处理器的本质原因。

当然,Nitro出现的本质原因还是基于安全性的考虑,这也一直是Nitro的核心功能之一。比如它会阻止主机之外的任何系统登录或读取基于Nitro的实例内存,从而在硬件层面直接保障安全性。

也就是说,Nitro的核心设计理念,就是为了很好地平衡前面说到的那个云计算「不可能三角」,它并不是为了追求单个领域的极致,而追求的是三个重要因素很好的平衡。

去年底,亚马逊云科技召开了一年一度的re:Invent大会,并发布了最新的Nitro v5芯片,重点聚焦在通信带宽的提升:PCIe带宽提升2倍、DRAM速度提升50%、数据包处理速度提升60%、通信延时降低30%。和前一代相比,Nitro v5的晶体管数量增加一倍,并由此带来每瓦性能40%的提升。

 事实上,大会上并未公布Nitro v5的架构细节和制造工艺,但这对于用户来说可能并不重要,毕竟用户不会单独购买或者使用Nitro本身,它已经作为每台EC2服务器的基础设施而存在了。有了Nitro的高性能和虚拟化功能的加持,也给用户提供了更多的计算实例。在2022年初,EC2实例有400多款;经过一年的发展,已经超过600款。这就让算力的供给更加快速和灵活。

           Graviton3E:一切为了高算力

除了Nitro,亚马逊云科技还有一个看家芯片,那就是基于ARM架构的服务器CPU芯片Graviton。

很多人认为,和x86架构相比,ARM架构不适合用于数据中心或者高性能计算领域。但事实上,决定性能的并不是指令集,而是微架构。Graviton系列处理器不仅能取得高性能、更能兼顾ARM架构低功耗的优势,从而实现更好的「性能功耗比」。和x86实例相比,基于Graviton3的实例能取得高达60%的每瓦功耗提升。

 在去年的re:Invent大会上,并没有发布第四代Graviton芯片,但在第三代的基础上增加了对高性能计算的优化。具体来说,就是特别优化了对向量计算和浮点计算的支持。这也是ARM架构进一步进军HPC的重要尝试。要知道,性能在HPC领域只是重要因素之一,同样重要的还有功耗、成本、性价比。在这些方面,ARM架构无疑有着更大优势。再加上自研芯片的加持,通过大规模部署进一步摊薄成本,就会让性价比进一步提升。这些才是这些云厂商自研处理器芯片的本质动力。

              除了硬件,软件同样重要

云计算未来的发展方向,肯定是软硬件协同优化。就像木桶里不能存在短板一样,芯片和算力上去了,软件也不能拉胯。所以对于云厂商来说,芯片和硬件只是一小部分,剩下的主要部分,都集中在软件和系统层面的创新。

比如在协议层面,亚马逊云科技提出了新的网络协议SRD(Scalable Reliable Datagram),和TCP的单路径相比采用了多路径路由,并且可以乱序传输数据包,从而达到更高的吞吐量。

在服务层面,他们继续加码serverless,这也是全球云计算领域最近的最大热点。这个可以稍微展开说说。

Serverless「无服务器」这个概念最早出现在2012年左右,它的核心思想就是让开发人员不需要关注服务器的物理限制和资源管理这些底层细节,而是把重点放在服务和任务本身的开发,专注于构建产品和应用,让整个开发过程更加敏捷、成本更低。

Serverless给开发人员提供极大便利,但势必需要底层的硬件和基础设施的更好配合与支撑,这就极大考验云服务提供商的能力。亚马逊云科技在2006年就搭建了类似思路的Amazon S3存储服务。然后在2014年,发布了著名的Serverless计算服务Amazon Lambda,直到目前已经有超过百万用户、每月的调用请求量超过100万亿次。

在他们最新的产品中,针对erverless的冷启动问题推出一个名叫Lambda SnapStart的新功能。它在首次启动时会执行标准初始化,并且将内存和磁盘状态进行快照并缓存。当面对大量服务要进行初始化和扩展的时候,可以用SnapStart的快照机制实现直接启动,从而跳过初始化的过程,这样就极大提高了冷启动延时。根据大会上的数据,Lambda Snapshot可以将启动延时降低90%以上。

                    云计算的未来发展

云计算的未来发展,有两个大概率的趋势,一个是自研芯片仍然会是这些云计算大厂未来发力的重点,另一个是软硬件的协同优化也将不断获得更多关注。这些趋势的本质目的,就是为云计算的客户提供更强、更灵活的算力。

事实上,算力的「基础设施化」,也已经成为了未来发展的必然趋势。开头提到的「东数西算」,就是要建立全国一体化的算力网络,就像水网、电网一样,让算力网变得更加普及。

农业时代的标志是水的合理使用;工业时代的标志是电的广泛应用。现在通过云计算,已经在一定程度上实现了算力能像水和电一样能随用随取。但是如何获得性能更高、更安全、更节能的算力,仍然是云计算厂商和学术界不断探索的课题,一旦解决,或许就会开启人类社会的新时代。

用中国工程院院士孙凝晖的话说,算力时代是算力的基础设施化时代,是走向智能时代的必由之路。

有关亚马逊云科技:云端算力,如何带ChatGPT狂飙?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐