草庐IT

揭秘倚天实例背后的硬核实力

阿里技术 2023-07-30 原文

2022云栖大会,阿里巴巴宣布自研CPU倚天710已大规模应用,阿里云未来两年20%的新增算力将使用自研CPU。11月15日,倚天710云实例上线并正式进入大规模应用阶段,现已应用于阿里巴巴集团核心业务,并服务科学研究、智能手机行业和多家知名互联网公司。

云栖大会“倚天开启云原生算力新时代”专场上,阿里云弹性计算团队带来技术演讲,为大家揭秘ECS倚天云实例背后的硬核技术。

算力需求暴涨、摩尔定律失效

当前,企业云上业务需求正在大幅增长,算力需求呈“爆炸式”递增。

直播/短视频行业每天有上亿用户产出UGC(User-Generated Content)视频内容发布在不同平台,产生百万核级视频编码算力需求和高业务成本。基因/制药行业涉及到的分子动力学模拟、基因序列对比、蛋白结构分析,原来以实验为主,今天以计算机模拟为主,从原子-分子单位的行为进行计算,需要消耗大量的算力。电商行业从流量为主转变为精益化运营过程中所需的AI推理、大数据画像,智能精准推荐对算力的需求也越来越旺盛。以AI为代表的算力规模每三个半月就会翻一倍。

然而,在算力需求暴涨的同时,摩尔定律演进速度却在减慢,硬件技术进步的红利见底。如今,每迭代一代CPU,服务器和数据中心的功耗和成本攀升,每千瓦芯片功耗在生命周期内带来上万美金的成本,硬件和芯片的成本在逐代上涨。

在面向多租户的云场景下,面对一些高密计算任务,共享内存与物理核的机制导致租户之间处理任务可能需要相互排队,导致性能大幅下降,或者互相干扰的情况导致性能波动。

如何能在实现高性能(减少干扰)的同时实现低功耗、低成本?我们认为,以此前的技术方案,无法解决业务需求和痛点,需要设计一款云原生芯片,结合现有的阿里云软硬件架构,才能更好地解决客户应用的需求。

倚天710利剑出鞘:高性能、低功耗

云原生处理器倚天710、云计算基础设施处理器CIPU、云原生应用优化方案ECS Booster等不同弹性计算产品架构层面,皆是让我们实现高性价比高能效比的成功要素。那么,倚天710处理器在设计方面带来了哪些优势?

从芯片层面看,主要影响应用性能的四大要素包括ALU(逻辑计算单元)、Cache、主频、加速指令。

首先,倚天710 单颗CPU即实现了128核的高密度设计,高规格实例可以实现线性的性能增长;同时处理器无超线程概念,避免了性能争抢的问题:独享物理核,性能更强劲;独享Cache,应用缓存更高效。

传统CPU架构是两个vCPU/HT共享一个物理核,1份ALU。ECS倚天实例采用的是独享物理核心方式,这可以让算力密集的计算指令不必排队、不必争抢,计算速度更快。

在Cache维度,过去两个vCPU/HT共享一二级缓存,相互争抢,性能波动较为严重。采用倚天CPU独享Cache的设计,让vCPU之间相互不影响,为重负载计算带来更高性能。

影响算力性能的关键因素,除了核的资源,还有主频。

大家知道为什么多数Web、App、DB的生产业务CPU使用率的安全水位线是50%,日常水位低于30%吗?

以下图中的视频编码为例,并发超过4路后,性能下降40%;再加上前面说到的核争抢问题,如果客户的实际业务超过50-60%水位,关键生产应用将响应放慢,客户感知卡顿甚至超时问题。因此需要将CPU使用率安全水位压低,牺牲成本保证安全,浪费了另外50%资源。

背后的原因是功耗大,高算力负载很容易造成功耗过大,温度上升,因此采用降频规避,进而影响了性能。而倚天710的功耗仅为主流CPU的1/6,没有任何降频问题。倚天的安全水位可以提高到70-80%,减少资源浪费。

在云上多租户共用平台,即使用户运行低负载应用,也存在相互影响的风险,倚天彻底解决了此问题。下图展示的案例就可以看到,在视频编解码四路以上时,代表倚天的橙色部分基本保持恒定,其他主流CPU则会降低幅度40%。

值得一提的是,倚天710还针对特定算法场景进行了加速与优化。比如像NEON、SVE等矢量计算技术,可以让单条指令处理更长的数据,可以大幅提升机器学习、视频编码和高性能计算等场景性能;另外,倚天实例还支持BF16和INT8,在机器学习场景下,大幅提升计算效率,为客户提供更多选择。

倚天加持全场景性能大幅提升

11月15日,倚天实例(ECS G8y)已正式上线,产品规格覆盖1-128核,全面搭载eRDMA加速能力,可以大大提升软件性能。

倚天实例有着性能卓越、生态丰富,绿色降本三个方向的业务价值,其中关于性能收益及增长方面有着很好的数据表现。

我们从Web、App、Media、DB、大数据、科学计算、AI推理等几个最广泛场景来看产品性能表现。

■ Web场景:综合性能提升30%

Web场景是互联网中应用场景最多、消耗服务器资源最多的场景。为了解决移动场景流量和体验问题,服务端常常采用网页压缩方案节约带宽。但压缩算法非常消耗CPU算力和时间,导致队列中多客户请求时延变长。

倚天拥有独立CPU物理核,结合SVE指令加速,单vCPU数据压缩性能翻倍,前面提到的体验影响减半。Web场景包括Nginx、Apache、NodeJS、PHP等排名靠前的应用,倚天实例对比阿里云G7系列实例,综合性能提升30%左右。

阿里云防火墙CFW已经实现倚天ECS迁移。CFW为客户业务提供安全防护,需进行大量正则表达规则进行扫描,消耗大量算力,影响业务性能。采用独享物理核的ECS倚天实例,实现安全和体验收益兼得。在不同正则匹配性能优势分别为23%、40%、28%。

■ App编程语言性能:多数性能提升40%

不管是编译型语言C、Go等还是无需编译的语言Java、Python等,都很好的平滑兼容ARM架构,我们可以看到,使用开源的Benchmark进行测试,应用运行在ECS倚天实例上获得的性能提升多数有40%。

■ 编解码场景:20-40%性能提升

短视频和直播是如今最火热的应用,UGC时代内容指数级增长,编解码算力消耗也随之增长。如今最流行的H.264算法速度快,节约算力,但是编码后的文件更大,消耗更多存储和带宽。H.265可以很好解决此问题,使用比重快速增长,但多消耗1倍算力成本。

无论是在哪种场景下,倚天的视频编解码性能均比传统CPU实例更高,成本更低。

如图,上述两类视频编码规范的编码器X.264、X.265运行在ECS倚天实例上,都收获了20-40%性能提升;这个过程中我们进行了大量矢量指令优化,使性能大幅提高,优化软件可以向客户输出。

■ 数据库场景:10-30%性能提升

数据库场景下,运行在ECS倚天实例上,相较与G7实例,开源软件Redis、Memcached有30%性能优势,MySQL和PGSQL有10-20%性能优势。

阿里集团电商业务所使用的Tair数据库也已经迁移到倚天平台,协议上兼容Redis,性能是开源Redis数据库的3倍。Tair支撑了多年天猫双11大促,有强大的缓存能力,需要把数据缓存到内存,消耗Memory资源。我们采用倚天强大的算力优势进行数据压缩,让内存成本降低60%,叠加倚天实例自带的eRDMA加速能力,可以提升吞吐量80%,时延降低15%以上。目前基于ECS倚天实例的Tair产品已经上线,大家可以在云上使用。

■ 大数据场景:20-60%性能提升

在需要消耗大量IO、大量计算以及高内存带宽的大数据场景中,ECS倚天实例由于拥有独立物理核、Cache更大、网络时延更低等特点,运行Spark应用性能收益20%以上,搜索Elastic Search和流计算Flink场景性能收益达到40%和60%。上述大数据开源软件,直接编译即可在倚天实例上运行,欢迎大家试用。

■ AI推理:性能提升1倍

AI场景算力消耗增长飞快,成本占比急剧上升。推理场景下典型的搜推广客户都无法接受下调精度(影响模型准确度)降本。阿里云弹性计算团队和达摩院合作,推出了HIE-Engine动态量化方案,利用倚天实例的INT8加速能力,可将RestNet和Bert场景性能提升1倍,且精度没有损失。

降低碳排放、降低成本

对于企业客户来说,除了业务性能表现,IT碳排放和成本也很重要的一环。今天的这款倚天处理器,可以在CPU负载30%的情况下,每vCPU功耗比降低6倍,整机功耗降低60%以上,碳排放也等比降低。全国IDC年耗电量约2000多亿度,采用倚天实例进行替换,可以省下50%电量。

除了绿色低碳,企业还能降低IT成本,大家可以看图中的定价,倚天实例对比最新一代主售实例定价是30%、23%、22%的降本幅度,将技术收益让利给客户。使用这款产品会获得更好的性价比。在前面提到的几大主要应用场景,平均性价比(性能÷价格)收益可达50-80%。

目前,ECS倚天实例已应用于阿里巴巴集团核心业务,阿里云产品中,RDS、容器、PAI、视频云等多款PaaS产品接入倚天ECS,同时已对外服务短视频、Web、游戏、广告等客户。2021 年双 11 期间,天猫双 11 核心交易系统平滑迁移至倚天 710 云实例,算力性价比提升30%;汇量科技广告推理业务使用倚天 710 云实例,性能和网络带宽双双提升,性价比提升 40% 以上。

有关揭秘倚天实例背后的硬核实力的更多相关文章

  1. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  2. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  3. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  4. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  5. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  6. ruby - 为什么当我调用类的实例方法时,初始化不显示为方法? - 2

    我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认

  7. ruby - 在 Ruby 中,在类方法的上下文中,什么是实例变量和类变量? - 2

    如果我有以下一段Ruby代码:classBlahdefself.bleh@blih="Hello"@@bloh="World"endend@blih和@@bloh到底是什么?@blih是Blah类中的一个实例变量,@@bloh是Blah类中的一个类变量,对吗?这是否意味着@@bloh是Blah的类Class中的一个变量? 最佳答案 人们似乎忽略了该方法是类方法。@blih将是常量Bleh的类Class实例的实例变量。因此:irb(main):001:0>classBlehirb(main):002:1>defself.blehirb

  8. ruby - 从外部访问类的实例变量 - 2

    我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内

  9. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  10. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

随机推荐