AMD开源高性能机器智能库MIOpen,可加速卷积神经网络

AMD 最近宣布新的深度学习加速库 MIOpen 1.0 现已发布,该深度学习库支持加速卷积神经网络,并且构建和运行在 ROCm 软件栈的顶部。同时 MIOpen 还提供了卷积层、池化层、批量归一化层等众多使用参考,机器之心对这一机器智能库的特性和安装进行了介绍。

新发布的版本包含以下特性:

  • 同时为前向和反向传播最优化的深度卷积求解器(Deep Convolution Solver)
  • 包括 Winograd 和 FFT 转换的卷积优化
  • 为深度学习优化了 GEMM
  • 提供了池化、Softmax、激活函数、批量归一化梯度算法和 LR 归一化等
  • MIOpen 采用 4 维张量描述数据,即 Tensors 4D NCHW 格式
  • 支持启用了 OpenCL 和 HIP 的框架 API
  • MIOpen Driver 可以允许在 MIOpen 特定层中测试前向/反向传播网络
  • 二进制包支持 Ubuntu 16.04 和 Fedora 24
  • 源代码在: https://github.com/ROCmSoftwarePlatform/MIOpen

ROCm1.6 已经有 MIOpen 的与构建包

安装 ROCm MIOpen 实现(假定已经安装了「rocm」和「rocm-opencl-dev」包):

对于 OpenCL 开发环境来说:

sudo apt-get install miopengemm miopen-opencl 

对于 HIP 开发环境来说:

sudo apt-get install miopengemm miopen-hip

同时也可以从源代码构建:https://github.com/ROCmSoftwarePlatform/MIOpen

ROCm 所支持的深度学习框架:


MIOpen

MIOpen 是 AMD 的高性能机器学习基元库,它支持两种程序设计模型:

  • OpenCL
  • HIP


前提要求

  • 启用 ROCm 的平台,更多信息:https://rocm.github.io/install.html
  • 基础软件栈,需要包括:
  • OpenCL:OpenCL 库和头文件(header files)
  • HIP:HIP、HCC 库和头文件,还需要 clang-ocl 
  • MIOpen 依赖于 miopengemm 库,并允许启用运算 GEMM 所需的几个功能性函数。miopengemm 是我们推荐的,担不是必须的
  • ROCm cmake 组件可以在此处安装:https://github.com/RadeonOpenCompute/rocm-cmake

请在以上依赖库各自的项目中寻找安装指导并完成安装。

使用 cmake 配置

首先用命令创建一个 build 目录,并转到该目录下:

mkdir build; cd build;

然后再配置 cmake。MIOpen 首选的后端可以使用 -DMIOPEN_BACKEND cmake 变量进行设置。

对于 OpenCL,运行:

cmake -DMIOPEN_BACKEND=OpenCL ..

以上命令假设 OpenCL 已经安装在标准位置中。如果没有的话,我们需要手动设置这两个 cmake 变量:

cmake -DMIOPEN_BACKEND=OpenCL -DOPENCL_LIBRARIES=<opencl-library-path> -DOPENCL_INCLUDE_DIRS<opencl-headers-path> ..

对于 HIP,运行:

设置 C++编译器为 hcc。

cmake -DMIOPEN_BACKEND=HIP -DCMAKE_PREFIX_PATH="<hip-installed-path>;<hcc-installed-path>;<clang-ocl-installed-path>" ..

cmake 步骤的示例可以为:

CXX=/opt/rocm/hcc/bin/hcc cmake -DMIOPEN_BACKEND=HIP -DCMAKE_PREFIX_PATH="/opt/rocm/hcc;/opt/rocm/hip" ..

我们需要将默认安装地址设置为「/opt/rocm」,这一步可以使用 CMAKE_INSTALL_PREFIX 完成设置:

cmake -DMIOPEN_BACKEND=OpenCL -DCMAKE_INSTALL_PREFIX=<miopen-installed-path> ..

另外,我们可以使用 MIOPEN_DB_PATH 变量设置网络配置的数据库路径。通常它默认设置为数据库文件安装的地方。而对于开发目的来说,设置 BUILD_DEV 将配置数据库文件的储存路径为源目录中:

cmake -DMIOPEN_BACKEND=OpenCL -DBUILD_DEV=On ..

在使用 ccmake 运行 cmake 之后,配置将得到改变:ccmake .. 或 cmake-gui: cmake-gui ..。注意,ccmake 程序在 Windows 中是不可用的。

构建库

我们可以在 build 目录下使用「Release」配置构建软件库:cmake --build . --config Release 或 make。

然后可以使用「install」目标安装:cmake --build . --config Release --target install 或 make install。

随后软件库就会安装到我们设置的 CMAKE_INSTALL_PREFIX 路径中。

构建驱动(driver)

MIOpen 提供了应用驱动(application-driver),其可以用于独立地执行任何一个特定层,并且用来衡量软件库的性能和验证。

驱动可以使用 MIOpenDriver 目标构建:cmake --build . --config Release --target MIOpenDriver 或 make MIOpenDriver

解释如何运行驱动的文档如下:https://github.com/ROCmSoftwarePlatform/MIOpen/blob/master/driver/README.md

运行测试

我们可以使用「check」目标运行测试:cmake --build . --config Release --target check 或 make check。

而单次测试可以使用以下命令构建和运行:

cmake --build . --config Release --target test_tensor
./test/test_tensor

构建文档

我们可以使用命令构建 HTML 和 PDF 文档:cmake --build . --config Release --target doc 或 make doc。该命令会在./MIOpen/doc/html 文件夹下构建一个本地可搜的网站,和在./MIOpen/doc/pdf 文件夹下构建一个 PDF 文档。

文档可以使用 Doxygen 创建生成,并且需要单独的安装。HTML 和 PDF 文件可以在 ReadTheDocs theme 下分别使用 Sphinx 和 Breathe 生成。

 Sphinx、Breathe 和 ReadTheDocs theme 所需环境可以在 MIOpen/doc 文件夹下安装:pip install -r ./requirements.txt。pip 安装可能会需要使用 sudo 命令获得部分根权限。

格式化(Formatting)代码

所有代码都使用 clang-format 格式化(formatted),而格式化文件可以使用:

clang-format-3.8 -style=file -i <path-to-source-file>

同样我们可以安装 githooks 来提前格式化代码:

./.githooks/install

MIOpen 的安装和使用文档地址:https://rocmsoftwareplatform.github.io/MIOpen/doc/html/

该文档主要分为 MIOpen 的安装向导、简介和 API 的使用参考。其中,API 的使用参考包含了张量、激活层、卷积层、池化层、批量归一化层等众多使用参考。


入门AMD工程机器学习库GitHubMIOpen