写点什么

在 Docker Compose 上使用 GPU 运行 TensorFlow

2018 年 4 月 10 日

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

容器化和 AI 是目前开发的大趋势。理想情况下,容器化可以将环境无缝迁移,将配置环境的成本无限降低:但是在容器中配置 CUDA 并运行 TensorFlow 一向是个难题。对于初学者以及没有深度学习工作站的用户,AWS 和 Azure 推出了带独立显卡的云服务:但是按需实例价格不便宜,竞价式实例价格公道然而虚拟机不能重启,导致不能按需挂载硬盘并保存工作状态,用户需要编写大量代码时刻对虚拟机进行监控并对结果进行异地保存。Deep Systems 对这个问题进行了研究并给出了很好的建议。

  1. 用户首先需要配置 CUDA :Deep Systems 推荐使用runtime 安装,以免在升级后污染依赖环境。
  2. 安装 Docker :一行命令就可以解决这个问题。curl -sSL https://get.docker.com/ | sh
  3. 安装 Nvidia Docker :Nvidia 对 Docker 有良好的支持,可以方便地配置 GPU 穿透,而且不必再担心驱动版本不匹配的问题。
复制代码
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb

安装后的调用方法是:nvidia-docker run --rm nvidia/cuda nvidia-smi

安装 Docker Compose :Docker Compose 可以提供很多方便的功能,即使只有一个容器也推荐使用。

复制代码
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装 Nvidia Docker Compose :这个小脚本可以将 Nvidia Docker 和 Docker Compose 连接起来。

使用pip install nvidia-docker-compose 安装后,即可使用nvidia-docker-compose 命令直接调用。

加入别名:nvidia-docker-compose 比较难敲,所以配置下列别名:

复制代码
alias doc='nvidia-docker-compose'
alias docl='doc logs -f --tail=100'

最后,在docker-compose.yml 写入下列内容:

复制代码
version: '3'
services:
tf:
image: gcr.io/tensorflow/tensorflow:latest-gpu
ports:
- 8888:8888
volumes:
- .:/notebooks

大功告成!doc up 会启动容器,自带 TensorFlow Jupiter。

Deep Systems 已经将这套系统投入生产。

对于 AWS 的竞价实例,由于竞价实例不能重启,而且不能保存状态,情况略微复杂一些:有几种聪明的解决方式。

  • 建立一个数据卷,启动时手工挂载。优点是稳定;缺点是每次启动时都必须人工操作,而且数据卷外的所有操作都会丢失。
  • 使用 Docker,在启动后挂载一个数据卷,或者按本文方法在启动后建立 Docker,直接在里面进行操作。优点是易于理解、工具成熟,缺点是有点麻烦,而且除非按本文方法,否则没有真正解决数据集外操作全部丢失的问题。
  • 使用ec2-spotter,准备一个配置好的数据卷,在启动时直接将系统卷替换:缺点是对于每个区域都需要人工修改所需镜像。

查看英文原文 Docker Compose + GPU + TensorFlow = ❤️


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2018 年 4 月 10 日 19:002247

评论

发布
暂无评论
发现更多内容

Go云原生应用实战系列(一)

田晓亮

go 云计算 微服务 云原生

架构师训练营第十二周作业

吴吴

深度解析OAuth 2.0授权!!

架构师修行之路

架构 高并发系统设计 OAuth 2.0

第 12 周作业

Mr.Monkey

架构师训练营第十二周-总结

坂田吴奇隆

极客大学架构师训练营

大数据简介&架构(一)

dony.zhang

大数据 hdfs hive YARN MAPRED

架构师训练营学习总结(大数据)

qihuajun

极客时间训练营-12周作业

潜默闻雨

JWT认证看这一篇就够了

架构师修行之路

程序员 架构

第十二周总结

Linuxer

week12 作业

雪涛公子

架构师训练营 week 12 作业

Frank Zeng

架构师训练营第十二周总结

0x12FD16B

极客大学架构师训练营 0 期 week 12 学习笔记

chun1123

大数据 学习

架构师训练营 week12

devfan

PageRank简述

朱月俊

架构师训练营 week12 - 学习总结

devfan

week12 总结

雪涛公子

极客大学架构师训练营 0 期 week 12 作业

chun1123

大数据 hive

极客时间训练营-12周作业2

潜默闻雨

架构师训练营Week12学习总结

Frank Zeng

史上第二全的java文件操作和数据读写

诸葛小猿

文件读写 inputstream OutputStream PrintWriter BufferedReader

Flink从一致性检查点中恢复-14

小知识点

scala 大数据 flink

第12周作业

Jaye

第 0 期架构师训练营第 7 周作业 2 ----总结

傅晶

架构师训练营作业

qihuajun

大数据课程笔记

superman

mapReduce

w-12

麻辣

极客大学架构师训练营

逛过这个商城,摄像机竟然学会了独立思考

脑极体

架构师训练营第十二周作业

坂田吴奇隆

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

在Docker Compose上使用GPU运行TensorFlow-InfoQ