摘要:简要介绍XLA的工作原理及其在Pytorch下的使用。
XLA的全名是加速线性代数,该代数是加速线性代数。作为深度学习编译器,很长一段时间以来已经开发了Tensorflow框架的试验功能。自发布以来已经超过两三年了。随着Tensorflow 2.xfeatures的释放。此外,Pytorch社区还在大力促进Pytorch下的XLA发展。现在,它启动了Pytorch/XLA TPU版本,该版本仅支持Google Platform TPU。
当涉及到编译器时,您必须提及著名的llvm.llvm是一个编译器框架,该框架由C ++语言编写,包括一系列模块和可重复使用的编译工具。
LLVM框架的主要组成部分是:
1.前端:负责将源代码转换为中间表示
2.乐观主义者:负责优化中间代码
3.后端:使用可执行机代码生成模块
LLVM为不同语言提供了相同的指示LLVM IR的中间体,因此,如果我们需要开发一种新语言,我们只需要实现相应的前端模块即可。如果我们想支持新的硬件,我们只需要实现相应的后端模块,并且可以重复使用其他零件。
XLA还基于LLVM框架开发。前端输入是图形。前端并未直接将图形转换为llvm ir.fir.fir.fir,XLA的功能主要反映在两个方面:
1.及时
2. AHEDA的时间
无论哪个功能,它都有以下目的:
1.提高代码执行速度
2.优化存储和使用
此外,XLA还拥有大多数深度学习编译器的梦想:摆脱计算库的限制,自动生成运算符代码并支持对多匹配软件的良好移植性。
作为编译器,XLA负责优化由前端定义的计算图。如上图所示,XLA的优化过程可以分为两个方面,目标是无关的,并且目标相关优化之间。步骤,计算图的中间表示形式为HLO,即高级优化器(高级优化器)。XLA使用此中间表示形式表示优化的计算图。它有自己的语法和语义。在这里没有详细的介绍。
首先,让我们看一下XLA在计算图上的作用。以下是一个简单的计算图
在这里,我们假设XLA仅支持matmul并添加。xla可以通过图表优化方法找到适合通过JIT编译的区域
XLA将该区域定义为群集,是独立的JIT汇编单元,计算图由节点属性标记
然后,另一个图优化方法将群集转换为TensorFlow的功能子图。请在原始地图上使用呼叫者节点,以表示本函数在原始图片中的位置
最后,调用TensorFlow图形优化方法(buildXlaops),然后将函数节点转换为特殊的XLA节点。
在TensorFlow运行时,运行到XLACOMPILE时,请编译XLA群集子famin,然后传递汇编的可执行文件,然后通过Xlaexececutableclosure将其传递到Xlarun。
然后根据虚拟说明分配GPU流和视频记忆,然后IREMITTER将HLO图转换为LLVM IR在编译器中间表达的GPU内核。本文,NVPTX的表达式(NVIDIA定义的虚拟基础指令表达式)的表达由LLVM生成,然后Cubin可执行代码由NVCC生成。
JIT,动态(即时)编译,运行时编译;AOT,是指在运行之前进行编译。这两种汇编方法之间的主要区别是它是否在“运行”中编译。对于AI培训模型,AOT模式具有更大的性能优势。具体过程如下:
对于大多数AI模型,培训过程通常不会改变,因此,当实施过程中省略训练时,使用AOT模式可以大大提高训练速度。
创建XLA张量:Pytorch/XLA将新的XLA设备类型添加到Pytorch。工作类型类型与普通Pytorch设备的类型相同。例如,以下是创建和打印XLA::
此代码应该看起来很熟悉。Pytorch/XLA使用与常规Pytorch相同的接口,但添加了一些内容。ImportTorch_xla初始化的pytorch/xla,xm.xla_device()返回当前的XLA设备。这可能是ACPU或GPU,这可能是A CPU或GPU,在您的环境上。
XLA的数量是Pytorch:Pytorch操作可以在XLA上执行,就像CPU或CUDA卷一样。例如,可以添加XLA的数量:
XLA设备运行模型:构建新的Pytorch网络或将现有网络转换为XLA设备,仅需要在XLA中进行一些特定的行。在此阶段,官员仅支持JIT模式。图片在单XLA设备的官方版本上运行EJILE段
该代码可以查看在XLA上切换模型的容易性。模型定义,数据加载器,优化器和训练周期可以在任何设备上工作。唯一的特殊代码是为XLA设备获得多个代码,并标记步骤。张量运行懒惰。因此,仅记录在图形中。在需要结果之前,请调用Xmark_step()执行运行结果的参数并更新模型。
本文分享了华为云社区中的“ XLA优化原则简介”,作者:先锋01。