我正在尝试使用新的托管点训练功能从现有模型开始训练对象检测模型,创建估计器时使用的参数如下:
od_model = sagemaker.estimator.Estimator(get_image_uri(sagemaker.Session().boto_region_name, 'object-detection', repo_version="latest"),
Config['role'],
train_instance_count = 1,
train_instance_type = 'ml.p3.16xlarge',
train_volume_size = 50,
train_max_run = (48 * 60 * 60),
train_use_spot_instances = True,
train_max_wait = (72 * 60 * 60),
input_mode = 'File',
checkpoint_s3_uri = Config['train_checkpoint_uri'],
output_path = Config['s3_output_location'],
sagemaker_session = sagemaker.Session()
)
(参考文献Config
上面是我用来提取/集中一些参数的配置数据结构)
当我运行上面的代码时,出现以下异常:
botocore.exceptions.ClientError:调用 CreateTrainingJob 操作时发生错误 (ValidationException):给定算法不支持大于 3600 的 MaxWaitTimeInSeconds。
如果我改变train_max_wait
到 3600 我得到这个异常:
botocore.exceptions.ClientError:调用 CreateTrainingJob 操作时发生错误 (ValidationException):MaxWaitTimeInSeconds 无效。它必须存在并且大于或等于 MaxRuntimeInSeconds
然而变化max_run_time
到 3600 或更少对我来说不起作用,因为我预计这个模型需要几天的时间来训练(大数据集),事实上一个 epoch 需要一个多小时。
The 有关 Managed Spot Training 的 AWS 博客文章 https://aws.amazon.com/blogs/aws/managed-spot-training-save-up-to-90-on-your-amazon-sagemaker-training-jobs/比如说MaxWaitTimeInSeconds
仅限 60 分钟:
对于不使用检查点的内置算法和 AWS Marketplace 算法,我们强制规定最大训练时间为 60 分钟(MaxWaitTimeInSeconds 参数)。
早些时候,同一篇博客文章说:
内置算法:计算机视觉算法支持检查点(对象检测、语义分割以及很快的图像分类)。
所以我不认为我的算法不支持检查点。事实上,该博文使用了对象检测,最长运行时间为 48 小时。所以我不认为这是算法限制。
正如您在上面看到的,我已经为检查点设置了一个 S3 URL。 S3 存储桶确实存在,并且训练容器可以访问它(它与放置训练数据和模型输出的存储桶相同,并且在打开现场训练之前访问这些存储桶没有任何问题。
我的 boto 和 sagemaker 库是当前版本:
boto3 (1.9.239)
botocore (1.12.239)
sagemaker (1.42.3)
从阅读各种文档中我可以看出,我已经正确设置了所有内容。我的用例几乎与上面链接的博客文章中描述的完全一样,但我使用的是 SageMaker Python SDK,而不是控制台。
我真的很想尝试托管现场培训以节省一些钱,因为我即将进行很长的培训。但将超时限制为一小时并不适合我的用例。有什么建议么?
Update:如果我注释掉train_use_spot_instances
and train_max_wait
在常规按需实例上进行培训的选项 我的培训作业已成功创建。如果我随后尝试使用控制台克隆作业并在克隆上打开 Spot 实例,我会得到相同的 ValidationException。