Python 使用目标检测算法进行SageMaker管理的现场训练
我正在尝试使用新的托管点训练功能从现有模型开始训练对象检测模型,创建估计器时使用的参数如下:Python 使用目标检测算法进行SageMaker管理的现场训练,python,amazon-web-services,object-detection,amazon-sagemaker,Python,Amazon Web Services,Object Detection,Amazon Sagemaker,我正在尝试使用新的托管点训练功能从现有模型开始训练对象检测模型,创建估计器时使用的参数如下: od\u model=sagemaker.estimator.estimator(获取图像uri(sagemaker.Session().boto\u区域名称,'object detection',repo\u version=“latest”), 配置['role'], 列车实例计数=1, 列车实例类型='ml.p3.16xlarge', 列车体积尺寸=50, 列车最大运行=(48*60*60), 训
od\u model=sagemaker.estimator.estimator(获取图像uri(sagemaker.Session().boto\u区域名称,'object detection',repo\u version=“latest”),
配置['role'],
列车实例计数=1,
列车实例类型='ml.p3.16xlarge',
列车体积尺寸=50,
列车最大运行=(48*60*60),
训练\使用\点\实例=真,
列车最大等待时间=(72*60*60),
输入模式='文件',
checkpoint\u s3\u uri=Config['train\u checkpoint\u uri'],
输出路径=Config['s3\u输出位置'],
sagemaker_session=sagemaker.session()
)
(上面提到的Config
是我用来提取/集中一些参数的配置数据结构)
当我运行上述操作时,我得到以下异常:
botocore.exceptions.ClientError:调用CreateTrainingJob操作时发生错误(ValidationException):给定算法不支持高于3600的MaxWaitTimeInSeconds
如果我将train\u max\u wait
更改为3600,则会出现以下异常:
botocore.exceptions.ClientError:调用CreateTrainingJob操作时发生错误(ValidationException):MaxWaitTimeInSeconds无效。它必须存在并且大于或等于MaxRuntimeInSeconds
然而,将max\u run\u time
更改为3600或更少对我来说是行不通的,因为我预计这个模型需要几天的训练时间(大数据集),事实上一个历元需要一个多小时
假设MaxWaitTimeInSeconds
限制为60分钟,用于:
对于不使用检查点的内置算法和AWS Marketplace算法,我们强制执行60分钟的最长训练时间(MaxWaitTimeInSeconds参数)
早些时候,同一篇博文说:
内置算法:计算机视觉算法支持检查点(目标检测、语义分割和很快的图像分类)
所以我不认为我的算法不支持检查点。事实上,这篇博客文章使用了对象检测和48小时的最大运行时间。所以我不认为这是一个算法限制
正如您在上面看到的,我为检查点设置了一个S3URL。S3存储桶确实存在,并且训练容器可以访问它(它与放置训练数据和模型输出的存储桶是同一个存储桶,在启用现场训练之前,我对访问这些存储桶没有任何问题)
My boto和sagemaker库是当前版本:
boto3 (1.9.239)
botocore (1.12.239)
sagemaker (1.42.3)
从阅读各种文档可以看出,我已经正确设置了所有内容。我的用例几乎与上面链接的博客文章中所描述的完全相同,但我使用的是SageMaker Python SDK,而不是控制台
我真的很想尝试管理现场训练来节省一些钱,因为我还有很长的训练时间。但是将超时时间限制在一小时对我的用例不起作用。有什么建议吗
更新:如果我注释掉
train\u use\u spot\u instances
和train\u max\u wait
选项在常规按需实例上进行培训,我的培训作业将成功创建。如果我尝试使用控制台克隆作业并在克隆上打开spot实例,我将得到相同的验证异常。我运行了m今天再次使用y脚本,它工作正常,没有botocore.exceptions.ClientError
异常。鉴于此问题影响了Sagemeker的Puthon SDK和控制台,我怀疑这可能是后端API的问题,而不是我的客户端代码的问题
不管怎样,它现在都在工作