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= -s3_dcp_key=
? -s3_logs_key=
生成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
總結
- 上一篇: TVM安装常用问题
- 下一篇: 中继TensorRT集成