数据准备和预处理在一个深度学习训练过程中扮演着非常重要的角色,它影响着模型训练的速度和质量。
而 TensorFlow 对于 HDFS 的支持,将大数据与深度学习相集成,完善了从数据准备到模型训练的完整链条。在阿里云容器服务深度学习解决方案中,为 TensoFlow 提供了 OSS、NAS 和 HDFS 三种分布式存储后端的支持。
本文介绍如何将数据转化为 TFRecord 格式,并且将生成的 TFRecord 文件保存到 HDFS 中,本示例使用阿里云 Elastic MapReduce(E-MapReduce)的 HDFS 服务。
为什么要使用 TFRecord
TFRecord 是 TensorFlow 内定的统一标准数据格式,可以支持多线程数据读取,并且可以通过 batch size 和 epoch 参数来控制训练时单次 batch 的大小和样本文件迭次数,同时能更好的利用内存和方便数据的复制和移动,所以是利用 TensorFlow 进行大规模深度学习训练的首选。
步骤 1 创建 E-MapReduce 集群
E-MapReduce 是运行在阿里云平台上的一种大数据处理的系统解决方案。更多详细信息参见
E-MapReduce 概述。
登录
E-MapReduce 管理控制台 创建一个 E-MapReduce 集群。有关创建过程,参见
创建 E-MapReduce 集群。
本示例创建了一个位于华南 1 地域的集群,且 [backcolor=transparent]网络类型 为 [backcolor=transparent]VPC。
步骤 2 创建容器集群,并且打通两个集群间的网络
- 登录 容器服务管理控制台,在同一个 VPC 下创建 GPU 容器集群。
具体操作,参见 创建 GPU 集群。
- 登录 ECS 管理控制台 将容器服务集群的节点加入到 E-MapReduce 集群对应的安全组。
选择安全组所在的地域(本示例为华南 1),选择安全组并单击右侧的 [backcolor=transparent]管理实例。
- 单击 [backcolor=transparent]添加实例,选择容器集群中的节点并单击 [backcolor=transparent]确定。
步骤 3 生成 TFRecord 数据
本示例利用模型训练服务提供运行环境执行 convert_to_records.py,生成 TFRecord 数据,保存到 HDFS 中。
- 登录 容器服务管理控制台。
- 单击左侧导航栏中的 [backcolor=transparent]镜像与方案 > [backcolor=transparent]解决方案。
- 在 [backcolor=transparent]模型训练 中单击 [backcolor=transparent]创建。
填写模型训练的配置信息并单击 [backcolor=transparent]确定。
本示例的具体配置如下所示:
- [backcolor=transparent]训练框架:tensorflow:1.0.0。
- [backcolor=transparent]单Worker使用GPU数量: 0。
- [backcolor=transparent]数据卷名:不使用数据卷。
- [backcolor=transparent]Git地址:https://code.aliyun.com/deeplearning/mnist-examples.git。
- [backcolor=transparent]执行命令: python neural_style.py --iterations 50000 --content /neural-style/examples/1-content.jpg --styles /neural-style/examples/1-style.jpg --output /neural-style/output.jpg。
运行成功后,可以查看执行的日志,显示 TFRecord 文件已经保存到了 HDFS。
登录到 E-MapReduce 机器上查看产生的 TFRecord 文件。[backcolor=transparent]
# hdfs dfs -ls /mnist-tfrecord
[backcolor=transparent]SLF4J[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Class[backcolor=transparent] path contains multiple SLF4J bindings[backcolor=transparent].
[backcolor=transparent]SLF4J[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Found[backcolor=transparent] binding [backcolor=transparent]in[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]jar[backcolor=transparent]:[backcolor=transparent]file[backcolor=transparent]:[backcolor=transparent]/opt/[backcolor=transparent]apps[backcolor=transparent]/[backcolor=transparent]hadoop[backcolor=transparent]-[backcolor=transparent]2.7[backcolor=transparent].[backcolor=transparent]2[backcolor=transparent]/[backcolor=transparent]share[backcolor=transparent]/[backcolor=transparent]hadoop[backcolor=transparent]/[backcolor=transparent]common[backcolor=transparent]/[backcolor=transparent]lib[backcolor=transparent]/[backcolor=transparent]slf4j[backcolor=transparent]-[backcolor=transparent]log4j12[backcolor=transparent]-[backcolor=transparent]1.7[backcolor=transparent].[backcolor=transparent]10.jar[backcolor=transparent]![backcolor=transparent]/org/[backcolor=transparent]slf4j[backcolor=transparent]/[backcolor=transparent]impl[backcolor=transparent]/[backcolor=transparent]StaticLoggerBinder[backcolor=transparent].[backcolor=transparent]class[backcolor=transparent]]
[backcolor=transparent]SLF4J[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Found[backcolor=transparent] binding [backcolor=transparent]in[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]jar[backcolor=transparent]:[backcolor=transparent]file[backcolor=transparent]:[backcolor=transparent]/opt/[backcolor=transparent]apps[backcolor=transparent]/[backcolor=transparent]tez[backcolor=transparent]-[backcolor=transparent]0.8[backcolor=transparent].[backcolor=transparent]4[backcolor=transparent]/[backcolor=transparent]lib[backcolor=transparent]/[backcolor=transparent]slf4j[backcolor=transparent]-[backcolor=transparent]log4j12[backcolor=transparent]-[backcolor=transparent]1.7[backcolor=transparent].[backcolor=transparent]10.jar[backcolor=transparent]![backcolor=transparent]/org/[backcolor=transparent]slf4j[backcolor=transparent]/[backcolor=transparent]impl[backcolor=transparent]/[backcolor=transparent]StaticLoggerBinder[backcolor=transparent].[backcolor=transparent]class[backcolor=transparent]]
[backcolor=transparent]SLF4J[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]See[backcolor=transparent] http[backcolor=transparent]:[backcolor=transparent]//www.slf4j.org/codes.html#multiple_bindings for an explanation.
[backcolor=transparent]SLF4J[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Actual[backcolor=transparent] binding [backcolor=transparent]is[backcolor=transparent] of type [backcolor=transparent][[backcolor=transparent]org[backcolor=transparent].[backcolor=transparent]slf4j[backcolor=transparent].[backcolor=transparent]impl[backcolor=transparent].[backcolor=transparent]Log4jLoggerFactory[backcolor=transparent]]
[backcolor=transparent]Found[backcolor=transparent] [backcolor=transparent]3[backcolor=transparent] items
[backcolor=transparent]-[backcolor=transparent]rw[backcolor=transparent]-[backcolor=transparent]r[backcolor=transparent]--[backcolor=transparent]r[backcolor=transparent]--[backcolor=transparent] [backcolor=transparent]3[backcolor=transparent] root hadoop [backcolor=transparent]8910000[backcolor=transparent] [backcolor=transparent]2017[backcolor=transparent]-[backcolor=transparent]05[backcolor=transparent]-[backcolor=transparent]23[backcolor=transparent] [backcolor=transparent]19[backcolor=transparent]:[backcolor=transparent]34[backcolor=transparent] [backcolor=transparent]/[backcolor=transparent]mnist[backcolor=transparent]-[backcolor=transparent]tfrecord[backcolor=transparent]/[backcolor=transparent]test[backcolor=transparent].[backcolor=transparent]tfrecords
[backcolor=transparent]-[backcolor=transparent]rw[backcolor=transparent]-[backcolor=transparent]r[backcolor=transparent]--[backcolor=transparent]r[backcolor=transparent]--[backcolor=transparent] [backcolor=transparent]3[backcolor=transparent] root hadoop [backcolor=transparent]49005000[backcolor=transparent] [backcolor=transparent]2017[backcolor=transparent]-[backcolor=transparent]05[backcolor=transparent]-[backcolor=transparent]23[backcolor=transparent] [backcolor=transparent]19[backcolor=transparent]:[backcolor=transparent]33[backcolor=transparent] [backcolor=transparent]/[backcolor=transparent]mnist[backcolor=transparent]-[backcolor=transparent]tfrecord[backcolor=transparent]/[backcolor=transparent]train[backcolor=transparent].[backcolor=transparent]tfrecords
[backcolor=transparent]-[backcolor=transparent]rw[backcolor=transparent]-[backcolor=transparent]r[backcolor=transparent]--[backcolor=transparent]r[backcolor=transparent]--[backcolor=transparent] [backcolor=transparent]3[backcolor=transparent] root hadoop [backcolor=transparent]4455000[backcolor=transparent] [backcolor=transparent]2017[backcolor=transparent]-[backcolor=transparent]05[backcolor=transparent]-[backcolor=transparent]23[backcolor=transparent] [backcolor=transparent]19[backcolor=transparent]:[backcolor=transparent]33[backcolor=transparent] [backcolor=transparent]/[backcolor=transparent]mnist[backcolor=transparent]-[backcolor=transparent]tfrecord[backcolor=transparent]/[backcolor=transparent]validation[backcolor=transparent].[backcolor=transparent]tfrecords