%20%D0%BF%D1%80%D0%B8%20%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B5%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20ListObjectsV2.png)
У меня есть mlflow
сервер, размещенный на aws
, который использует s3
в фоновом режиме для хранения. Я пытаюсь запустить , lambda-function
который запускает скрипт python, который обращается к mlflow
серверу, загружает pytorch
модель, делает прогнозы и завершает работу. Код, в котором возникают мои проблемы, следующий:
with open('./data/api_keys.json', 'r') as f:
API_KEYS = json.load(f)
os.environ['AWS_DEFAULT_REGION'] = API_KEYS['AWS_DEFAULT_REGION']
os.environ["AWS_ACCESS_KEY_ID"] = API_KEYS['AWS_ACCESS_KEY_ID']
os.environ["AWS_SECRET_ACCESS_KEY"] = API_KEYS['AWS_SECRET_ACCESS_KEY']
mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
model = mlflow.pytorch.load_model(MODEL_URI) # <---- error thrown here
Трассировка отсюда cloudwatch
:
File "/app/production_script.py", line 26, in <module>
model = mlflow.pytorch.load_model(MODEL_URI)
File "/usr/local/lib/python3.9/site-packages/mlflow/pytorch/__init__.py", line 693, in load_model
local_model_path = _download_artifact_from_uri(artifact_uri=model_uri)
File "/usr/local/lib/python3.9/site-packages/mlflow/tracking/artifact_utils.py", line 95, in _download_artifact_from_uri
return get_artifact_repository(artifact_uri=root_uri).download_artifacts(
File "/usr/local/lib/python3.9/site-packages/mlflow/store/artifact/artifact_repo.py", line 179, in download_artifacts
if self._is_directory(artifact_path):
File "/usr/local/lib/python3.9/site-packages/mlflow/store/artifact/artifact_repo.py", line 61, in _is_directory
listing = self.list_artifacts(artifact_path)
File "/usr/local/lib/python3.9/site-packages/mlflow/store/artifact/s3_artifact_repo.py", line 121, in list_artifacts
for result in results:
File "/usr/local/lib/python3.9/site-packages/botocore/paginate.py", line 269, in __iter__
response = self._make_request(current_kwargs)
File "/usr/local/lib/python3.9/site-packages/botocore/paginate.py", line 357, in _make_request
return self._method(**current_kwargs)
File "/usr/local/lib/python3.9/site-packages/botocore/client.py", line 530, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/local/lib/python3.9/site-packages/botocore/client.py", line 960, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidToken) when calling the ListObjectsV2 operation: The provided token is malformed or otherwise invalid.
В соответствии сдокументы,ListObjectsV2
Возвращает некоторые или все (до 1000) объекты в контейнере при каждом запросе.
Для использования этой операции у вас должен быть доступ на ЧТЕНИЕ к контейнеру.
Чтобы использовать это действие в политике AWS Identity and Access Management (IAM), у вас должны быть разрешения на выполнение действия s3:ListBucket.
В моем policy
определении для этого lambda-function
у меня есть s3:ListBucket
разрешение на контейнер, mlflow
на котором он размещен.
Любые идеи по исправлению этой проблемы приветствуются.