草庐IT

AI开发大一统:谷歌OpenXLA开源,整合所有框架和AI芯片

机器之心 2023-03-28 原文
在去年 10 月的 Google Cloud Next 2022 活动中,OpenXLA 项目正式浮出水面,谷歌与包括阿里巴巴、AMD、Arm、亚马逊、英特尔、英伟达等科技公司推动的开源 AI 框架合作,致力于汇集不同机器学习框架,让机器学习开发人员获得能主动选择框架、硬件的能力。

本周三,谷歌宣布 OpenXLA 项目正式开源。

项目链接:https://github.com/openxla/xla

通过创建与多种不同机器学习框架、硬件平台共同工作的统一机器学习编译器,OpenXLA 可以加速机器学习应用的交付并提供更大的代码可移植性。对于 AI 研究和应用来说,这是一个意义重大的项目,Jeff Dean 也在社交网络上进行了宣传。

如今,机器学习开发和部署受到碎片化的基础设施的影响,这些基础设施可能因框架、硬件和用例而异。这种相互隔绝限制了开发人员的工作速度,并对模型的可移植性、效率和生产化造成了障碍。

3 月 8 日,谷歌等机构通过 OpenXLA 项目(其中包括 XLA、StableHLO 和 IREE 存储库)的开放,朝着消除这些障碍迈出了重要一步。

OpenXLA 是由 AI / 机器学习行业领导者共同开发的开源 ML 编译器生态系统,贡献者包括阿里巴巴、AWS、AMD、苹果、Arm、Cerebras、谷歌、Graphcore、Hugging Face、英特尔、Meta 和英伟达。它使得开发人员能够编译和优化来自所有领先机器学习框架的模型,以便在各种硬件上进行高效训练和服务。使用 OpenXLA 的开发人员可以观察到训练时间、吞吐量、服务延迟以及最终发布和计算成本方面的明显提升。

机器学习技术设施面临的挑战

随着 AI 技术进入实用阶段,许多行业的开发团队都在使用机器学习来应对现实世界的挑战,例如进行疾病的预测和预防、个性化学习体验和黑洞物理学探索。

随着模型参数数量呈指数级增长,深度学习模型所需的计算量每六个月翻一番,开发人员正在寻求基础架构的最大性能和利用率。大量团队正在利用多型号种类的硬件,从数据中心中的节能机器学习专用 ASIC 到可以提供更快响应速度的 AI 边缘处理器。相应的,为了提高效率,这些硬件设备使用定制化的独特算法和软件库。

但另一方面,如果没有通用的编译器将不同硬件设备桥接到当今使用的多种框架(例如 TensorFlow、PyTorch)上,人们就需要付出大量努力才能有效地运行机器学习。在实际工作中,开发人员必须手动优化每个硬件目标的模型操作。这意味着使用定制软件库或编写特定于设备的代码需要领域专业知识。

这是一个矛盾的结果,为了提高效率使用专用技术,结果却是跨框架和硬件的孤立、不可概括的路径导致维护成本高,进而导致供应商锁定,减缓了机器学习开发的进度。

解决方法和目标

OpenXLA 项目提供了最先进的 ML 编译器,可以在 ML 基础设施的复杂性中进行扩展。它的核心支柱是性能、可扩展性、可移植性、灵活性和易用性。借助 OpenXLA,我们渴望通过加速人工智能的开发和交付来实现 AI 在现实世界中的更大潜力。

OpenXLA 的目标在于:

  • 通过适用于任何框架,接入专用设备后端和优化的统一编译器 API,使开发人员可以轻松地在他们的首选框架中针对各种硬件编译和优化任何模型。
  • 为当前和新兴模型提供行业领先的性能,也可扩展至多个主机和加速器满足边缘部署的限制,并推广到未来的新型模型架构上。
  • 构建一个分层和可扩展的机器学习编译器平台,为开发人员提供基于 MLIR 的组件,这些组件可针对其独特的用例进行重新配置,用于硬件定制化编译流程。

AI/ML 领导者社区

我们今天在机器学习基础架构中面临的挑战是巨大的,没有任何一个组织可以单独有效地解决这些挑战。OpenXLA 社区汇集了在 AI 堆栈的不同级别(从框架到编译器、runtime 和芯片)上运行的开发人员和行业领导者,因此非常适合解决我们在 ML 领域看到的碎片化问题。

作为一个开源项目,OpenXLA 遵循以下原则:

  • 平等地位:个人无论从属关系如何,都平等地做出贡献。技术领导者是那些贡献最多时间和精力的人。
  • 尊重文化:所有成员都应维护项目价值观和行为准则,无论他们在社区中的职位如何。
  • 可扩展、高效的治理:小团队做出基于共识的决策,具有清晰但很少使用的升级路径。
  • 透明度:所有决定和理由都应该对公众清晰可见。

OpenXLA 生态系统:性能、规模和可移植能力

OpenXLA 通过模块化工具链消除了机器学习开发人员的障碍,它通过通用编译器接口得到所有领先框架的支持,利用可移植的标准化模型表示,并提供具有强大的目标向和特定硬件优化的特定领域编译器。该工具链包括 XLA、StableHLO 和 IREE,所有这些工具都利用 MLIR:一种编译器基础架构,使机器学习模型能够在硬件上一致地表示、优化和执行。

OpenXLA 主要亮点

机器学习用例的范围

OpenXLA 当前的使用涵盖了 ML 用例的范围,包括在阿里云上对 DeepMind 的 AlphaFold、GPT2 和 Swin Transformer 等模型进行全面训练,以及在 Amazon.com 上进行多模态 LLM 训练。Waymo 等客户利用了 OpenXLA 进行车载实时推理。此外,OpenXLA 还用于优化配备 AMD RDNA™ 3 的本地机器上的 Stable Diffusion 服务。

最佳性能,开箱即用

OpenXLA 使开发人员无需编写特定于设备的代码,即可轻松加快模型性能。它具有整体模型优化功能,包括简化代数表达式、优化内存数据布局以及改进调度以减少峰值内存使用和通信开销。高级算子融合和内核生成有助于提高设备利用率并降低内存带宽要求。

轻松扩展工作负载

开发高效的并行化算法非常耗时并且需要专业知识。借助 GSPMD 等功能,开发人员只需注释关键张量的一个子集,然后编译器就可以使用这些子集自动生成并行计算。这消除了跨多个硬件主机和加速器对模型进行分区和高效并行化所需的大量工作。

便携性和可选性

OpenXLA 为多种硬件设备提供开箱即用的支持,包括 AMD 和 NVIDIA GPU、x86 CPU 和 Arm 架构以及 ML 加速器,如 Google TPU、AWS Trainium 和 Inferentia、Graphcore IPU、Cerebras Wafer-Scale Engine 等等。OpenXLA 还通过 StableHLO 支持 TensorFlow、PyTorch 和 JAX,StableHLO 是一个用作 OpenXLA 输入格式的可移植层。

灵活性

OpenXLA 为用户提供了手动调整模型热点的灵活性。自定义调用等扩展机制使用户能够用 CUDA、HIP、SYCL、Triton 和其他内核语言编写深度学习原语,从而能够充分利用硬件特性。

StableHLO

StableHLO 是 ML 框架和 ML 编译器之间的一个可移植层,是一个支持动态、量化和稀疏性的高级运算(HLO)的运算集。此外,它可以被序列化为 MLIR 字节码以提供兼容性保证。所有主要的 ML 框架(JAX、PyTorch、TensorFlow)都可以产生 StableHLO。2023 年,谷歌计划与 PyTorch 团队紧密合作,实现与 PyTorch 2.0 版本的整合。

有关AI开发大一统:谷歌OpenXLA开源,整合所有框架和AI芯片的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  4. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  5. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  6. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  7. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  8. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  9. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

随机推荐