如何在 GPU 深度学习云服务里,使用自己的数据集?

本文为你介绍,如何在 GPU 深度学习云服务里,上传和使用自己的数据集。

疑问

如何用云端 GPU 为你的 Python 深度学习加速?》一文里,我为你介绍了深度学习环境服务 FloydHub 。

文章发布后,有读者在后台提出来两个问题:

  1. 我没有外币信用卡,免费时长用完后,无法续费。请问有没有类似的国内服务?
  2. 我想使用自己的数据集进行训练,该怎么做?

第一个问题,有读者替我解答了。

我看了一下,这里的 Russell Cloud ,确实是一款跟 FloydHub 类似的 GPU 深度学习云服务。

可是感谢之后,我才发现原来他是 Russell Cloud 的开发人员。

于是这几天,使用中一遇到问题,我就直接找他答疑了。

因为有这种绿色通道,响应一直非常迅速。用户体验很好。

这款国内服务的优势,有以下几点:

首先是可以支付宝与微信付款,无需 Visa 或者 Mastercard 信用卡,很方便;

其次是 Russell Cloud 基于阿里云,访问速度比较快,而且连接稳定。在上传下载较大规模数据的时候,优势比较明显。与之相比,FloydHub 上传500MB左右数据的时候,发生了两次中断。

第三是文档全部用中文撰写,答疑也用中文进行。对英语不好的同学,更友好。

第四是开发团队做了微创新。例如可以在微信小程序里面随时查看运行结果,以及查询剩余时长信息。

解决了第一个问题后,我用 Russell Cloud 为你演示,如何上传你自己的数据集,并且进行深度学习训练。

注册

使用之前,请你先到 Russell Cloud 上注册一个免费账号。

因为都是中文界面,具体步骤我就不赘述了。

注册成功后,你就拥有了1个小时的免费 GPU 使用时长。

如果你用我的邀请链接注册,可以多获得4个小时免费 GPU 使用时间。

我手里只有这5个可用的邀请链接。你如果需要,可以直接输入。

看谁手快吧。

注册之后,进入控制台,你可以看到自己的相关信息。

其中有个 Token 栏目,是你的登录信息。下面我给你讲讲怎么用。

你需要下载命令行工具,方法是进入终端,执行:

pip install -U russell-cli

然后你需要登录:

russell login

这时候根据提示,把刚才的 Token 输入进去,登录就完成了。

与 FloydHub 不同,大多数情况下 Russell Cloud 的身份与项目验证,用的都是这种 Token 的方式。

如果你对终端命令行操作还不是很熟悉,欢迎参考我的《如何安装Python运行环境Anaconda?(视频教程)》,里面有终端基本功能详细执行步骤的视频讲解。

环境

下文用到的数据和执行脚本,我都已经放到了这个 gitlab 链接

你可以直接点击这里下载压缩包,之后解压。

解压后的目录里,包含两个子文件夹。

cats_dogs_small_vgg16 包含我们的运行脚本。只有一个文件。

它的使用方法,我们后面会介绍。

先说说,你最关心的数据集上传问题。

数据

解压后目录中的另一个文件夹,cats_and_dogs_small,就包含了我们要使用和上传的数据集。

如上图所示,图像数据被分成了3类。

这也是 Keras 默认使用的图像数据分类标准规范。

打开训练集合 train ,下面包含两个目录,分别是“猫”和“狗”。

当你使用 Keras 的图片处理工具时,拥有这样的目录结构,你就可以直接调用 ImageDataGenerator 下的flow_from_directory 功能,把目录里的图片数据,直接转化成为模型可以利用的张量(tensor)。

打开 testvalidation 目录,你会看到的目录结构和 train 相同。

请你先在 Russell Cloud 上建立自己的第一个数据集。

主页上,点击“控制台”按钮。

在“数据集”栏目中选择“创建数据集”。

如上图,填写数据集名称为“cats_and_dogs_small”。

这里会出现数据集的 ID ,我们需要用它,将云端的数据集,跟本地目录连接起来。

回到终端下面,利用 cd 命令进入到解压后文件夹的 cats_and_dogs_small 目录下,执行:

russell data init --id 你的数据集ID
russell data upload

请把上面“你的数据集ID”替换成你真正的数据集ID。

执行这两条命令,数据就被上传到了 Russell Cloud。

上传成功后,回到 Russell Cloud 的数据集页面,你可以看到“版本”标签页下面,出现了1个新生成的版本。

注意上图右侧,有一个“复制”按钮,点击它,复制数据集该版本的 Token 。

一定要注意,是从这里复制信息,而不是数据集首页的 ID 那里。

之前因为搞错了这个事儿,浪费了我很长时间。

运行

要执行你自己的深度学习代码,你需要在 Russell Cloud 上面,新建一个项目。

你得给项目起个名称。

可以直接叫做 cats_dog_small_vgg16

其他项保持默认即可,点击“创建项目”。

出现下面这个页面,就证明项目新建成功。

同样,你需要把本地的代码文件夹,和刚刚新建的项目连接起来。

方法是这样的:

复制上图页面的 ID 信息。

回到终端下,利用 cd 命令进入到解压后文件夹的 cats_dogs_small_vgg16 目录下,执行:

russell init --id 你刚才复制的ID

这样,你在本地的修改,就可以被 Russell Cloud 记录,并且更新任务运行配置了。

执行下面这条命令,你就可以利用 Russell Cloud 远端的 GPU ,运行卷积神经网络训练脚本了。

russell run "python cats_dogs_small_vgg16_augmentation_freeze_russell.py" --gpu --data 92e239eca8e649928610d95d54bb3602:cats_and_dogs_small --env tensorflow-1.4

解释一下这条命令中的参数:

  • run 后面的引号包括部分,是实际执行的命令;
  • gpu 是告诉 Russell Cloud,你选择 GPU 运行环境,而不是 CPU;
  • data 后面的数字串(冒号之前),是你刚刚生成的数据集版本的对应标识;冒号后面,是你给这个数据集挂载目录起的名字。假设这里挂载目录名字叫“potato”,那么在代码里面,你的数据集位置就是“/input/potato”;
  • env 是集成深度学习库环境名称。我们这里指定的是 Tensorflow 1.4。更多选项,可以参考文档说明

输入上述命令后, Russell Cloud 就会把你的项目代码同步到云端,然后根据你指定的参数执行代码。

你在本地,是看不到执行结果的。

你需要到网页上,查看“任务”下“运行日志”,在系统提供的模拟终端下,查看运行输出结果。

为了把好不容易深度学习获得的结果保存下来,你需要用如下语句保存模型:

saved_model = output_dir / 'cats_and_dogs_small_finetune.h5'
model.save(saved_model)

history.history 对象里,包含了训练过程中的一些评估数据,例如准确率(acc)和损失值(loss),也需要保存。

这里你可以采用 pickle 来完成:

import pickle
with open(Path(output_dir, 'data.pickle'), 'wb') as f:
    pickle.dump(history.history, f)

细心的你,一定发现了上述代码中,出现了一个 output_dir, 它的真实路径是 output/

它是 Russell Cloud 为我们提供的默认输出路径。存在这里面的数据,在运行结束后,也会在云端存储空间中保存下来。

你可以在“任务记录”的“输出”项目下看到保存的数据。它们已被保存成为一个压缩包。

下载下来并解压后,你就可以享受云端 GPU 的劳动果实了。

你可以用 history 保存的内容绘图,或者进一步载入训练好的模型,对新的数据做分类。

改进

在实际使用Russell Cloud中,你可能会遇到一些问题。

我这里把自己遇到的问题列出来,以免你踩进我踩过的坑。

首先,深度学习环境版本更新不够及时。

本文写作时 Tensorflow 稳定版本已经是 1.8 版,而 Russell Cloud 最高支持的版本依然只有 1.6。文档里面的最高版本,更是还停留在 1.4。默认的 Keras,居然用的还是 Python 3.5 + Tensorflow 1.1。

注意千万别直接用这个默认的 Keras ,否则 Python 3.6 后版本出现的一些优秀特性无法使用。例如你将 PosixPath 路径(而非字符串)作为文件地址参数,传入到一些函数中时,会报错。那不是你代码的错,是运行环境过于老旧。

其次,屏幕输出内容过多的时候(例如我跑了 100 个 epoch, 每个显示 100 条训练进度),“运行日志”网页上模拟终端往下拉,就容易出现不响应的情况。变通的方法,是直接下载 log 文件,阅读和分析。

第三,Keras 和 Tensorflow 的许多代码库(例如使用预训练模型),都会自动调用下载功能,从 github 下载数据。但是,因为国内的服务器到 github 之间连接不够稳定,因此不时会出现无法下载,导致程序超时,异常退出。

上述问题,我都已经反馈给开发者团队。对方已表示,会尽快加以解决。

如果你看到这篇文章时,上面这些坑都不存在了,那就再好不过了。

小结

本文为你推荐了一款国内 GPU 深度学习云服务 Russell Cloud 。如果你更喜欢读中文文档,没有外币信用卡,或是访问 FloydHub 和 Google Colab 不是很顺畅,都可以尝试一下。

通过一个实际的深度学习模型训练过程,我为你展示了如何把自己的数据集上传到云环境,并且在训练过程中挂载和调用它。

你可以利用平台赠送的 GPU 时间,跑一两个自己的深度学习任务,并对比一下与本地 CPU 运行的差别。

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

如果你对数据科学感兴趣,不妨阅读我的系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343