乐趣区

关于存储:在Amazon-SageMaker中灵活使用多种存储服务

Amazon SageMaker 是一种齐全托管的端到端机器学习服务,数据科研人员、开发人员和机器学习专家能够疾速、大规模地构建、训练和托管机器学习模型。这极大地推动了您所有的机器学习工作,让您可能将机器学习技术迅速融入生产应用程序。Amazon SageMaker 的次要工作组件包含:算法编写、模型训练、模型评估、模型托管等

模型训练是机器学习工作流程中至关重要的一步,而为模型训练提供灵便、高效、精确的输出数据则间接决定了训练后果品质。通常,模型训练的工作不是欲速不达,而是一个动静调整,循序渐进的过程,须要重复调整以及多个部门和工作流程的合作实现。

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

为了满足机器学习图像分类算法对训练和验证数据量的要求,咱们会保护一个微小的图片仓库,外面寄存着几万甚至更多的分类图片文件。数据筹备团队每天都会往仓库中减少新获取的图片文件并实现分类。同时,因为一些起因(比方,发现之前的分类谬误或者弃用一些类别),咱们也会对仓库中的图片文件进行批改或删除。

在理论的机器学习训练任务中,为了管制训练任务的工夫和规模,咱们会依据模型应用的场景,选取残缺仓库中的局部数据或者一个子集来组成训练数据集和验证数据集。

不同格局输出数据的应用差别

Amazon SageMaker 的训练任务反对两种输出模式:管道模式 文件模式

以管道模式运行训练任务的时候,训练实例不会将数据齐全下载到本地后才运行,训练实例按需从指定的管道中读取训练数据。管道模式能够减速训练实例启动和开始训练的过程,尤其是当训练数据量十分大,比方超过 16TB 的时候,训练实例的本地磁盘无奈承载全量的运行数据时,必须要应用管道模式能力进行训练。

接下去,咱们次要看一下 Amazon SageMaker 训练任务的文件模式输出,训练任务文件模式下目前反对的数据源包含:Amazon S3、Amazon EFS 和 Amzon FSx for Lustre。不同的数据输出源以通道的模式提供给训练实例作为输出数据,一个训练实例能够最多配置 20 个不同的输出源通道,不同的通道能够应用不同的数据源类型。

咱们应用 Amazon SageMaker 提供的内置图像分类算法进行图像分类模型的训练,内置算法能够接管两种数据格式,一种是 RecordIO 格局,另一种是图片文件,对于如何解决数据到 RecordIO 格局能够参考 MXNet 的官网文档。以下咱们重点介绍图片文件的输出形式:

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

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

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

数据集自身是图片文件,以某种模式的目录构造寄存,比方:按工夫、按类别、按部门等。图片文件一经生成后文件内容就固定下来,能够作为一个整体被读取,替换或删除。不同训练任务中,从图片仓库中选取局部图片组成训练数据集,同一个图片文件可能在不同的训练任务中被多次重复应用到。

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

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

15      1   your_image_directory/train_img_dog1.jpg
2
31000   0   your_image_directory/train_img_cat1.jpg
4
522     1   your_image_directory/train_img_dog2.jpg

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

数据集列表文件须要依据每次训练任务的实用场景生成,可能频繁被读取和批改,包含:

  • 屡次递进的训练任务中须要向列表文件中增加更多的图片文件索引记录;
  • 因为发现分类信息谬误,须要批改局部行的信息;
  • 因为图片仓库的批改,须要替换局部行的信息;
  • 多个 lst 文件之间须要频繁进行 diff,通过比拟输出数据的差别来确认对训练输入模型的影响;
  • 类规定扭转,原有分类细化分支或者合并到新的分类;
  • 须要在团队之间共享合作,实现对同一个.lst 文件内容的确认和创立;
  • 其余一些场景。

以图片模式的保留的图片仓库适宜以对象造成存储于 Amazon S3 上,当然,如果您心愿防止重复从 Amazon S3 下载大量的图片数据,或者现有的一些辅助工具是基于 POSIX 文件系统接口开发的,那么,Amazon EFSAmazon FSx for Lustre 同样能够提供一个简便、高效的数据长久化存储来构建您的图片仓库。

对列表文件.lst 来说,须要频繁创立和批改,并可能须要联合工作流程,在多个成员之间合作的状况下实现最终文件内容的确定。因而列表文件.lst 适宜保留在具备 POSIX 接口的共享文件系统上,包含 Amazon EFS 和 Amazon FSx for Lustre。当然您也能够应用 S3 来保留.lst 文件,但思考到在文件块级别批改和读取上的便捷性以及文件分享简便性来说,在 POSIX 反对的共享文件系统上间接应用.lst 文件的工作流程还是会更简便一些。

如何配置输出通道和数据源

对于输出通道的具体配置,您能够在 Amazon SageMaker 控制台的训练任务创立过程中通过集成界面来具体指定:

以下是 S3 作为输出通道数据源的配置:

以下是 EFS 作为输出通道数据源的配置:

以下是应用 Amazon FSx for Lustre 作为输出通道数据源的配置:

如果您应用编程的形式来创立和提交 Amazon SageMaker 的训练任务,您能够应用以下的 API 来构建不同的输出数据源:

1from sagemaker.inputs import FileSystemInput
2from sagemaker.inputs import TrainingInput
3
4content_type = 'application/x-image'
5
6
7fs_train = FileSystemInput(file_system_id='fs-c0de3680',
8                                    file_system_type='EFS',
9                                    directory_path='/caltech/256_ObjectCategories',
10                                    content_type=content_type,   
11                                    file_system_access_mode='ro')
12fs_validation = FileSystemInput(file_system_id='fs-c0de3680',
13                                    file_system_type='EFS',
14                                    directory_path='/caltech/256_ObjectCategories',
15                                    content_type=content_type,
16                                    file_system_access_mode='ro')
17
18fs_train_lst = TrainingInput(s3train_lst, content_type=content_type)
19
20fs_validation_lst = FileSystemInput(file_system_id='fs-0cd42e47a9d3be5e1',
21                                    file_system_type='FSxLustre',
22                                    directory_path='/k4jhtbmv/image-classification/validation_lst',
23                                    content_type=content_type,
24                                    file_system_access_mode='ro')
25
26
27data_channels = {'train': fs_train, 'validation': fs_validation, 
28                 'train_lst': fs_train_lst, 'validation_lst':fs_validation_lst}

在以上的代码例子中训练集和验证集都以文件对象模式存储于 Amazon S3 上。思考到 lst 文件的应用特点,将用于训练集的.lst 列表文件寄存于 EFS 上,将用户验证集的.lst 列表文件寄存于 Amazon FSx for Lustre 上。

通过以上代码创立的训练任务会从来自于 3 个不同的数据源获取训练所需的输出数据,减少了训练任务数据筹备的灵活性。

如何抉择存储服务

Amazon SageMaker 能够同时应用 Amazon S3,Amazon EFS 和 Amazon FSx for Lustre 三种不同的存储服务类型作为输出通道的数据源。在具体的机器学习场景中如何抉择适合的存储服务呢?

咱们倡议从确定以后您的训练数据保留的地位开始动手:

如果您的训练数据曾经在 Amazon S3 上,并且对实现目前训练任务的工夫感到称心,那您能够持续应用 Amazon SageMaker 在 Amazon S3 进行训练任务。然而,如果您须要更快地启动训练任务,更短的训练工夫,咱们建议您能够应用与 Amazon S3 原生集成的文件系统 Amazon FSx for Lustre.

通过 Amazon FSx for Lustre,Amazon SageMaker 能够高速拜访您在 Amazon S3 上的训练数据,从而减速您的机器学习训练任务。在您第一次运行训练任务时,Amazon FSx for Lustre 会主动把训练数据从 Amazon S3 下载并提供给 Amazon SageMaker。此外,训练任务的后续迭代能够持续应用这些数据,防止了反复从 Amazon S3 屡次下载同样的数据。正因为如此,对于训练数据寄存于 Amazon S3,并须要屡次应用不同的训练算法和训练参数来进行训练任务以评估最优后果的场景来说,应用 Amazon FSx for Lustre 会有带来十分大的益处。

如果您的训练数据曾经在 Amazon EFS 文件系统中,咱们建议您应用 Amazon EFS 作为数据源。训练任务能够间接应用 Amazon EFS 上的数据,无需额定的数据搬运工作,减速了训练的启动工夫。一些典型的场景包含:数据科学家曾经在 Amazon EFS 上有所属目录,并且在一直引入新的数据来对模型进行疾速迭代,同时可能须要在共事之间进行数据分享,在数据的字段或标注上进行各种试验。

其次,机器学习训练数据集,尤其是训练数据的索引文件(上文提到的.lst 文件)是否会频繁地进行内容变更也是须要思考的因素:

通常来说 Amazon S3 作为对象存储,更适宜寄存内容不会发生变化的数据文件;

如果文件内容须要频繁进行增减或者局部批改,那么咱们建议您能够思考应用 Amazon EFS 或 Amazon FSx for Lustre 来寄存您的数据文件。作为共享文件系统 Amazon EFS 和 Amazon FSx for Lustre 提供了 POSIX 的文件操作接口并具备块级别的批改能力,不便与现有的机器学习工作流程进行集成。

📢 想解锁更多存储技术在云上的各种最佳实际?来 2021 亚马逊云科技中国峰会与业内当先的技术践行者们一起探讨交换吧!点击图片报名吧~

总结

Amazon SageMaker能够同时应用 Amazon S3Amazon EFSAmazon FSx for Lustre三种不同的存储服务类型作为输出通道的数据源,用户能够依据本人的应用场景、工作流程以及各个存储的特点,灵便组合各种数据起源,实现机器学习训练任务的高效运行。

参考资料

图像分类算法:
https://aws.amazon.com/blogs/…

内置图像分类算法:
https://docs.aws.amazon.com/s…

MXNet 的官网文档:
https://mxnet.apache.org/vers…

本篇作者

** 戴逸洋

亚马逊云科技合作伙伴解决方案架构师**

次要负责助力合作伙伴的解决方案在亚马逊云科技上落地生根,并赋能合作伙伴继续优化他们云上解决方案。同时致力于推广存储技术在云上的各种最佳实际。

退出移动版