XLA(Accelerated Linear Algebra)是 Google 提出的一个神经网络编译器,能够用于加速 AI 模型的练习和推理。MegEngine 1.13.1 中也现已支撑了 XLA,在练习模型时能够挑选敞开此项功能,不同的模型能够获得 10%~80% 不等的速度提高。

首要的目标场景

MegEngine 现在是动态履行的,即 python 中每一个 mge.functional 的调用都对应着底层 gpu 上的一次 kernel 履行。这种模式的好处在于实践的履行方法与代码逻辑共同,所见即所得,十分的灵敏;不过其问题是难以优化,功能可能不是最优。

而 XLA 采取静态履行的方法,会将模型核算进程表达到一张静态核算图,称为 “HLO” (High-Level Optimized)。HLO 中包括核算图的相关操作,张量的数据流程和形状等信息。XLA 随后会对 HLO 进行一系列的优化,并终究生成一个更优的核算图,从而更快的完成核算。而 XLA 的局限性就在于不够灵敏,对于 Tensor Shape 改变或者操控流等信息无法很好的表达。

现在 MegEngine 中现已支撑了 XLA,模型练习中一些比较静态的场景,咱们能够运用 XLA 来进行加速,从而缩短整个练习进程的时刻。

运用方法与效果

在运用 MegEngine 进行练习时,能够通过对原来的练习函数添加 xla_trace/partial_trace 装修器来启用 XLA 编译优化。

当整个模型是彻底静态时,咱们能够运用 xla_trace 将整张网络表达到一张静态图,然后交由 XLA 做后续的优化编译,后续的履行进程将履行这张优化后的核算图提高速度。

而如果咱们模型中有一些动态性,比方练习进程中一些 Tensor Shape 会发生变化,亦或者是存在操控流,咱们能够运用 partial_trace,将网络中静态的部分 trace 成一些子图并分别交给 XLA 进行编译优化,而网络中其他部分仍然坚持动态履行,同时保证功能与灵敏性。

下面展示了在 MegEngine 中,XLA 功能敞开前后,干流的神经网络模型功能变化。其间蓝色为 XLA 敞开之前的练习速度,橙色为 XLA 敞开之后的练习速度。在敞开 XLA 后,大部分模型的功能能够获得 10%~40% 的提高,最多能够超过 80%。

MegEngine 正式支撑 XLA 啦!

关于 xla 的更多信息及具体的运用方法能够参阅 www.megengine.org.cn/doc/stable/…

更多 MegEngine 信息获取,您能够:检查文档、和GitHub 项目,或参加 MegEngine 用户交流 QQ 群:1029741705。欢迎参与 MegEngine 社区贡献,成为Awesome MegEngineer,荣誉证书、定制礼品享不断。