首页 > 编程语言 >机器学习编译(二):张量程序抽象

机器学习编译(二):张量程序抽象

时间:2023-07-22 12:22:44浏览次数:31  
标签:函数 张量 编译 抽象 计算 操作 tensor

元张量函数 (primitive tensor function)

一个模型的执行包含 tensor 和 primitive tensor function,后者是定义 tensor 之间的计算步骤的函数(通常也叫 op,不过这里的范围更广,还包括 Module 等)。

../_images/primitive_tensor_func.png

上面的 linear、add、relu、softmax 都是元张量函数。

框架通常都会实现常见的计算操作,这些操作通常也会有 C++ 实现(更加高效):

../_images/tensor_func_abstractions.png

机器学习框架对模型编译的时候会把一些计算操作做一些优化,比如下面的例子,对于 0 ~ 127 的计算可以由单核处理器完成,但是考虑到计算之间的独立性,可以由 4 核处理器并行计算,这样大概能得到 4x 的计算速度的提升:

../_images/tensor_func_transformation.png

张量程序抽象

为了更有效地变换元张量函数,需要对这些函数做一些抽象,这些抽象包括:

  • 存储数据的多维数组:存储输入、输出、中间结果
  • 驱动张量计算的循环嵌套
  • 计算部分本身的语句:在循环的对应位置执行相应的计算

../_images/tensor_func_elements.png

使用张量程序抽象,可以把下面的左图变为右图:

../_images/tensor_func_seq_transform.png

这里只需要明确 tensor、循环、计算操作,就从一个单核的计算操作抽象成了等价但更高效的 4 核并行计算操作。

标签:函数,张量,编译,抽象,计算,操作,tensor
From: https://www.cnblogs.com/linrj/p/17573151.html

相关文章

  • 机器学习编译(一):概述
    机器学习编译是一个process,把机器学习的开发转到部署。机器学习编译的目标IntegrationandDependencyMinimization.集成与最小化依赖.部署应用需要集成必要的元素,我们希望部署应用的时候尽可能减小应用的大小。LeverageHardwareNativeAcceleration.利用硬件原......
  • m基于扩频解扩+LDPC编译码的通信链路matlab误码率仿真,调制对比QPSK,16QAM,64QAM,扩频
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要      在现代通信系统中,扩频技术被广泛应用于数字通信链路中。扩频技术通过将要传输的信息序列与一个宽带的伪随机码序列进行卷积,将原始信号转换成一个具有更大带宽的扩频信号。在接收端......
  • Linux下编译安装python3.7 附带python-dev
    1、安装开发工具包sudoyum-ygroupinstall"Developmenttools" 2、安装依赖包sudoyum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel ......
  • Linux 编译安装sshpass
    1、下载地址 wgethttp://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz 2、解压 tarxvzfsshpass-1.05.tar.gz  cdsshpass-1.05.tar.gz  3、编译./configure  make  makeinstall  ......
  • VTK9.1.0在Windows10+VS2019+Qt 5.15.2环境下编译安装以及VTK应用于QT
    下载VTK安装包在VTK官网Download|VTK中下载VTK9.1.0待编译源码,解压后在路径Documentation/dev/bulid.md中可以看到官方提供的Prerequisites以及简易教程编译环境安装按照官方提供的Prerequisites,安装以下环境:CMakeVersion3.12ornewer,however,thelatestversionisal......
  • python3在线编译器
    Python3在线编译器实现介绍在本文中,我将向你展示如何使用Python3来实现一个简单的在线编译器。在线编译器允许用户在浏览器中输入Python3代码,并立即执行并查看结果。我们将使用Flask框架来搭建Web应用程序,其中包含一个页面用于输入和显示代码,并使用Python的exec()函......
  • python代码优化 编译cuda
    Python代码优化编译CUDAPython是一种高级编程语言,通常被用于快速开发和原型设计。然而,由于其动态类型和解释执行特性,Python在执行大规模计算密集型任务时可能会变得相对较慢。为了解决这个问题,我们可以使用CUDA编译Python代码。CUDA(ComputeUnifiedDeviceArchitecture)是一种由......
  • 抽象语法树AST必知必会
    1介绍AST打开前端项目中的package.json,会发现众多工具已经占据了我们开发日常的各个角落,例如JavaScript转译、CSS预处理、代码压缩、ESLint、Prettier等。这些工具模块大都不会交付到生产环境中,但它们的存在于我们的开发而言是不可或缺的。有没有想过这些工具的功能是如......
  • IDEA与Maven在编译、构建、运行中涉及问题整理
    Maven构建后class、jar、war等文件输出目录Maven默认文件输出目录在根目录的target目录下,但是可以通过配置进行修改。${project.build.directory}:/target目录。${project.basedir}:pom.xml所在目录。class文件输出位置修改通过pom.xml增加如下配置<build><!--...-->......
  • window 编译 redis
    在Windows上编译RedisRedis是一个开源的内存数据库,广泛应用于缓存、消息队列等场景。在Windows上编译Redis可以帮助开发者进行本地调试和开发工作。本文将介绍如何在Windows环境下编译Redis,并提供相应的代码示例。准备工作在开始编译Redis之前,我们需要准备一些必要......