TVM 从入门到精通 | 安装 TVM (Part 2)

article/2025/10/3 14:50:19

本文首发自:公众号 HyperAI超神经

内容一览:TVM 共有三种安装方法:从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。

关键词:TVM   Docker   基础教程   

欢迎回到 TVM 文档讲解 101,这个系列将继续 TVM 的日常教学。

上期 Part 1 我们已经介绍了如何通过源码安装 TVM,本期将继续进行学习 TVM 前的准备工作。讲解通过 Docker 镜像和 NNPACK Contrib 安装 TVM。

Part 1 传送门:从源码安装

 TVM 安装之 Docker 镜像安装

开发者可以利用 Docker 工具脚本,建立开发环境。这也有助于运行 TVM Demo 和教程。

需要用到 Docker

如果使用 CUDA 则需要 nvidia-docker。

获取 TVM 源码发行版或克隆 GitHub 仓库,以获取辅助脚本:

git clone --recursive https://github.com/apache/tvm tvm

使用以下命令来启动 Docker 镜像:

/path/to/tvm/docker/bash.sh <image-name>

完成本地构建后,这里的 image-name 可以是一个本地的 Docker 镜像名称,例如:tvm.ci_cpu 。

该辅助脚本可实现:

* 挂载当前目录到 /workspace

* 将用户切换为调用 bash.sh 的用户(这样您就可以读/写主机系统)

* 在 Linux 上使用宿主机的网络。由于无法支持主机网络驱动器,请在 macOS 上使用桥接网络并暴露 8888 端口,以使用 Jupyter Notebook。

输入以下内容启动 Jupyter Notebook:

jupyter notebook

如果你在 macOS 上启动 Jupyter Notebook 时看到报错 OSError: [Errno 99] Cannot assign requested address,可通过以下方式改变绑定的 IP 地址:

jupyter notebook --ip=0.0.0.0

注意,在 macOS 上,由于我们使用桥接网络,Jupyter Notebook 将被报告在一个类似于 http://{container_hostname}:8888/?token=... 的 URL 上运行。在浏览器中粘贴时,需把 container_hostname 替换为 localhost

 Docker 源代码 

查看 Docker 源代码: 构建自己的 Docker 镜像。

运行以下命令来构建 Docker 镜像:

/path/to/tvm/docker/build.sh <image-name>

你也可以利用非官方的第三方预建镜像,注意:这些镜像是用来测试的,并不是 ASF 的版本。

 TVM 安装之 NNPACK Contrib 安装 

NNPACK 是用于神经网络计算的加速包,可以在 x86-64、ARMv7 或 ARM64 架构的 CPU 上运行。使用 NNPACK,像 MXNet 这样的高级库可以加快多核 CPU 计算机(包括笔记本电脑和移动设备)上的执行速度。

由于 TVM 已经有原生调整的调度,这里的 NNPACK 主要是为了参考和比较。对于常规使用,原生调整的 TVM 实现更佳。

TVM 支持 NNPACK 在卷积、最大池和全连接层中进行前向传播(仅限推理)。在本文档中,我们对如何将 NNPACK 与 TVM 一起使用进行了高级概述。

 条件 

NNPACK 的底层实现使用了多种加速方法,包括 fft 和 winograd。这些算法在某些特殊的批处理大小、内核大小和步幅设置上比其他算法效果更好,因此根据上下文,并非所有卷积、最大池或全连接层都可以由 NNPACK 提供支持。

NNPACK 仅支持 Linux 和 OS X 系统,目前不支持 Windows。

 构建/安装 NNPACK 

如果训练后的模型满足使用 NNPACK 的一些条件,则可以构建支持 NNPACK 的 TVM。

请按照以下简单步骤操作:使用以下命令构建 NNPACK 共享库。TVM 会动态链接 NNPACK。

注意:以下 NNPACK 安装指导已经在 Ubuntu 16.04 上进行了测试。

构建 Ninja 

NNPACK 需要最新版本的 Ninja。所以我们需要从源代码安装 ninja。

git clone git://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap

设置环境变量 PATH 以告诉 bash 在哪里可以找到 ninja 可执行文件。例如,假设我们在主目录 ~ 上克隆了 ninja。然后我们可以在 ~/.bashrc 中添加以下行。

export PATH="${PATH}:~/ninja"

构建 NNPACK 

CMAKE 新版 NNPACK 单独下载 Peach 等依赖

注意:至少在 OS X 上,运行下面的 ninja install 会覆盖安装在 /usr/local/lib 中的 googletest 库。如果您再次构建 googletest 以替换 nnpack 副本,请务必将 -DBUILD_SHARED_LIBS=ON 传给 cmake。

git clone --recursive https://github.com/Maratyszcza/NNPACK.git
cd NNPACK# 在 CFLAG 和 CXXFLAG 中添加 PIC 选项以构建 NNPACK 共享库
sed -i "s|gnu99|gnu99 -fPIC|g" CMakeLists.txt
sed -i "s|gnu++11|gnu++11 -fPIC|g" CMakeLists.txt
mkdir build
cd build# 生成 ninja 构建规则并在配置中添加共享库
cmake -G Ninja -D BUILD_SHARED_LIBS=ON ..
ninja
sudo ninja install# 在你的 ldconfig 中添加 NNPACK 的 lib 文件夹
echo "/usr/local/lib" > /etc/ld.so.conf.d/nnpack.conf
sudo ldconfig

构建支持 NNPACK 的 TVM

git clone --recursive https://github.com/apache/tvm tvm

* 在 config.cmake 中设置 set(USE_NNPACK ON) 。

* 将 NNPACK_PATH 设置为 $(YOUR_NNPACK_INSTALL_PATH) 配置后使用 make 构建 TVM

make

点击链接查看原始文档,后续超神经将继续更新中文 TVM 教程,请持续关注~

—— 完 ——

更多精彩内容(关注 HyperAI超神经公众号阅读)

7d27ea5937e634457fc2c0667982057c.png

1251821025438251ad10fa47acd04ccd.png


http://chatgpt.dhexx.cn/article/S22MR4aH.shtml

相关文章

初识 TVM

如有图像或公式显示错误&#xff0c;可以访问我的个人博客&#xff1a;https://www.wanglichun.tech/2019/11/15/tvm/ 笔者也是最近偶然的机会才开始接触TVM&#xff0c;使用过后发现&#xff0c;经过auto-tuning后的TVM模型在速度是竟然超过了TensorRT,并且笔者使用的是MXNet…

TVM(端到端深度学习编译器)简介

TVM-算子编译器前后端 前言TVM出现背景TVM是什么为什么用TVM&#xff0c;TVM解决了什么当前问题&#xff1a;TVM解决了 TVM如何解决具体实现手段如何设计搜索空间Search Space优化策略图优化 - 算子融合图优化 - Layout Transform张量优化 - 矩阵乘法 GEMM张量优化 - 调度算法张…

tvm学习笔记(五):tvm工作原理

一、总体流程&#xff1a; TVM的工作流程&#xff1a;首先&#xff0c;将网络表示成统一的表示形式&#xff08;Intermediate Representation&#xff09;&#xff0c;并进行一些可重用的图优化&#xff1b;然后&#xff0c;利用不同的后端生成对应设备代码&#xff0c;如图1所…

TVM系列 - 量化

TVM系列 - 量化 TVM量化原理TVM量化现状TVM量化原理介绍TVM量化代码解析 TVM量化原理 关于量化的方式其实已经有足够的文章去了解目前最主流的两种&#xff1a;离线量化及训练时量化&#xff08;大家应该能理解&#xff0c;其实就是伪量化&#xff09;&#xff0c;而tvm的作者…

TVM-初识TVM

目录 TVM简介那么TVM是什么&#xff1f;TVM做了哪些工作 TVM简介 随着深度学习的发展&#xff0c;深度学习的能力可以说是越来越强大&#xff0c;识别率节节攀升&#xff0c;与此同时&#xff0c;深度学习框架也变得越来越多&#xff0c;目前比较主流的深度学习框架包括&#…

【TVM系列二】TVM介绍

文章同步更新在公众号 AIPlayer&#xff0c;欢迎扫码关注&#xff0c;共同进步 目录 一、TVM的工作流程 1、整体流程 2、关键数据结构 3、Transformations 4、搜索空间和基于机器学习的转换 5、目标代码转化 二、逻辑架构组件 三、运行TVM实例 1、交叉编译runtime 2、…

TVM:简介

TVM&#xff1a;简介概述 Apache TVM 是一个用于 CPU、GPU 和机器学习加速器的开源机器学习编译器框架。它旨在使机器学习工程师能够在任何硬件后端上高效地优化和运行计算。本教程的目的是通过定义和演示关键概念&#xff0c;引导您了解 TVM 的所有主要功能。新用户应该能够从…

TVM简介

TVM与LLVM的架构非常相似。TVM针对不同的深度学习框架和硬件平台&#xff0c;实现了统一的软件栈&#xff0c;以尽可能高效的方式&#xff0c;将不同框架下的深度学习模型部署到硬件平台上。 如果从编译器的视角来看待如何解决这个问题&#xff0c;各种框架写的网络可以根据特…

TVM概述

TVM TVM是陈天奇领导的一个DL加速框架项目。它处于DL框架&#xff08;如tensorflow、pytorch&#xff09;和硬件后端&#xff08;如CUDA、OpenCL&#xff09;之间&#xff0c;兼顾了前者的易用性和后者的执行效率。 官网&#xff1a; https://tvm.apache.org/ 代码&#xf…

TVM[2] —— TVM简介和发展

TVM[2] —— TVM简介和发展 文章目录 TVM[2] —— TVM简介和发展1. TVM 简介1.1 是什么1.2 做什么1.3 基本步骤 2. TVM 的发展2.1 现状——四类抽象2.2 问题——两向boundary2.3 未来——从箭头到圈2.4 New Capabilities with Unity 下期预告&#xff1a;3. TVM 技术栈全解析&a…

TVM 学习指南(个人版)

文章目录 0x0. 前言0x1. 前端0x1.1 Tensor IR(TIR)0x1.2 了解tvm.ir基础设施0x1.3 Relay IR0x1.4 RelaxD0&#xff1a;数据流块作为第一优先级的构造D1&#xff1a;形状推导作为第一优先级的计算D1a: match_shapeD1b. 从符号整数元组构造ShapeShape传播的方法Implications for …

一步一步解读神经网络编译器TVM(一)——一个简单的例子

TOC 前言 这是一个TVM教程系列&#xff0c;计划从TVM的使用说明&#xff0c;再到TVM的内部源码?为大家大致解析一下TVM的基本工作原理。因为TVM的中文资料比较少&#xff0c;也希望贡献一下自己的力量&#xff0c;如有描述方面的错误&#xff0c;请及时指出。 那啥是TVM&am…

P29 JTextArea文本域

P29 JTextArea文本域 1.概述2.代码实例3.效果演示 系统&#xff1a;Win10 Java&#xff1a;1.8.0_333 IDEA&#xff1a;2020.3.4 Gitee&#xff1a;https://gitee.com/lijinjiang01/JavaSwing 1.概述 JTextArea&#xff1a;文本区域。JTextArea 用来编辑多行的文本。JTextArea…

java 刷新jtextarea_Java JTextArea不能实时刷新的问题

相信JTextArea用法都了解吧&#xff0c; JTextArea textArea new JTextArea();生成一块空白的区域&#xff0c; 我的需求就是点击发送邮件按钮后&#xff0c;后台的执行日志能输出到textArea中。 但是我点击发送按钮的时候&#xff0c;由于邮件的附件要好久&#xff0c;界面一…

java 获得jtextarea_java JTextArea中获得光标所在行数

[java]代码库import java.awt.BorderLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextAre…

java jtextarea 事件_JTextArea事件处理

[java]代码库import java.awt.*; import java.awt.event.*; import javax.swing.*; /*由于会使用到复原和事件驱动功能&#xff0c;因此需要将javax.swing.undo和javax.swing.event两个package包含进来 */ import javax.swing.undo.*; import javax.swing.event.*; /*JTextArea…

JTextArea用法

JTextArea用法 import java.awt.Color; import java.awt.Font; import java.awt.Point; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JFrame; import javax.swing.Imag…

7、Java Swing JTextArea:文本域组件。 JScrollPane:滚动窗口

文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。在 Swing 中使用 JTextArea 类实现一个文本域&#xff0c; JTextArea常用构造方法如下&#xff1a; JTextArea()----创建一个默认的文本域。JTextArea(int rows,int columns)----创建一个具有指定行数和列数的文…

Swing014——JTextArea:文本域组件

一、API简介 二、实例 package component;import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; impor…

AUC和ROC

AUC&#xff08;Area Under Curve&#xff09;被定义为ROC曲线下的面积&#xff0c;显然这个面积的数值不会大于1。又由于ROC曲线一般都处于yx这条直线的上方&#xff0c;所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器…