SageMaker 中有一些不同的服务,每个服务都针对特定的用例进行了优化。如果您谈论的是开发环境,您可能正在使用notebook 服务。笔记本实例附带一个本地 EBS (5GB),您可以使用它来将一些数据复制到其中并运行快速开发迭代,而无需每次都从 S3 复制数据。执行此操作的方法是运行wget
或aws s3 cp
从笔记本单元或从您可以从目录列表页面打开的终端。
不过,不建议将过多的数据复制到笔记本实例中,因为这会导致您的训练和实验时间过长。相反,您应该使用 SageMaker 的第二部分,即培训服务。一旦您对要训练的模型有了很好的了解,基于笔记本实例上小数据集的快速迭代,您可以将模型定义指向在训练实例集群中并行检查较大的数据集。当您发送训练作业时,您还可以定义每个训练实例将使用多少本地存储,但您将从训练的分布式模式中获益最多。
当您想优化您的训练作业时,您有几个存储选项。首先,您可以为每个集群实例定义您希望模型训练的 EBS 卷的大小。您可以在启动训练作业时指定它(https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html):
...
"ResourceConfig": {
"InstanceCount": number,
"InstanceType": "string",
"VolumeKmsKeyId": "string",
"VolumeSizeInGB": number
},
...
接下来,您需要决定要训练什么样的模型。如果您正在训练自己的模型,您就会知道这些模型如何获取数据,包括格式、压缩、来源和其他可能影响将数据加载到模型输入中的性能的因素。如果您更喜欢使用 SageMaker 拥有的内置算法,这些算法已针对处理 protobuf RecordIO 格式进行了优化。在此处查看更多信息:https ://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html
您可以从中受益的另一个方面(或了解您是否想以更具可扩展性和优化的方式实现自己的模型)是TrainingInputMode ( https://docs.aws.amazon.com/sagemaker/latest/dg/API_AlgorithmSpecification. html#SageMaker-Type-AlgorithmSpecification-TrainingInputMode):
类型:字符串
有效值:管道 | 文件
要求:是
您可以使用该File
模式从 S3 读取数据文件。但是,您也可以使用Pipe
打开许多选项的模式以流模式处理数据。这不仅仅意味着实时数据,使用 AWS Kinesis 或 Kafka 等流服务,还可以从 S3 读取数据并将其流式传输到模型,完全避免在训练时将数据存储在本地实例。