HLS后端示例
HLS后端示例
TVM支持带有SDAccel的Xilinx FPGA板。这是有关如何将TVM部署到AWS F1 FPGA实例的文档。
此功能仍处于试验阶段。暂时无法使用SDAccel部署端到端神经网络。
本文使用两个python脚本。
- build.py-用于合成FPGA位流的脚本。
- import tvm
- from tvm import te
- tgt_host="llvm"
- tgt="sdaccel"
- n = te.var("n")
- A = te.placeholder((n,), name='A')
- B = te.placeholder((n,), name='B')
- C = te.compute(A.shape, lambda i: A[i] + B[i], name="C")
- s = te.create_schedule(C.op)
- px, x = s[C].split(C.op.axis[0], nparts=1)
- s[C].bind(px, tvm.te.thread_axis("pipeline"))
- fadd = tvm.build(s, [A, B, C], tgt, target_host=tgt_host, name="myadd")
- fadd.save("myadd.o")
- fadd.imported_modules[0].save("myadd.xclbin")
- tvm.contrib.cc.create_shared("myadd.so", ["myadd.o"])
- run.py-使用FPGA作为加速器的脚本。
- import tvm
- import numpy as np
- import os
- tgt="sdaccel"
- fadd = tvm.runtime.load_module("myadd.so")
- if os.environ.get("XCL_EMULATION_MODE"):
- fadd_dev = tvm.runtime.load_module("myadd.xclbin")
- else:
- fadd_dev = tvm.runtime.load_module("myadd.awsxclbin")
- fadd.import_module(fadd_dev)
- ctx = tvm.context(tgt, 0)
- n = 1024
- a = tvm.nd.array(np.random.uniform(size=n).astype("float32"), ctx)
- b = tvm.nd.array(np.random.uniform(size=n).astype("float32"), ctx)
- c = tvm.nd.array(np.zeros(n, dtype="float32"), ctx)
- fadd(a, b, c)
- tvm.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())
设定
- 使用FPGA Developer AMI启动实例。不需要F1实例进行仿真和综合,因此建议使用成本较低的实例。
- 设置AWS FPGA开发套件工具。
- git clone https://github.com/aws/aws-fpga.git
- cd aws-fpga
- source sdaccel_setup.sh
- source ${XILINX_SDX}/settings64.sh
- 在启用OpenCL的情况下设置TVM。
仿真
- 创建emconfig.json进行仿真。
- emconfigutil --platform ${AWS_PLATFORM} --nd 1
- 将emconfig.json复制到python二进制目录。当前的Xilinx工具包假定主机二进制文件和emconfig.json文件都在同一路径中。
- cp emconfig.json $(dirname $(which python))
- 运行软件仿真
- export XCL_EMULATION_MODE=1
- export XCL_TARGET=sw_emu
- python build.py
- python run.py
- 运行硬件仿真
- export XCL_EMULATION_MODE=1
- export XCL_TARGET=hw_emu
- python build.py
- python run.py
Synthesis
- 使用以下脚本运行综合。
- unset XCL_EMULATION_MODE
- export XCL_TARGET=hw
- python build.py
- 创建AWS FPGA映像并将其上传到AWS S3。
- ${SDACCEL_DIR}/tools/create_sdaccel_afi.sh \
- -xclbin=myadd.xclbin -o=myadd \
- -s3_bucket=<bucket-name> -s3_dcp_key=<dcp-folder-name> \
- -s3_logs_key=<logs-folder-name>
生成awsxclbin文件,对于在F1实例上使用AWS FPGA映像是必需的。
运行
- 启动Amazon EC2 F1实例。
- 将myadd.so,myadd.awsxclbin和run.py复制到F1实例。
- 设置AWS FPGA开发套件。
- git clone https://github.com/aws/aws-fpga.git
- cd aws-fpga
- source sdaccel_setup.sh
- 在启用OpenCL的情况下设置TVM。
- 设置root和setup环境变量。
- sudo sh
- source ${INSTALL_ROOT}/setup.sh
- 运行
python run.py
https://tvm.apache.org/docs/deploy/hls.html
HLS后端示例的更多相关文章
- iView学习笔记(一):Table基本操作(包含前后端示例代码)
iView表格操作 1.前端准备工作 首先新建一个项目,然后引入iView插件,配置好router npm安装iView npm install iview --save cnpm install i ...
- HLS playlist典型示例
[时间:2018-06] [状态:Open] [关键词:流媒体,HLS,m3u8,playlist,variant, alternate] 0 引言 本文主要是对apple官网上的echnical N ...
- Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- 视频直播点播nginx-rtmp开发手册中文版
2016年8月18日12:42:35 参照官方文档https://github.com/arut/nginx-rtmp-module/wiki/Directives 请注意这个是粗翻译版,仅供参考,不 ...
- 使用Visual Studio 2012 开发 Html5 应用
Visual Studio 一直以来是开发微软旗下应用的利器,只要是开发微软相关的应用无论是Windows程序,WPF,Asp.Net,WinRT Surface,WindowsPhone 等微软旗下 ...
- C#微信公众号学习 - (一)测试账号申请
主要分为两部分: 1.创建C#的项目,并发布, 2.微信填写发布的地址进行开发者验证. 一. VS环境为VS2017,创建项目时,自带的一些东西发布会导致各种错误,无奈,创建了空项目aspx窗体,如下 ...
- ABP入门教程14 - 更新多语言
点这里进入ABP入门教程目录 设置语种 新增语种 数据库操作 打开多语言表AbpLanguages,添加一条记录. 程序操作 在基础设施层(即JD.CRS.EntityFrameworkCore)的\ ...
- Flask-wtf导入Regexp规则库验证手机号码合法性(测试通过)
手机号码在项目有着很重要的地位,保证用户输入的号码准确无误就显得很关键. 废话不多说,现在页面中引入Regexp规则库: from wtforms.validators import Regexp 验 ...
- OpenWrt Web 开发 LuCI框架 lua语言
LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从 Whiterussian 到 Kamikaze实现快速配置接口.Lua是一个小巧的脚本语言,很容易嵌入其它语言.轻量级 ...
随机推荐
- Android动态调试so库JNI_Onload函数-----基于IDA实现
之前看过吾爱破解论坛一个关于Android'逆向动态调试的经验总结帖,那个帖子写的很好,对Android的脱壳和破解很有帮助,之前我们老师在上课的时候也讲过集中调试的方法,但是现在不太实用.对吾爱破解 ...
- DVWA之 SQL Injection(Blind)
SQL Injection(Blind) SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法 ...
- 13.PHP_ThinkPHP
ThinkPHP 先把百度百科上对这个框架的介绍粘贴过来: ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且 ...
- pr恢复工作区
当工作区操作的位置很乱时 平时如果关闭的窗口,可以在窗口中查看 也可以选择新建工作区,保存成一个自己所需工作区
- SSM整合大体步骤
SSM整合步骤: 1. 导入jar spring: springMVC: mybatis: 第三方支持:log4j,pageHelper,AspectJ,jackson,jstl 2. 搭建sprin ...
- 二、多线程之Thread中run 和start 区别
Thread使用run 和start 区别 结论:run()方法将作为当前调用线程本身的常规方法调用执行,并且不会发生多线程. System.out.println("开始测试多线程&quo ...
- Python中的pip安装与使用
配置python的环境变量 我们在我的电脑右击->属性->高级系统设置看到环境变量 然后我们点击环境变量,找到系统变量中的Path变量然后双击他新建一项,值为我们安装的python的pyt ...
- Nios II系统在Quartus II编译后Timing requirements for slow timing model timing analysis were not met. See Report window for details
来自http://wenku.baidu.com/link?url=h0Z_KvXD3vRAn9H8mjfbVErVOF_Kd3h-BZSyF1r4sEYj3ydJGEfBHGY1mvntP4HDuF ...
- JVM内存溢出后服务还能运行吗
文章开篇问一个问题吧,一个java程序,如果其中一个线程发生了OOM,那进程中的其他线程还能运行吗? 接下来做实验,看看JVM的六种OOM之后程序还能不能访问. 在这里我用的是一个springboot ...
- C#·对于BOM头之完全解决方案
阅文时长 | 0.46分钟 字数统计 | 798.4字符 主要内容 | 1.引言&背景 2.使用C#写入带有/不带有BOM头的文件? 3.对于读取文件时,避免BOM头造成的异常. 4.声明与参 ...