深度学习编译中间件之NNVM(一)介绍

2023-10-29 05:08

本文主要是介绍深度学习编译中间件之NNVM(一)介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为参考文档

  1. https://github.com/dmlc/nnvm
  2. https://github.com/dmlc/tvm
  3. https://baijiahao.baidu.com/s?id=1580600243200331182 陈天奇团队发布NNVM编译器,性能优于MXNet
  4. https://mp.weixin.qq.com/s/CHUZX92tERidKq-y3EMTfQ NNVM 编译器导论:用于AI框架的一种新式端到端编译器
  5. http://dataunion.org/31598.html 如何使用CNN推理机在IoT设备上实现深度学习
  6. https://zhuanlan.zhihu.com/p/32711259 从NNVM和ONNX看AI芯片的基础运算算子

综述

NNVM是亚马逊和华盛顿大学合作发布的开源端到端深度学习编译器,支持将包括mxnet,pytorch,caffe2,coreml等在内的深度学习模型编译部署到硬件上并提供多级别联合优化。速度更快,部署更加轻量级。支持包括树莓派FPGA板卡,服务器和各种移动式设备和cuda,opencl,metal,javascript以及其它各种后端。

NNVM compiler可以将前端框架中的工作负载直接编译到硬件后端,能在高层图中间表示(IR)中表示和优化普通的深度学习工作负载,也能为不同的硬件后端转换计算图最小化内存占用优化数据分布融合计算模式

NNVM编译器基于此前发布的TVM堆栈中的两个组件:NNVM用于生成计算图,TVM用于映射张量运算

  • NNVM:将不同框架的工作负载表示为标准化计算图,然后将这些高级图转换为执行图

  • TVM:提供一种独立于硬件的特定域语言,以简化张量索引层次中的运算符实现。另外,TVM还支持多线程、平铺、缓存等。

TVM软件堆栈

这里写图片描述

上图基本上展示了TVM软件堆栈的功能构成:

  • Computation Graph Optimization
  • Tensor Compute Description
  • Schedule Space and Optimzation

值得关注的是TVM软件堆栈并不是一个完全重新创建的应用软件,作者本人也提供到TVM参考和继承的软件,其中提到了TOPI、HalideIR和Loopy,如果你的需求不是仅仅使用TVM,而是定制TVM来满足自己的需求的话了解TVM的软件继承关系是非常有必要的。

TOPI(TVM Operator Inventory)

TOPI即TVM操作符清单,一个TVM操作符收集库,是为了让TVM可以同时手工定制自动优化计算Kernel函数。具体的目标为:

  • 提供操作符声明的语法糖
  • 提供创建融合操作符的基础功能
  • 提供不同硬件下的通用调度器
文件组织
  • include:C++库,只包含头文件
  • python:TOPI的python库
  • recipe:包含一些有用的操作符示例集合
指导方针
  • 使用numpy-style操作符命名约定
  • 尽可能分离操作符声明和调度
  • 慎重地维护需求
  • 注意数据布局

未完待续…

这篇关于深度学习编译中间件之NNVM(一)介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/298417

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir