本文用流水账的形式记录如何使用nvdla的virtual platform编译生成NVDLA硬件可识别代码并且在QEMU中模拟运行。NVDLA硬件为full模式,并没有对硬件做任何的配置。

使用Docker运行VP

  1. 下载nvdla/vp中提到的docker,所有的编译工具都已经预编译并且放在/usr/local/nvdla/中

    docker pull nvdla/vp
    
  2. 准备caffe模型
    可以从以下链接下载编译好了的caffe模型,并从以下链接获取测试样例。此处需要注意,caffe模型是使用黑底白字训练的,而我们得到的测试样例是白底黑字,所以需要使用以下代码来做转换[1]:

    import sys
    import numpy
    from PIL import Image
    img = Image.open(sys.argv[1]).convert('L')
    im = numpy.array(img)
    im = 255 - im
    result = Image.fromarray(im)
    result.save(sys.argv[1].split('.')[0]+'_inv.'+sys.argv[1].split('.')[1])
    
  3. 编译.nvdla模型
    在docker容器下运行以下命令,如果没有报错,会生成.nvdla文件。此处需要注意的是,设置好nvdla_compiler的路径,否则会报找不到nvdla_compiler的错误。

    ./nvdla_compiler --caffemodel lenet_iter_10000.caffemodel --prototxt lenet.prototxt
    
  4. 在QEMU中运行runtime
    4.1 使用以下命令进入QEMU

    cd /usr/local/nvdla
    # start the virtual simulator
    aarch64_toplevel -c aarch64_nvdla.lua
    # Login the kernel with account 'root' and password 'nvdla'
    

    4.2 挂载当前文件夹并加载所需驱动

    mount -t 9p -o trans=virtio r /mnt # mount pwd
    cd /mnt
    insmod drm.ko # install drm driver
    insmod opendla_1.ko # install nvdla driver
    

    4.3 运行runtime,时间有点久,需要耐心等待

    ./nvdla_runtime --loadable fast-math.nvdla --image 8_inv.pgm --rawdump
    

    4.4 查看运行结果,可以看到模型能够正确的识别出8(黑底白字)

    cat output.dimg
    

使用源代码编译

NVDLA完全开源了sw的compiler和runtime部分,分别在/sw/umd/app和/sw/umd/core下面。从虚拟机进入/sw/umd目录底下。下载buildroot编译工具buildroot-2017.11-rc1[3],并解压缩到/sw文件夹。注意!使用绝对路径!

wget --no-check-certificate https://git.busybox.net/buildroot/snapshot/buildroot-2017.11-rc1.tar.bz2
tar -xf buildroot-2017.11-rc1.tar.bz2
# install necessary laibrary
apt-get install libncurses-dev
apt-get install cpio
# configuration
make qemu_aarch64_virt_defconfig
make menuconfig
* Target Options -> Target Architecture -> AArch64 (little endian)
* Target Options -> Target Architecture Variant -> cortex-A57
* Toolchain -> Custom kernel headers series -> 4.13.x
* Toolchain -> Toolchain type -> External toolchain
* Toolchain -> Toolchain -> Linaro AArch64 2017.08
* Toolchain -> Toolchain origin -> Toolchain to be downloaded and installed
* Kernel -> () Kernel version -> 4.13.3
* Kernel -> Kernel configuration -> Use the architecture default configuration
* System configuration -> Enable root login with password -> Y
* System configuration -> Root password -> nvdla
* Target Packages -> Show packages that are also provided by busybox -> Y
* Target Packages -> Networking applications -> openssh -> Y
# compile
make -j4

编译nvdla_compiler

注意!使用绝对路径!

export TOP=/vp/sw/umd
make compiler
make runtime TOOLCHAIN_PREFIX= (path_to_)buildroot-2017.11-rc1/output/host/opt/ext-toolchain/bin/aarch64-linux-gnu-

编译nvdla_runtime

编译KMD,注意!使用绝对路径!

cd sw/kmd
make KDIR=(path_to)buildroot-2017.11-rc1/output/build/linux-4.13.3/ \
ARCH=arm64 \
CROSS_COMPILE=(path_to_)buildroot-2017.11-rc1/output/host/bin/aarch64-linux-gnu-

将buildroot生成的Linux内核位置在aarch64_nvdla.lua中设置好,然后即可开始编译.nvdla模型并且在runtime中运行。但是!使用自己编译的compiler和runtime编译出来的模型,目前并没有在QEMU中被正确执行!

部分文件的位置:

sw/umd/out/core/src/compiler/libnvdla_compiler/libnvdla_compiler.so   #umd生成的应用compiler和runtime程序以及动态库
sw/umd/out/core/src/runtime/libnvdla_runtime/libnvdla_runtime.so
sw/umd/out/apps/compiler/nvdla_compiler/nvdla_compiler
sw/umd/out/apps/runtime/nvdla_runtime/nvdla_runtime
sw/kmd/port/linux/opendla.ko   # kmd生成的nvdla驱动
buildroot/output/build/linux-4.13.3/drivers/gpu/drm/drm.ko   # vp环境对应的显卡gpu驱动
buildroot-2017.11-rc1/output/images   # buildroot生成的Linux image
runtime pre-compiled runtime from source
compiler pre-compiled Y Y
compiler from source N N

参考资料:

[1] Run LeNet on NVDLA
[2] NVDLA Open Source Virtual Platform
[3] Building Linux Kernel for NVDLA Virtual Simulator
[4] nvdla整个build的flow
[5] NVDLA RunTime编译运行

NVDLA VP使用指南相关推荐

  1. NVDLA runtime vp 搭建

    简介 NVDLA虚拟平台提供了一个可精确注册的系统,可以在该系统上快速开发和调试软件.该虚拟平台基于GreenSocs QBOX,它是与QEMU和SystemC共同仿真的解决方案.下面的图89显示了N ...

  2. php内核介绍及扩展开发指南 pdf vp进,PHP内核介绍及扩展开发指南—Extensions 的编写...

    Extensions 的编写 理解了这些运行机制以后,本章着手介绍Extensions 的编写,但凡写程序的人都知道hello world,那好,就从hello world开始. 1.1Hello W ...

  3. 全球首个软硬件推理平台 :NVDLA编译器正式开源

    作者 | 神经小姐姐 来源 | HyperAI超神经(ID:HyperAI) [导读]为深度学习设计新的定制硬件加速器,是目前的一个趋势,但用一种新的设计,实现最先进的性能和效率却具有挑战性.近日,英 ...

  4. graythresh matlab,Matlab-图形算法和图像处理指南

    笔者前言 本指南一共9 章,由 Valentina Plekhanova 博士撰写,链接地址http://osiris.sunderland.ac.uk/%7Ecs0vpl/GIP-VP%20Tuto ...

  5. matlab greythresh,Matlab-图形算法和图像处理指南

    笔者前言 本指南一共9 章,由 Valentina Plekhanova 博士撰写,链接地址http://osiris.sunderland.ac.uk/%7Ecs0vpl/GIP-VP%20Tuto ...

  6. 《企业私有云建设指南》-导读

    内容简介 第1章总结性地介绍了云计算的参考架构.典型解决方案架构和涉及的关键技术. 第2章从需求分析入手,详细讲解了私有云的技术选型.资源管理.监控和运维. 第3章从计算.网络.存储资源池等方面讲解了 ...

  7. corenlp分词 stanford_Stanford CoreNLP 入门指南

    最近一直在写毕业论文,因为是一个基于语料库分析的题目,所以牵扯到了词性标注.句法分析等等内容.在一番查找之后,决定用 Stanford CoreNLP 来进行处理,一方面是因为这个工具本身功能齐全,另 ...

  8. 福利放送 | 免费赠送《校园招聘实践指南》电子书

    元宵节都过了 还沉浸在过年放假的气氛里出不来? 看看日历 校招计划还没开始做! 瞬间清醒 贴心的谷露为你四处搜罗资料 打造了一份 <节后收心指南> <校招实践指南> 从校招的准 ...

  9. (转)SCJP 认证考试指南

    SCJP 认证考试指南SCJP – Sun Certified Java Programmer (Sun Java 程序员认证)第1 章 声明和访问控制目标一 创建数组数组Java 中的数组跟C/C+ ...

最新文章

  1. java date truncate_在Java中将dateTime转换为dd / mm / yy格式的日期
  2. java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息
  3. python 命令-python 处理命令行参数
  4. MyBatis是持久化层框架(SQL映射框架)-操作数据库
  5. Linux下tar.xz结尾的文件的解压方法
  6. 【Elasticsearch】Elasticsearch 热点线程 hot_threads
  7. POJ3264Balanced Lineup(线段树)
  8. js实现正方体旋转动画
  9. Gym 100796B Wet Boxes(思维)题解
  10. 百度豆丁文档免费下载神器
  11. 笔记:算法笔记-胡凡、曾磊
  12. TOUCH  PANEL
  13. 注意,因为这样操作,zoom登录不上了
  14. JS控制DIV的显示隐藏
  15. java 笔记本i7 i5_笔记本i7低压cpu性能抵不过i5标压cpu,为什么还叫i7
  16. 微信小程序自定义card图文组件
  17. oc对mysql支持_iOS中数据库使用什么技术实现的
  18. 打开桌面计算机投屏到扩展屏,电脑投屏到电视显示不完全解决办法
  19. 自建外贸独立站需要多少钱。
  20. C语言文件操作实例代码

热门文章

  1. 基于蓝牙协议的无线网络化传感器设计
  2. function函数嵌套 matlab_MATLAB嵌套函数
  3. P3386二分图最大匹配模版
  4. 阿里云域名申请 + 七牛云CDN加速
  5. python时间差计算器时分秒_python 实现日期计算器
  6. 10本好书读物推荐,职场管理者必读,建议收藏
  7. elastic不错的官方文档(中文)
  8. 一些程序员都关注的公众号!
  9. 游戏开发计划——数据元素设计(人物)
  10. 不是这个社会浮躁了,是我们的眼睛浮躁了。