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后端示例的更多相关文章

  1. iView学习笔记(一):Table基本操作(包含前后端示例代码)

    iView表格操作 1.前端准备工作 首先新建一个项目,然后引入iView插件,配置好router npm安装iView npm install iview --save cnpm install i ...

  2. HLS playlist典型示例

    [时间:2018-06] [状态:Open] [关键词:流媒体,HLS,m3u8,playlist,variant, alternate] 0 引言 本文主要是对apple官网上的echnical N ...

  3. Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  4. 视频直播点播nginx-rtmp开发手册中文版

    2016年8月18日12:42:35 参照官方文档https://github.com/arut/nginx-rtmp-module/wiki/Directives 请注意这个是粗翻译版,仅供参考,不 ...

  5. 使用Visual Studio 2012 开发 Html5 应用

    Visual Studio 一直以来是开发微软旗下应用的利器,只要是开发微软相关的应用无论是Windows程序,WPF,Asp.Net,WinRT Surface,WindowsPhone 等微软旗下 ...

  6. C#微信公众号学习 - (一)测试账号申请

    主要分为两部分: 1.创建C#的项目,并发布, 2.微信填写发布的地址进行开发者验证. 一. VS环境为VS2017,创建项目时,自带的一些东西发布会导致各种错误,无奈,创建了空项目aspx窗体,如下 ...

  7. ABP入门教程14 - 更新多语言

    点这里进入ABP入门教程目录 设置语种 新增语种 数据库操作 打开多语言表AbpLanguages,添加一条记录. 程序操作 在基础设施层(即JD.CRS.EntityFrameworkCore)的\ ...

  8. Flask-wtf导入Regexp规则库验证手机号码合法性(测试通过)

    手机号码在项目有着很重要的地位,保证用户输入的号码准确无误就显得很关键. 废话不多说,现在页面中引入Regexp规则库: from wtforms.validators import Regexp 验 ...

  9. OpenWrt Web 开发 LuCI框架 lua语言

    LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从 Whiterussian 到 Kamikaze实现快速配置接口.Lua是一个小巧的脚本语言,很容易嵌入其它语言.轻量级 ...

随机推荐

  1. UVA10047独轮车

    题意:      给你一个独轮车,轮子上有五个扇形,每过一个格子就转过一个扇形,刚开始的时候方向是向北的,绿色上行向下,每一次可以有三种操作,到下一个格子,左转90度,右转90度,每一次操作都花费时间 ...

  2. 子域名查询、DNS记录查询

    目录 子域名信息查询 Layer子域名爆破机 subDomainBrute 利用google查询 HTTP证书查询 DNS记录查询脚本 IP转换为经纬度 利用网页获取对方经纬度信息 首先关于DNS域名 ...

  3. Windows核心编程 第十七章 -内存映射文件(上)

    第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...

  4. SpringBoot2.0之@Configuration注解

    SpringBoot2.0之@Configuration注解 本文转载自:https://www.javaman.cn/sb2/springboot-configuration 前面我们介绍了Spri ...

  5. vue的快速入门【IDEA版本】

    和vscode相比,使用IDEA进行前端开发并没有那么容易,需要先进行配置 . 安装vue插件,重启idea 鼠标右键添加vue component 点击 file 打开设置 settings,展开 ...

  6. zTree增加树形菜单格式

    result为json字符串 //展示树形菜单 function showMenuTree(result) { console.log("页面展示函数:"+result); //属 ...

  7. java面试一日一题:如何判断一个对象是否为垃圾对象

    问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...

  8. Asp.NetCore Web应用程序中的请求管道和中间件

    你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程. 上一节,我们讲到,Start ...

  9. 一文读懂 SuperEdge 云边隧道

    作者 李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员. 杜杨浩,腾讯云高级工程师,热衷于开源.容器和Kubernetes.目前主要从事镜像仓库,Kubernete ...

  10. 向Vertex Shader传递vertex attribute

    在VBO.VAO和EBO那一节,介绍了如何向Vertex Shader传递vertex attribute的基本方法.现在我准备把这个话题再次扩展开. 传递整型数据 之前我们的顶点属性数据都是floa ...