我正在尝试使用github示例在SageMaker中使用我自己的病态学习ML模型。
python代码如下:
# Define IAM role import boto3
import re
import os
import numpy as np
import pandas as pd
from sagemaker import get_execution_role
import sagemaker as sage from time
import gmtime, strftime
role = get_execution_role()
ess = sage.Session()
account = sess.boto_session.client('sts').get_caller_identity()['Account']
region = sess.boto_session.region_name
image = '{}.dkr.ecr.{}.amazonaws.com/decision-trees-sample:latest'.format(account, region)
output_path="s3://output"
sess
tree = sage.estimator.Estimator(image,
role, 1, 'ml.c4.2xlarge',
output_path='s3-eu-west-1.amazonaws.com/output',
sagemaker_session=sess)
tree.fit("s3://output/iris.csv")
但是我收到了这个错误:
信息:sagemaker:用名称创建培训工作: 决策树样品-2018-04-24-13-13-38-281
----------------------------------------------- ---------------------------- ClientError Traceback(最近一次调用 最后)in() 14 sagemaker_session = sess) 15 ---> 16 tree.fit(“s3://inteldatastore-cyrine/iris.csv”)
〜/ anaconda3 / ENVS / python3 / LIB / python3.6 /站点包/ sagemaker / estimator.py 适合(自我,输入,等待,日志,job_name) 161 self.output_path ='s3:// {} /'.format(self.sagemaker_session.default_bucket()) 162 - > 163 self.latest_training_job = _TrainingJob.start_new(self,inputs) 164如果等待: 165 self.latest_training_job.wait(logs = logs)
〜/ anaconda3 / ENVS / python3 / LIB / python3.6 /站点包/ sagemaker / estimator.py 在start_new中(cls,estimator,输入) 336 input_config = input_config,role = role, JOB_NAME = estimator._current_job_name, 337 output_config = output_config,resource_config = resource_config, - > 338个超参数=超参数,stop_condition = stop_condition) 339 340返回cls(estimator.sagemaker_session,estimator._current_job_name)
〜/ anaconda3 / ENVS / python3 / LIB / python3.6 /站点包/ sagemaker / session.py 在火车上(self,image,input_mode,input_config,role,job_name, output_config,resource_config,hyperparameters,stop_condition) 242 LOGGER.info('创建名称为{}的培训 - 作业'.format(job_name)) 243 LOGGER.debug('train request:{}'。format(json.dumps(train_request,indent = 4))) - > 244 self.sagemaker_client.create_training_job(** train_request) 245 246 def create_model(self,name,role,primary_container):
〜/ anaconda3 / ENVS / python3 / LIB / python3.6 /站点包/ botocore / client.py 在_api_call(self,* args,** kwargs) 312“%s()只接受关键字参数。” %py_operation_name) 313#此范围内的“self”指的是BaseClient。 - > 314返回self._make_api_call(operation_name,kwargs) 315 316 _api_call。名称 = str(py_operation_name)
〜/ anaconda3 / ENVS / python3 / LIB / python3.6 /站点包/ botocore / client.py 在_make_api_call中(self,operation_name,api_params) 610 error_code = parsed_response.get(“Error”,{})。get(“Code”) 611 error_class = self.exceptions.from_code(error_code) - > 612引发error_class(parsed_response,operation_name) 613否则: 614 return parsed_response
ClientError:调用时发生错误(AccessDeniedException) CreateTrainingJob操作:用户: arn:aws:sts :: 307504647302:assume-role / default / SageMaker is 未授权执行:sagemaker:资源上的CreateTrainingJob: ARN:AWS:sagemaker:EU-西-1:307504647302:训练作业/判定树样品-2018-04-24-13-13-38-281
你能帮我解决这个问题吗?
谢谢
答案 0 :(得分:0)
您似乎无权访问资源
arn:aws:sagemaker:eu-west-1:307504647302:training-job/decision-trees-sample-2018-04-24-13-13-38-281
您可以检查资源网址是否正确以及安全组中是否设置了正确的权限。
答案 1 :(得分:0)
当我开始使用SageMaker时,我遇到了类似的问题所以我开发了这个开源项目https://github.com/Kenza-AI/sagify(sagify),这是一个CLI工具,可以帮助您在SageMaker上训练和部署自己的机器学习/深度学习模型以一种非常简单的方式。无论我使用什么库(Keras,Tensorflow,scikit-learn,LightFM,spacy等),我都设法训练和部署我的所有ML模型。基本上,您可以用经典的pythonic方式指定所有依赖项,即在requiments.txt中,sagify将读取它们并将它们安装在Docker镜像上。然后,可以在SageMaker上执行此Docker镜像以进行培训和部署。
此外,我在sagify文档(https://kenza-ai.github.io/sagify/)中指定了关于如何设置您的AWS账户的一次性流程,以避免与权限相关的问题。
答案 2 :(得分:0)
也许您正在使用AWS Educate帐户。
目前,您无法使用SageMaker服务通过AWS Educate Starter帐户创建培训或建模作业。
目前,如果您想使用/部署带有SageMaker服务的培训工作,则可以使用自己的个人AWS帐户。
不过,您可以继续通过AWS Educate帐户通过SageMaker使用Jupyter笔记本电脑。