业界 | AMD的GPU现在可以加速TensorFlow深度学习了

机器之心报道

机器之心编辑部

参与:刘晓坤、李泽南、王淑婷

近日,AMD 宣布推出适用于 ROCm GPU 的 TensorFlow v1.8 接口,其中包括 Radeon Instinct MI25。AMD 称,这是该公司在实现深度学习加速上的重要里程碑。ROCm 即 Radeon Open Ecosystem,是 AMD 在 Linux 上的开源 GPU 计算基础环境。这次的 TensorFlow 实现使用了 MIOpen——一个适用于深度学习的优化 GPU 例程库。

目前,AMD 的深度学习加速解决方案已经官方支持 TensorFlow 和 Caffe 两种框架。

AMD 提供了一个预构建的 whl 包,使安装变得像 Linux 通用 TensorFlow 的安装那样简单。AMD 已经发布了安装说明以及一个预构建的 Docker 映像。

除了支持 TensorFlow 1.8,AMD 目前还在致力于对 TensorFlow 主存储库进行所有针对 ROCm 的强化。其中一些补丁已经在上游合并,另外几个正在积极审查中。在全面更新增强功能时,AMD 还将发布和维护未来支持 ROCm 的 TensorFlow 版本,如 v1.10 版。

AMD 相信深度学习的优化、可便携性以及可扩展性的未来在于特定领域编译器的基础之上。其开发者受到 XLA 早期结果的启发,正在朝着为 AMD GPU 开放和优化 XLA 的方向发展。

有关 AMD 深度学习加速的更多内容可参照:www.amd.com/deeplearning

2017 年,AMD 发布了 ROCm 平台,开始为开发者提供深度学习支持。同时,这家公司也开源了高性能机器学习库 MIOpen。

准备能运行 ROCm 和 docker 的机器

以下教程假定了使用全新的机器来准备 ROCm+Docker 环境;除了典型的库存包(stock package)更新以外,不需要安装额外的软件。

最新的公开 docker.re 发布,18.02 版本已知在 docker 镜像下与非根账户共同使用时存在缺陷。请使用以下 deb 包更新 docker 包到 18.04 版本。

安装包:https://download.docker.com/linux/ubuntu/dists/xenial/pool/nightly/amd64/docker-ce_18.04.0~ce~dev~git20180315.170650.0.8fabfd2-0~ubuntu_amd64.deb

首先推荐安装 ROCm 内核,ROCm KFD 按 DKMS 模块的方式分布,适用于 ROCm1.7.0 后的版本。AMD 推荐尽量升级到最新的通用内核。更新的内核通常能够更好地支持 AMD 硬件,并且库存视频分辨率和硬件加速性能也通常会得到改善。同时,ROCm 已经官方支持了 Ubuntu 和 Fedora Linux 分布。以下的 asciicast 展示了在 Ubuntu16.04 上更新内核。更多的细节可以在 Radeon Open Computer 网站上找到。

  • 在 Ubuntu 上安装 ROCK 内核:https://github.com/RadeonOpenCompute/ROCm#debian-repository---apt-get

第1步:安装 ROCm 内核

你需要键入(或复制)如下命令:

# OPTIONAL, upgrade your base kernel to 4.13.0-32-generic, reboot required
sudo apt update && sudo apt install linux-headers-4.13.0-32-generic linux-image-4.13.0-32-generic linux-image-extra-4.13.0-32-generic linux-signed-image-4.13.0-32-generic
sudo reboot 
# Install the ROCm rock-dkms kernel modules, reboot required
wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add -echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt-get update && sudo apt-get install rock-dkms
sudo update-initramfs -u
sudo reboot
# Add user to the video group
sudo adduser $LOGNAME video

确保在安装 ROCm 内核包后重启计算机,以强制新内核在重启时加载。你可以通过在提示符下键入以下命令来验证是否加载了 ROCm 内核:

lsmod | grep kfd

在屏幕上打出的内容应该如下:

amdkfd                270336  4
amd_iommu_v2           20480  1 amdkfd
amdkcl                 24576  3 amdttm,amdgpu,amdkfd

第 2 步:安装 docker

确认过新核正在运行之后,下一步就是安装 docker 引擎。可以在 docker 的网站上找到安装 docker 的手册,但可能最简单的方法时使用 docker 自己的 bash 脚本。如果允许在你的机器上运行从互联网下载的 bash 脚本,打开一个 bash 提示符并执行以下命令行:

curl -sSL https://get.docker.com/ | sh

用上面的脚本查看 Linux 发行版和安装的内核,并正确安装 docker。脚本将在 ROCm 平台上输出一条警告消息,表明它不能识别 ROCm 内核;这个是正常的,可以忽略。脚本可在无法识别内核的情况下进行正确的 docker 安装。

第 3 步:验证/更改 docker 设备存储驱动程序

sudo docker info

docker 设备存储驱动程序管理 docker 如何访问图像和容器。docker 官网上可以找到很多关于存储驱动程序架构的文档和详细描述。通过在命令提示符下发出 sudo docker info 命令并查找「Storage Driver:」输出,可以检查哪个存储驱动程序正被 docker 使用。我们很难预测安装时存储驱动程序 docker 会选择什么作为默认值,默认值会随着时间的推移而变化,但在经验中,我们发现尺寸较大的图像会遇到 devicemapper 存储驱动程序问题。它对图像和容器的最大尺寸施加了限制。如果你在「大数据」领域工作,如在深度神经网络的应用中,devicemapper 限制了 10GB 的默认值。如果遇到此限制,有两个选项可用:

1. 切换到其他存储驱动

  • AMD 推荐使用「overlay2」,它的环境依赖与 ROCm 内核相符,所以可以适用。
  • overlay2 可提供无限制的图像尺寸
  • 如果不能使用「overlay2」,你可以在启动服务时间的时候通过 storage-driver=<name>选项选择存储驱动

2. 如果你必须使用「devicemapper」,请在服务启动时传递「devicemapper」配置变量——dm.basesize,以增加潜在图像的最大值。

在创建和使用「devicemapper」图像后切换到「overlay2」存储驱动程序的缺点是需要重新创建现有图像。因此,AMD 建议在进行重要工作前验证是否使用「overlay2」存储驱动程序设置了 docker。

第 4 步 A:使用 docker CLI 构建 ROCm 容器

  • clone 并构建容器
git clone https://github.com/RadeonOpenCompute/ROCm-dockercd ROCm-docker
sudo docker build -t rocm/rocm-terminal rocm-terminal
sudo docker run -it --device=/dev/kfd --device=/dev/dri --group-add video rocm/rocm-terminal

(可选)第 4 步 B:使用 docker-compose 构建 ROCm 容器

  • 使用 docker-compose clone 和构建容器:
git clone https://github.com/RadeonOpenCompute/ROCm-dockercd ROCm-docker
sudo docker-compose run --rm rocm

第 5 步:验证 ROCm-docker 容器是否成功构建

  • 验证基于工作容器的 ROCm 软件堆栈
  • 在第 2 步和第 3 步之后,应该有一个对正在运行的 docker 容器的 bash 登录提示
  • hcc --version应该显示 AMD 异构编译器的版本信息
  • 执行示例应用程序
  • cd /opt/rocm/hsa/sample
  • sudo make
  • ./vector-copy
  • 显示成功创建 GPU 设备、内核编译和成功关闭的文本应该打印至 stdout

参考内容:

https://medium.com/tensorflow/amd-rocm-gpu-support-for-tensorflow-33c78cc6a6cf

https://github.com/RadeonOpenCompute/ROCm-docker

本文为机器之心报道,转载请联系本公众号获得授权。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2018-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

GO!我们开源了!

ThoughtWorks Announces Go Continuous Delivery Platform Now Available as Free Ope...

35870
来自专栏AI研习社

基于 TensorFlow 、OpenCV 和 Docker 的实时视频目标检测

在本文中,我将介绍如何在 Docker 容器中使用 Tensorflow Object-detection API 来执行实时(网络摄像头)和视频的目标检测。我...

35520
来自专栏DHUtoBUAA

基于8211lib库对s57电子海图的解析和存储

  电子海图是为适用航海需要而绘制的包含海域地理信息和航海信息的一种数字化的专题地图,符合国际标准的电子海图数据统称为S-57电子海图。本文主要在S-57电子海...

58740
来自专栏施炯的IoT开发专栏

Windows on Device 项目实践 2 - 感光灯制作

在上一篇《Windows on Device 项目实践 1 - PWM调光灯制作》中,我们学习了如何利用Intel Galileo开发板和Windows on ...

20770
来自专栏玉树芝兰

如何用VOSviewer分析CNKI关键词共现?

用VOSviewer尝试CNKI中文文献关键词共现(keyword co-occurence)分析时,你可能会踩到一个大坑。本文帮助你绕开这个坑,或是从坑里爬出...

15120
来自专栏Python小屋

Python使用三种方法批量修改记事本文件编码格式

应用背景:近期计划写一个贝叶斯算法邮件分类的教学案例,苦于没有足够的训练集,就让同学们帮忙每人从自己的邮箱中找几封垃圾邮件把内容复制下来放到记事本文件中发给我,...

10920
来自专栏大数据文摘

手把手 | 关于商业部署机器学习,这有一篇详尽指南

有关深度学习或机器学习方面的文章层出不穷,涵盖了数据收集,数据整理,网络/算法选择,训练,验证和评估等主题。

12800
来自专栏一个爱吃西瓜的程序员

用23行代码爬取豆瓣音乐top250

豆瓣对于爬虫十分友好,而且豆瓣上面又有各种电影图书音乐等资源,是我们学习爬虫一个很不错的锻炼目标。基本上每个学习爬虫的人都会拿豆瓣来练练手。 网上有各种爬取豆瓣...

32150
来自专栏跨界架构师

分布式系统关注点——仅需这一篇,吃透「负载均衡」妥妥的

  上一篇《分布式系统关注点——初识「高可用」》我们对「高可用」有了一个初步认识,其中认为「负载均衡」是「高可用」的核心工作。那么,本篇将通过图文并茂的方式,来...

16120
来自专栏机器之心

教程 | 如何使用Docker、TensorFlow目标检测API和OpenCV实现实时目标检测和视频处理

选自TowardsDataScience 作者:Léo Beaucourt 机器之心编译 参与:李诗萌、路雪 本文展示了如何使用 Docker 容器中的 Ten...

47760

扫码关注云+社区

领取腾讯云代金券