专栏首页机器之心深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置)

深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置)

机器之心整理

参与:李泽南、李亚洲

本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:TensorFlow + Docker + PyCharm 等,你的呢(附问卷)》介绍了研究员 Killian 的深度学习开发环境:TensorFlow + Docker + PyCharm + OSX Fuse + Tensorboard,并附了一份调查问卷想要了解机器之心读者配置的开发环境、对编程语言、框架的使用情况。虽然获得的反馈量比较有限,但我们也观察到了一些比较有趣的现象。在这篇文章中,我们将对此问卷的结果进行介绍,希望对需要配置开发环境的读者有所帮助。最后,我们介绍了一种新的开发环境配置:Jupyter + Tensorflow + Nvidia GPU + Docker + Google Compute Engine。

问卷结果

该调查问卷文章发布之后共有超过 10800 名读者阅读,收到大量有效答卷,另有 16 名读者是以留言的方式在文章下介绍了自己的开发系统。大部分被调查者来自中国大陆,此外还有多名来自北美大学和研究机构的调查者参与其中。以下的数据统计图表中,并不包含微信文章留言的数据。

根据表单后台的数据统计,参与调查的读者中大部分为学生,然后是开发工程师、研究员、产品经理等。

而在被调查者的研究方向上,计算机视觉领域占比接近一半(48.2%),自然语言处理次之(26.8%),这部分反映了目前深度学习的主要研究方向。此外还包括金融风控、数据分析、现场安全识别、通信、时空大数据、医学图像、催化以及材料模拟等领域。

下面就开始详细为大家介绍调查者们最常用的编程语言、深度学习框架,以及在开发过程中面临的难题。

一、Python 成为深度学习主流语言

机器之心一直关注机器学习研究员、工程师在开发过程中所注重实用的工具、语言。在不久之前发布的文章《业界 | 超越 R,Python 成为最受欢迎的机器学习语言》中,KDnuggets 与 O'Reilly 的调查结果都表明,越来越多的人开始使用 Python 进行机器学习。

2016 年 KDNuggets 调查结果

在机器之心问卷中,对于问题「您认为哪种语言会成为深度学习的主流语言?」,所有被调查者的态度完全一致:Python!看来,Python 已是绝大多数从业人员必须学习的语言,同时也是众望所归的未来主流深度学习语言。

O'Reilly 2016 年度数据科学薪资调查曾显示:Python 和 Spark 是最对薪资有贡献的工具。Python 具有开发速度快的特点,Caffe、TensorFlow 等主流深度学习框架都对其支持。腾讯最近推出的机器学习高性能计算平台 Angel 在支持 Java、Scala 之外,也将在未来对 Python 提供支持。

在机器之心的问卷中,调查者反馈,虽然他们会使用其他编程语言,比如 R、C++,但实际运行程序的编写还是主要使用 Python,简单、开发速度快是很大的优势。

其他语言的使用情况简介如下:Matlab 用于快速完整、可视化研究;R 方便框架模型的验证分析,也便于处理数据和画图。因此,多数人在不同的开发流程中使用不同的语言。

二、TensorFlow 占据半壁江山

而在框架方面,谷歌支持的 TensorFlow 就没有这样的垄断地位了,不过它也已占据了接近一半(48%)的水平。完善的功能和大量的支持文档(众多 TensorFlow 支持者提到的)是目前 TensorFlow 的强项,存在于 GitHub 中的大量实现更是不容忽视,可视化工具 TensorBoard 则为开发者提供了直观的引导。但由于网络问题,TensorFlow 系统在大陆的搭建是个难题。部分被调查者也指出,TensorFlow 的 Windows 支持也为他们带来了便利。

Facebook 新近推出的框架 PyTorch 人气急剧攀升,在仅仅推出 5 个月的情况下达到了第二的位置(16%),因支持动态计算图,易用性和强大的性能而出名。在业界还需要产品迁移的情况下,学界已经出现拥抱 PyTorch 的趋势了。

同属于 Facebook 的 Caffe/Caffe2 则占据第三(14.7%),大部分被调查者在对于 Caffe 系列的评价中都提到了快速的特点。

此外,亚马逊支持的 MXNet 占据了 10.7% 的用户数量,排名第四。被调查者认为,MXNet 拥有很好的社区支持,因而易于使用。

三、硬件

硬件方面,超过一半的被调查者明确表示自己的深度学习硬件是英特尔 Core i7 + 英伟达 Geforce GTX 1080(Ti)的组合。与 TitanX 相比,英伟达 Tesla 系列的应用显得更少,看来英伟达推动的商用机器学习计算卡仍然需要进一步的推广。由于资源限制,GPU 阵列的使用并不流行,而云服务也没有被大部分开发者采用(也是经费原因)。

目前,虽然人们对于多 GPU/分布式机器学习训练/处理的呼声很高,但相关的教程和可以借鉴的方法仍显欠缺,这或许是经费之外人们面临的最大难题。

四、系统

Linux 显然是深度学习的必备系统,虽然 TensorFlow 已有 Windows 支持,但大多数受访者表示自己的深度学习机器使用基于 Linux 的 Ubuntu 系统。

五、面临的难题

在搭建深度学习环境的过程中,各组件的兼容性问题一直是困扰开发者们的难题,部分开发者表示依赖关系处理比较头疼,而使用 Docker 可以部分解决这些问题。英伟达的 cuda/GPU 驱动程序安装困难也是很多调查者提到的问题。

需要配置安装很多不同的开发框架……还有扩展计算集群……

本次深度学习开发环境调查已经结束,由于样本数量限制,这次我们得出的结论可能不甚准确。深度学习的开发环境会随着技术的发展不断进化,未来究竟是百家争鸣,还是一家独大?欢迎大家前来讨论。感谢大家对机器之心此次调查问卷的支持,获得奖品同学的礼物已经寄出。

Jupyter + Tensorflow + Nvidia GPU + Docker + Google Compute Engine

这一部分,我们编译了一篇新的深度学习开发环境配置:Jupyter + Tensorflow + Nvidia GPU + Docker + Google Compute Engine。

动机:商业上喜欢快捷、且由数据驱动的洞见,因此他们聘请了数据科学家来处理这些任务。实践性的数据科学是探索性、迭代性的过程,这个过程要求大量的计算资源和时间。数据科学家经常使用 Jupyter notebook 以更好地支持这种探索性的迭代,同时更倾向于使用 GPU 以加速 Tensorflow 项目的计算。然而,GPU 成本比较高,而计算资源也需要小心地管理以满足商业上对高效运算的需求。

近来云计算倾向于使用 Kubernetes 和 Docker 提高资源利用率。那数据科学的工具(如 Jupyter 和 GPU 等)嵌入 Docker 和 Kubernets 会更有效吗?也许这样更节约时间和内存,我前面已经用过了其他版本,但现在的环境配置是比较优秀的。

创建一个 GCE 实例

首先,创建防火墙规则,将 Jupyter(8888)和 Tensorboard(6006)添加到白名单中。

然后创建一个 GCE 实例,对于该案例:

  • 使用的系统为 Ubuntu 16.04 LTS
  • 分配 50GB 的启动盘
  • 至少需要一个 K80 GPU
  • 将 jupyter 和 tensorboard添加到你创建的防火墙规则中。

安装和确认 CUDA 能访问 GPU

使用英伟达的 CUDA 库取得访问 GPU 的权限。

下一步需要将 SSH 添加到你创建的计算节点中,然后使用脚本安装 CUDA(https://cloud.google.com/compute/docs/gpus/add-gpus):

#!/bin/bash echo "Checking for CUDA and installing." # Check for CUDA and try to install. if ! dpkg-query -W cuda; then # The 16.04 installer works with 16.10. curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb apt-get update apt-get install cuda -y fi

然后你能使用 wget 命令 pull 来源 gist 并输入到 bash 中:

wget -O - -q 'https://gist.githubusercontent.com/allenday/f426e0f146d86bfc3dada06eda55e123/raw/41b6d3bc8ab2dfe1e1d09135851c8f11b8dc8db3/install-cuda.sh' | sudo bash

如果 CUDA 安装成功了,运行 nvidia-smi 命令将返回表格显示可用的 Tesla K80 GPU:

nvidia-smi

安装 Docker(-Engine) 和 Nvidia-Docker

对于 docker,我们需要从 Docker 获取 docker-ce 版本,而不是 Ubuntu 自带的 docker.io 包。可以使用以下脚本完成(https://docs.docker.com/engine/installation/linux/ubuntu/)(https://docs.docker.com/engine/installation/linux/ubuntu/%EF%BC%89):

#/bin/bash # install packages to allow apt to use a repository over HTTPS: sudo apt-get -y install \ apt-transport-https ca-certificates curl software-properties-common # add Docker』s official GPG key: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # set up the Docker stable repository. sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # update the apt package index: sudo apt-get -y update # finally, install docker sudo apt-get -y install docker-ce

或使用我的:

wget -O - -q 'https://gist.githubusercontent.com/allenday/c875eaf21a2b416f6478c0a48e428f6a/raw/f7feca1acc1a992afa84f347394fd7e4bfac2599/install-docker-ce.sh' | sudo bash

从 deb 文件安装 nvidia-docker(https://github.com/NVIDIA/nvidia-docker/releases/):

wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb

从 Docker 容器确认 GPU 是可用的

起始化 nvidia-docker-plugin 需要在跟权限下运行:

sudo nvidia-docker-plugin &

nvidia-docker-plugin | 2017/06/07 01:05:05 Loading NVIDIA unified memory nvidia-docker-plugin | 2017/06/07 01:05:05 Loading NVIDIA management library nvidia-docker-plugin | 2017/06/07 01:05:08 Discovering GPU devices nvidia-docker-plugin | 2017/06/07 01:05:08 Provisioning volumes at /var/lib/nvidia-docker/volumes nvidia-docker-plugin | 2017/06/07 01:05:08 Serving plugin API at /run/docker/plugins nvidia-docker-plugin | 2017/06/07 01:05:08 Serving remote API at localhost:3476

现在确保 docker 容器可以看到 GPU:

sudo nvidia-docker run --rm nvidia/cuda nvidia-smi

如上图所示,现在得到的表格和前面使用 nvidia-smi 命令,且没有在 Docker 容器里运行得到的表格是一样的。

创建一个 Snapshot 卷

如果你跟着上面运行下来了,你可能注意到它需要花费一点时间。而当我们运行 GPU 实例时,那成本就比较大了。所以我们需要避免重复以上过程浪费时间和内存,我们可以将以上过程做一个整合,当我们需要启动 GPU 时就可以直接使用。

登陆 Jupyter 和 TensorBoard

sudo nvidia-docker run --rm --name tf1 -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu jupyter notebook --allow-root

上面命令可以展示为一个链接:

http://localhost:8888/?token=c8caba947dfd4c97414447c074325faf399cf8a157d0ce2f

最后寻找一个 GCE 实例的外部 IP 地址,并将它连接到端口 8888,即 http://EXTERNAL_IP:8888/,从你的控制台键入类似的符号,现在你就拥有了一个可以在 GPU 上运行 TensorFlow 的 Jupyter notebook。

原文链接:https://medium.com/google-cloud/jupyter-tensorflow-nvidia-gpu-docker-google-compute-engine-4a146f085f17

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

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-06-25

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

    haifeiWu
  • 中国互联网协会发布:《2018中国互联网发展报告》

    在2018中国互联网大会闭幕论坛上,中国互联网协会正式发布《中国互联网发展报告2018》(以下简称《报告》)。《中国互联网发展报告》是由中国互联网协会与中国互联...

    钱塘数据
  • SQL中GROUP BY用法示例

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

    Awesome_Tang
  • 知识体系解决迷茫的你

    最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

    桃翁
  • 【倒计时7天】2018教育部-腾讯公司产学合作协同育人项目申请即将截止!

    腾讯高校合作
  • 理工男图解零维到十维空间,烧脑已过度,受不了啦!

    让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。

    钱塘数据
  • 【系统设置】CentOS 修改机器名

    ken.io
  • ISUX Xcube智能一键生成H5

    腾讯ISUX
  • 考研英语-1-导学

    英二图表作文要重视。总体而言,英语一会比英语二难点。不过就写作而言,英语二会比英语一有难度,毕竟图表作文并不好写。

    用户1335799
  • 不只是软件,在线也可以免费下载百度文库了。

    不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

    课代表

扫码关注云+社区

领取腾讯云代金券