AMD 开源高性能机器智能库MIOpen,可加速卷积神经网络
选自GitHub
机器之心编译
参与:蒋思源
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
构建文档
我们可以使用命令构建 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 的使用参考包含了张量、激活层、卷积层、池化层、批量归一化层等众多使用参考。