天天看點

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 numpy as np

import os

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_target=hw_emu

synthesis

使用以下腳本運作綜合。

unset xcl_emulation_mode

export xcl_target=hw

建立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開發套件。

設定root和setup環境變量。

sudo sh

source ${install_root}/setup.sh

https://tvm.apache.org/docs/deploy/hls.html

人工智能晶片與自動駕駛