开发者社区> 王树义> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何用云端 GPU 为你的 Python 深度学习加速?

简介: 负荷 下午,我用 Python 深度学习框架 Keras 训练了一个包含3层神经网络的回归模型,预测波士顿地区房价。 这是来自于 “Deep Learning with Python” 书上的一个例子。
+关注继续查看
img_7a4acdab4d8437ba8465b0aa668cf060.png

负荷

下午,我用 Python 深度学习框架 Keras 训练了一个包含3层神经网络的回归模型,预测波士顿地区房价。

img_72e01b0bf66d01bdf45ff5cd48b595a7.jpe

这是来自于 “Deep Learning with Python” 书上的一个例子。

img_874ab54c2deeee132d307762a5f23f94.jpe

运行的时候,代码有两个大循环。

第一个把数据跑100遍(epochs),第二个把数据跑500遍。

我的笔记本电脑算起来很吃力,风扇一直在响。

大热天的,看着好可怜。

用笔记本电脑进行机器学习,还是不大合适的。

我要是有一块 GPU 就好了……

此时,突发奇想。

我虽然没有带 nVidia GPU 的设备,不过谁说非要在本地机器运行代码了?

早已是云时代了啊!

能否用云端 GPU 跑机器学习代码,让我的笔记本少花些力气呢?

偶遇

有这个想法,是因为最近在 Youtube 上面,我看到了 Siraj Raval 的一段新视频

img_f32fe3264341b63f08c7a1e23bdcab52.jpe

这段视频里,他推荐了云端 GPU 提供平台 FloydHub

img_188a0c3e25a03f545455db598310a626.jpe

我曾经试过 AWS GPU 产品。

那是在一门深度学习网课上。

授课老师跟 AWS 合作,为全体学生免费提供若干小时的 AWS 计算能力,以便大家顺利完成练习和作业。

我记得那么清楚,是因为光如何配置 AWS ,他就专门录了数十分钟的视频。

AWS 虽然已经够简单,但是对于新手来说,还是有些门槛。

img_c2ec94e140819ac09254e11907e7b448.jpe

FloydHub 这个网站,刚好能解决用户痛点。

首先它能够包裹 AWS ,把一切复杂的选择都过滤掉。

其次它内置了几乎全部主流深度学习框架,自带电池,开箱即用;

img_4081a4d7e6f94cf6a0b835054935d5e7.jpe

另外,它提供了丰富而简明的文档,用户可以快速上手。

正如它的主页宣称的:

Focus on what matters. Let FloydHub handle the grunt work.

翻译过来就是:

关注你想做的事儿。脏活累活,扔给 FloydHub 吧。

凡是设计给懒人用的东西,我都喜欢。

我于是立即注册了账户,并且做了邮件验证。

img_2a72d48d3fed25e764ff41457e7e3348.jpe

之后,我免费获得了2个小时的 GPU 时间,可以自由尝试运行机器学习任务。

img_6f6c76651c8efb94a1ed08b6650bc299.jpe

为了能把珍贵的 GPU 运算时间花在刀刃上,我认真地阅读了快速上手教程。

img_fee2795f466e4eb3ed13c1e84be0e5e0.jpe

几分钟后,我确信自己学会了使用方法。

尝试

首先,我到 FloydHub 的个人控制面板上,新建了一个任务,起名叫做 “try-keras-boston-house-regression”。

然后,我在本地的 Jupyter Notebook 里,把代码导出为 Python 脚本文件,如下图所示。

img_9a26a0a511ee43b9b84f31a4a97b7c43.png

我新建了一个目录,把脚本文件拷贝了进来。

img_b93532288172649b6d055e07b1942908.jpe

这个 Python 脚本,我仅仅在最后加了3行代码:

import pickle

with open('data.pickle', 'wb') as f:
    pickle.dump([all_scores, all_mae_histories], f)

加入这几行代码,是因为我们需要记录运行中的一些数据(即 all_scoresall_mae_histories)。

然后,进入终端,利用 cd 命令,进入到这个文件夹。

执行:

pip install floyd-cli

这样,本地的 FloydHub 命令行工具就安装好了。

执行下面命令登录进去:

floyd login

系统会提示你,输入 FloydHub 上的账号信息。

输入正确后,执行:

floyd init try-keras-boston-house-regression

注意这个名称,必须和刚才在控制面板新建的任务名称一致。

配置都完成了,下面直接运行就可以了。

输入:

floyd run --gpu --env tensorflow-1.8 "python 03-house-price.py"

这句话的意思是:

  • 使用 GPU 计算;
  • 运行环境选用 Tensorflow 1.8 版本,及对应的 Keras (2.1.6)。

如果你希望使用其他深度学习框架或版本,可以参考这个链接

img_67711fa866b92fc93a2c656c70be6288.jpe

FloydHub 对我们的命令,是这样回应的:

img_14b0ed4a58ee568bec45bf76ab00ecb9.jpe

操作结束?

对,就这么简单。

你的任务,已在云端运行了。

结果

然后,我就忙自己的事儿去了。

喝茶,看书,还扫了几眼微信订阅号。

虽然是按时计费,但你不用因为怕多算钱,就死死盯住云端运行过程。

一旦任务结束,它自己会退出运行,不会多扣你一分钟珍贵的 GPU 运行时间。

等我回到电脑前面,发现任务已完成。

img_5932744ce53b1cf3411ba540dcf220e9.jpe

整个儿过程中,GPU 内存着实够忙碌的(占用率一直超过90%)。

不过 GPU 好像很清闲的样子,一直在百分之十几晃悠。

看来,我们的神经网络,层数还是太少了,结构不够复杂。

GPU 跑起来,很不过瘾。

往下翻页,看看输出的结果。

img_3d8d25cf53ddb84d23119e1bb7a56144.jpe

程序的输出,包括 GPU 资源创建、调用的一些记录,这里都有。

打开 Files 标签页,咱们看看结果。

img_4593f2f801f4b6976bbc36f0447e551d.jpe

之前追加3行代码,生成的 pickle 记录文件,就在这里了。

看来,FloydHub 确实帮我们完成了繁复的计算过程。

我的笔记本电脑,一直凉凉快快,等着摘取胜利果实。

选择下载,把这个 pickle 文件下载到本地。跟我们的 Jupyter Notebook 放在一个目录下。

回到 Jupyter Lab 运行界面。

新开一个 ipynb 文件。

我们输入以下代码,查看运行记录是否符合我们的需要。

import pickle
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

with open('data.pickle', 'rb') as f:
    [all_scores, all_mae_histories] = pickle.load(f)

num_epochs = 500
average_mae_history = [
    np.mean([x[i] for x in all_mae_histories]) for i in range(num_epochs)
]

plt.plot(range(1, len(average_mae_history) + 1), average_mae_history)
plt.xlabel('Epochs')
plt.ylabel('Validation MAE')
plt.show()

这些代码,只是为了绘图,本身没有任何复杂运算。

这是运行结果:

img_9e4395b9f4c37f8b0f1b1e9c166f7542.jpe

可视化结果与书上的一致。

证明机器学习代码在云端运行过程一切顺利。

我们还可以查看剩余的可用免费时长。

img_51f7ae5e1274bf28e557fb6025291a1f.png

嗯,还剩下1个多小时 GPU 运算时间呢,回头接着玩儿。

Workspace

刚才咱们展示的,是命令行下的使用方法。如果你对于命令行操作很熟悉,建议你使用这种方式。因为控制感更强一些。

但是对于初学者,我推荐你使用另外一种更为简便的方法。

在主页点击上方的 Workspace 标签。

img_b9dac38da70905df5888b77fe02efb75.jpe

你会看到已有的2个样例 Workspace 。

尝试打开其中第一个,看看内容。

点击右上方的 Resume 绿色按钮,你会看到系统在认真地为我们准备环境。

img_97c825d0f52207273e65713ce33f9d1d.jpe

准备工作结束后,你会看到出现了熟悉的 Jupyter lab 界面。

双击左侧文件区域的 dog-breed-classification.ipynb ,打开。

img_82d7f1c183c5bf11a81bd649565a46b1.jpe

这里是个猫狗分辨的完整样例。

咱们执行一下。方式是执行菜单栏里面的 Run -> Restart Kernel and Run All Cells:

img_6107e79f2598a2ef9f22b700e86c1016.jpe

你会发现,跟在本地执行起来,没有什么区别。

img_bc2d40f2d290e90c96a8585fe225156e.jpe

唯一的差别,是你在用 GPU 加速哦!

如果想建立自己的 Workspace ,该怎么办呢?

很简单,回到咱们的 Project 页面下,本例是这个链接

img_246af2d8d47edbb2db41884cd9e56783.jpe

你会看到,每个项目下,都可以使用 Create Workspace 这个按钮创建新的 Workspace 。

Floydhub 会询问你,使用哪种方式建立新的 Workspace 。

img_25c5999fa7da205329ce97a19d5cc4ca.jpe

这里咱们选择左侧的 Start from scratch 。

下面选择使用的环境。

img_ad2199ae8763466135fbd5e84b3c95f1.jpe

我们将其改成 Tensorflow 1.9 和 GPU 环境。

img_aa660690ce7021163822c3e464ffd8fc.jpe

点击 Create Workspace 按钮,就创建完毕了。

img_1546fe3e18daf061ae95f9ae8357158a.jpe

点击 try-keras-boston-house-regression workspace 这个链接。

我们就可以看到,一个 Jupyter Lab 界面为我们准备好了。

img_bd74229d5709b9e9bdb82f18cd84ab48.jpe

这个环境里面,Tensorflow 和 GPU 的配置都是现成的。

你不用去考虑如何执行 CLI 命令,只需要在其中像平时一样输入 Python 代码,调用 Keras 与 Tensorflow 命令就可以了。

是不是更方便呢?

利用 Floydhub ,开始你的深度学习之旅吧。

小结

做深度学习任务,不一定非得自己购置设备。主要看具体需求。

假如你不需要全天候运行深度学习代码,只是偶尔才遇到计算开销大的任务,这种云端 GPU ,是更为合适的。

你花钱买了深度学习硬件设备,就只有贬值的可能。而且如果利用率低,也是资源浪费。

而同样的租赁价格,你可以获得的计算能力,却是越来越强的。

这就是摩尔定律的威力吧。

你用没用过其他的云端 GPU 服务?价格和易用程度,与 FloydHub 相较如何?

如果你对数据科学感兴趣,欢迎阅读我的系列教程。索引贴为《如何高效入门数据科学?》。

喜欢请点赞。还可以微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
224 0
测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的、网络搜集(完善)、工作日常讨论等,分为以下十个部分,供大家参考。如有错误的地方,欢迎指正。有更多的面试题或面试中遇到的坑,也欢迎补充分享。希望大家都能找到满意的工作,共勉之!~
2745 0
18节视频课+编程源码揭秘Python的高阶编程之函数 | 技术日报(19期)
经过一周的Python合辑推送,Python系列就先告一段落啦,之后会给大家推送面试类干货~大家有想要的干货也可以评论区留言哟
664 0
交互式编程及注释的分类 | 手把手教你入门Python之十二
本节重点介绍交互式编程和注释的分类
2180 0
18节视频课+编程源码揭秘Python的高阶编程之函数
函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
2285 0
编程萌新看过来,一文带你入门Python | 伸手党福利篇
这是一篇介绍Python入门的文章,对于没有任何编程经验甚至不懂电脑的新手都是非常实用的。本文会从计算机的使用开始讲解,中间搭配一些经典的针对知识点的练习,最终大家都可以用Python开发出一个小游戏,快来跟我一起往下看!
5383 0
带你读《Python真好玩:教孩子学编程》之三:这是什么?变量
本书试图以小朋友的思考方式进行编写,尽可能讲解得简单易懂,而且囊括一个Python程序员应该学习和掌握的基本知识,包括变量、条件判断、循环、列表、函数、类与对象、模块、文件、注释、异常与调试等,但果果老师尽可能以图解的形式介绍这些知识。
1025 0
《Python编程从0到1》笔记5——图解递归你肯定看完就能懂!
本小节的示例比较简单,因为在每次递归过程中原问题仅缩减为单个更小的问题。这样的问题往往能够用简单循环解决。这类递归算法的函数调用图是链状结构。这种递归类型被称为“单重递归”(single recursion)。
711 0
《Python编程从0到1》笔记4——你分得清“索引和切片”吗?
Python为序列类型(sequence types) 提供了独特的索引(indexing)和切片(slicing)机制以访问序列的某个元素或某一部分。
546 0
+关注
王树义
终身学习者、大学教师。稍微懂一点儿写作、演讲、Python和机器学习。公众号“玉树芝兰”(nkwangshuyi)。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python 系列直播——深入Python与日志服务,玩转大规模数据分析处理实战第二讲
立即下载
Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载