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

简介: 本文为你介绍,如何在 GPU 深度学习云服务里,上传和使用自己的数据集。疑问《如何用云端 GPU 为你的 Python 深度学习加速?》一文里,我为你介绍了深度学习环境服务 FloydHub 。
img_622963d7f96f532979a021e65b2ee64a.jpe

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

疑问

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

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

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

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

img_94e4e530f9b661fabfb44635abf98217.jpe

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

img_a825f7515f05e57f7e619fe96913e375.jpe

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

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

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

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

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

img_4c7f644bd73fd289feb31ff101d99e2e.jpe

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

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

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

img_1053adf8378ee4dd1e981eeaf52ba9d3.jpe

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

注册

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

img_c242b18bec432b3ef327c8759a78db0f.jpe

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

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

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

img_b5102382ebdaa6161ca5a3b0c9b520e9.jpe

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

看谁手快吧。

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

img_b81b0454cd3cb5a9635132617fd68926.png

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

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

pip install -U russell-cli

然后你需要登录:

russell login

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

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

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

环境

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

img_5154bf3fa64c85d3556055b71b5a0b29.jpe

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

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

img_2825afd6c72577f9a049f9e5fc5e0143.jpe

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

img_8d448b1d2a82dee1427ae6ec79d978c6.jpe

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

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

数据

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

img_9d462984047441f5e76b0ee8977bd534.jpe

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

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

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

img_193517d0681deb967e06e439b48dc304.jpe

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

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

img_6cc9468aff2e5877c59c0f31cdff4f58.jpe

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

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

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

img_5a7731687d963b50bb6b223c5d5c9971.jpe

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

img_665b5a2f335d0aadff39023c70e5f014.jpe

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

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

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

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

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

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

img_e7078c6c46573bc18f378db33aabf2da.jpe

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

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

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

运行

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

img_491cade6408844f221c20797d017bcf9.jpe

你得给项目起个名称。

可以直接叫做 cats_dog_small_vgg16

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

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

img_c4b6b5a5585607ba6e3d7768337f4b08.png

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

方法是这样的:

复制上图页面的 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。更多选项,可以参考文档说明
img_34361c5ab5218c6979cd5577c5c3be07.jpe

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

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

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

img_d9bf84e22a91131eecb525651b07f7cd.jpe

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

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 为我们提供的默认输出路径。存在这里面的数据,在运行结束后,也会在云端存储空间中保存下来。

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

img_7fd67f4859a69ce37635ab9947c71bd2.jpe

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

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

img_5892c15eb5dd1ce5bac74fe5054e4bd1.jpe

改进

在实际使用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)

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

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
目录
相关文章
|
1天前
|
机器学习/深度学习 并行计算 算法框架/工具
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
|
2月前
|
机器学习/深度学习 编解码 运维
深度学习数据集合(交通标志/火焰/手写字符/道路裂缝数据集)
深度学习数据集合(交通标志/火焰/手写字符/道路裂缝数据集)
41 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与GPU集群的神奇结合
深度学习与GPU集群的神奇结合 随着人工智能的飞速发展,深度学习和神经网络已经成为了AI领域的热点。然而,你是否知道,为了让这些复杂模型运行得更加高效,有一种强大的工具不可或缺,那就是GPU。今天,我们就来揭开GPU与深度学习之间的神秘面纱。
32 1
|
4月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)
【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)
100 0
|
4月前
|
机器学习/深度学习 数据采集 TensorFlow
【Tensorflow深度学习】实现手写字体识别、预测实战(附源码和数据集 超详细)
【Tensorflow深度学习】实现手写字体识别、预测实战(附源码和数据集 超详细)
84 1
|
4月前
|
机器学习/深度学习 缓存 PyTorch
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
271 0
|
4月前
|
机器学习/深度学习 自然语言处理 并行计算
GPU在深度学习中的应用
GPU在深度学习中的应用
|
5月前
|
机器学习/深度学习 网络协议 Docker
基于docker搭建conda深度学习环境(支持GPU加速)
在Ubuntu系统,创建一个docker,然后搭建conda深度学习环境,这样可以用conda或pip安装相关的依赖库了。
141 0
|
6月前
|
机器学习/深度学习 数据可视化 算法
【深度学习】实验02 鸢尾花数据集分析
【深度学习】实验02 鸢尾花数据集分析
87 0
|
6月前
|
机器学习/深度学习 并行计算 安全
2023 年最佳多 GPU 深度学习系统指南
2023 年最佳多 GPU 深度学习系统指南
101 1

热门文章

最新文章