zoukankan      html  css  js  c++  java
  • 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

    人工智能芯片与自动驾驶
  • 相关阅读:
    谷歌关闭中国区购物搜索小思考
    java生成本地头文件用javah出错问题
    hadoop源代码分析(4)org.apache.hadoop.util包GenericOptionsParser类【原创】
    Ext.util.MixedCollection 用法
    eval 函数用法
    Rails Devise_demo
    rails rake 指南
    accepts_nested_attributes_for
    将Rails3.0无缝升级到Rails3.1.0.beta1
    spork + autotest 实现rails自动化测试
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14176548.html
Copyright © 2011-2022 走看看