发布于: Nov 30, 2022

【概要】本文中,我们以机器学习中的图像分类算法为例,介绍典型的机器学习模型训练的输入数据准备过程

数据挖掘和机器学习的关系密不可分,机器学习是建立在大量数据的基础之上。Amazon SageMaker 是一种完全托管的端到端机器学习服务,数据科研人员、开发人员和机器学习专家可以快速、大规模地构建、训练和托管机器学习模型。这极大地推进了您所有的机器学习工作,让您能够将机器学习技术迅速融入生产应用程序。Amazon SageMaker 的主要工作组件包括:算法编写、模型训练、模型评估、模型托管等。

模型训练是机器学习工作流程中至关重要的一步,而为模型训练提供灵活、高效、准确的输入数据则直接决定了训练结果质量。通常,模型训练的工作不是一蹴而就,而是一个动态调整,循序渐进的过程,需要反复调整以及多个部门和工作流程的协作完成。

本文中,我们以机器学习中的图像分类算法为例,介绍典型的机器学习模型训练的输入数据准备过程:

为了满足机器学习图像分类算法对训练和验证数据量的要求,我们会维护一个巨大的图片仓库,里面存放着几万甚至更多的分类图片文件。数据准备团队每天都会往仓库中增加新获取的图片文件并完成分类。同时,因为一些原因(比如,发现之前的分类错误或者弃用一些类别),我们也会对仓库中的图片文件进行修改或删除。

在实际的机器学习训练任务中,为了控制训练任务的时间和规模,我们会根据模型使用的场景,选取完整仓库中的部分数据或者一个子集来组成训练数据集和验证数据集。

 

 

Amazon SageMaker 的训练任务支持两种输入模式:管道模式和文件模式。

以管道模式运行训练任务的时候,训练实例不会将数据完全下载到本地后才运行,训练实例按需从指定的管道中读取训练数据。管道模式可以加速训练实例启动和开始训练的过程,尤其是当训练数据量非常大,比如超过 16TB 的时候,训练实例的本地磁盘无法承载全量的运行数据时,必须要使用管道模式才能进行训练。

接下去,我们主要看一下 Amazon SageMaker 训练任务的文件模式输入,训练任务文件模式下目前支持的数据源包括:Amazon S3、Amazon EFS 和 Amazon FSx for Lustre 。不同的数据输入源以通道的形式提供给训练实例作为输入数据,一个训练实例可以最多配置 20 个不同的输入源通道,不同的通道可以使用不同的数据源类型。

我们使用 Amazon SageMaker 提供的内置图像分类算法进行图像分类模型的训练,内置算法可以接收两种数据格式,一种是 RecordIO 格式,另一种是图片文件,关于如何处理数据到 RecordIO 格式可以参考 MXNet 的官方文档。以下我们重点介绍图片文件的输入方式:

图像分类算法接受 4 个输入通道:train, validation, train_lst, validation_lst

分别对应训练数据集,验证数据集,训练数据集列表文件,验证数据集列表文件,

数据集和数据集列表文件在格式、存储模式和使用行为上有很大的差异。

数据集本身是图片文件,以某种形式的目录结构存放,比如:按时间、按类别、按部门等。图片文件一经生成后文件内容就固定下来,可以作为一个整体被读取,替换或删除。不同训练任务中,从图片仓库中选取部分图片组成训练数据集,同一个图片文件可能在不同的训练任务中被多次重复使用到。

数据集列表文件是一个以 .lst 为扩展名,文件内部以制表符 (tab) 作为分割,为数据集里的图片文件提供索引信息。

一个典型的 .lst 索引文件格式如下:

5      1   your_image_directory/train_img_dog1.jpg

1000   0   your_image_directory/train_img_cat1.jpg

22     1   your_image_directory/train_img_dog2.jpg

第一列是图像文件的唯一索引号;第二列代表图像类别对应的数字号 (从 0 开始),比如 0 代表猫,1 代表狗;第三列是文件路径包括了文件相对目录和文件名。

数据集列表文件需要根据每次训练任务的适用场景生成,可能频繁被读取和修改,包括:

  • 多次递进的训练任务中需要向列表文件中添加更多的图片文件索引记录;
  • 因为发现分类信息错误,需要修改部分行的信息;
  • 因为图片仓库的修改,需要替换部分行的信息;
  • 多个 lst 文件之间需要频繁进行 diff,通过比较输入数据的差异来确认对训练输出模型的影响;
  • 分类规则改变,原有分类细化分支或者合并到新的分类;
  • 需要在团队之间共享协作,完成对同一个 .lst 文件内容的确认和创建;
  • 其他一些场景。

以图片形式的保存的图片仓库适合以对象形成存储于 Amazon S3 上,当然,如果您希望避免反复从 Amazon S3 下载大量的图片数据,或者现有的一些辅助工具是基于 POSIX 文件系统接口开发的,那么,Amazon EFS 或 Amazon FSx for Lustre 同样可以提供一个简便、高效的数据持久化存储来构建您的图片仓库。

对列表文件 .lst 来说,需要频繁创建和修改,并可能需要结合工作流程,在多个成员之间协作的情况下完成最终文件内容的确定。因此列表文件 .lst 适合保存在具备 POSIX 接口的共享文件系统上,包括 Amazon EFS 和 Amazon FSx for Lustre。当然您也可以使用 S3 来保存 .lst 文件,但考虑到在文件块级别修改和读取上的便捷性以及文件分享简便性来说,在 POSIX 支持的共享文件系统上直接使用 .lst 文件的工作流程还是会更简便一些。

 

相关文章