HLS 后端示例

更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站


TVM 支持带有 SDAccel 的 Xilinx FPGA 板,接下来介绍如何将 TVM 部署到 AWS F1 FPGA 实例。

备注:此功能仍处于测试阶段,目前无法用 SDAccel 部署端到端神经网络。

本教程使用了两个 Python 脚本:

  • build.py - 用于合成 FPGA 比特流的脚本。

    import tvm
    from tvm import te

    tgt= tvm.target.Target("sdaccel", host="llvm")

    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, 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)

    dev = tvm.device(tgt, 0)

    n = 1024
    a = tvm.nd.array(np.random.uniform(size=n).astype("float32"), dev)
    b = tvm.nd.array(np.random.uniform(size=n).astype("float32"), dev)
    c = tvm.nd.array(np.zeros(n, dtype="float32"), dev)

    fadd(a, b, c)
    tvm.testing.assert_allclose(c.numpy(), a.numpy() + b.numpy())

设置

  • 用 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 binary 目录下:因为当前的 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

合成​

  • 用以下脚本进行合成:

    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 身份设置环境变量:

    sudo sh
    source ${INSTALL_ROOT}/setup.sh

  • 运行:

    python run.py

相关推荐
星辰生活说3 分钟前
理想树图书:以科技赋能教育,开启AI时代自主学习新范式
人工智能·科技·学习
说私域11 分钟前
定制开发开源AI智能名片S2B2C商城小程序:数字营销时代的话语权重构
人工智能·小程序·开源·零售
武子康15 分钟前
大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART
大数据·人工智能·算法·机器学习·语言模型·spark-ml·剪枝
彭祥.26 分钟前
安全帽目标检测
人工智能·目标检测·目标跟踪
DisonTangor1 小时前
【小米拥抱AI】小米开源 MiMo-7B-RL-0530
人工智能
理***所2 小时前
湖北理元理律师事务所:用科学规划重塑债务人生
人工智能
文莉wenliii2 小时前
打卡day41
人工智能·深度学习
Lilith的AI学习日记2 小时前
n8n 中文系列教程_25.在n8n中调用外部Python库
开发语言·人工智能·python·机器学习·chatgpt·ai编程·n8n
说私域2 小时前
基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量运营与内容定位策略研究
人工智能·小程序·开源·产品运营·流量运营·零售
pen-ai2 小时前
【深度学习】16. Deep Generative Models:生成对抗网络(GAN)
人工智能·深度学习·生成对抗网络