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
人工智能芯片与自动驾驶
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)