Пустая папка выходного задания

Я настроил локальный экземпляр JupyterLab с расширением SageMaker для запуска заданий в AWS, и теперь я вижу, что задания запускаются с правильным файлом .ipynb во входной папке S3, но не вижу никакого результата, поскольку файлов с префиксом «выход» не существует. и нечего скачивать.

Все настраивается по этой инструкции . Роли, разрешения перепроверены и идеи у меня закончились. Не могли бы вы дать мне направление? Есть ли у нас какие-либо соответствующие журналы, чтобы заглянуть под капот?

Обновление 1

Полный сценарий:

  1. Создать пользователя IAM (имя: lab)
  2. Создайте встроенную политику для этого пользователя (имя: LabPolicy).
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EventBridgeSchedule",
            "Effect": "Allow",
            "Action": [
                "events:TagResource",
                "events:DeleteRule",
                "events:PutTargets",
                "events:DescribeRule",
                "events:EnableRule",
                "events:PutRule",
                "events:RemoveTargets",
                "events:DisableRule"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                }
            }
        },
        {
            "Sid": "IAMPassRoleToNotebookJob",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/SagemakerJupyterScheduler*",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": [
                        "sagemaker.amazonaws.com",
                        "events.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "IAMListRoles",
            "Effect": "Allow",
            "Action": "iam:ListRoles",
            "Resource": "*"
        },
        {
            "Sid": "S3ArtifactsAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutEncryptionConfiguration",
                "s3:CreateBucket",
                "s3:PutBucketVersioning",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetEncryptionConfiguration",
                "s3:DeleteObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::sagemaker-automated-execution-*"
            ]
        },
        {
            "Sid": "S3DriverAccess",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::sagemakerheadlessexecution-*"
            ]
        },
        {
            "Sid": "SagemakerJobs",
            "Effect": "Allow",
            "Action": [
                "sagemaker:DescribeTrainingJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribePipeline",
                "sagemaker:CreateTrainingJob",
                "sagemaker:DeletePipeline",
                "sagemaker:CreatePipeline"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                }
            }
        },
        {
            "Sid": "AllowSearch",
            "Effect": "Allow",
            "Action": "sagemaker:Search",
            "Resource": "*"
        },
        {
            "Sid": "SagemakerTags",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListTags",
                "sagemaker:AddTags"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:pipeline/*",
                "arn:aws:sagemaker:*:*:space/*",
                "arn:aws:sagemaker:*:*:training-job/*",
                "arn:aws:sagemaker:*:*:user-profile/*"
            ]
        },
        {
            "Sid": "ECRImage",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchGetImage"
            ],
            "Resource": "*"
        }
    ]
}
  1. Создайте роль IAM (имя: SagemakerJupyterSchedulerRole)
  2. Заменить существующую политику доверия
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "sagemaker.amazonaws.com",
                    "events.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  1. Прикрепите AmazonSageMakerFullAccess
  2. Создайте и прикрепите политику выполнения (имя: SagemakerJupyterSchedulerExecutionPolicy)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload"
            ],
            "Resource": [
                "arn:aws:s3:::sagemaker-automated-execution-xxxxxxxxxxxx-us-east-1/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:GetBucketCors",
                "s3:PutBucketCors"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketAcl",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::sagemaker-automated-execution-xxxxxxxxxxxx-us-east-1"
            ]
        }
    ]
}
  1. Варианты работы
Image: arn:aws:sagemaker:us-east-1:081325390199:image/sagemaker-base-python-38
Kernel: python3
Role ARN: arn:aws:iam::xxxxxxxxxxxx:role/SagemakerJupyterSchedulerRole
Input: s3://sagemaker-automated-execution-xxxxxxxxxxxx-us-east-1/
Output: s3://sagemaker-automated-execution-xxxxxxxxxxxx-us-east-1/
  1. Бегать!

В конце концов, я вижу только входные ipynb-файлы в целевой корзине S3.

❯ aws s3 ls s3://sagemaker-automated-execution-xxxxxxxxxxxx-us-east-1/ --recursive
2024-04-18 16:57:19       4536 helloworld2ipynb-helloworld2-45e83409-2024-04-18-16-57-17/input/hello-world2.ipynb
2024-04-18 16:49:00       4536 helloworld2ipynb-helloworld2-4d179d7f-2024-04-18-16-48-57/input/hello-world2.ipynb
2024-04-15 11:31:10       4536 helloworld2ipynb-helloworld2-ae714726-2024-04-15-11-31-08/input/hello-world2.ipynb
2024-04-15 10:47:33       2631 helloworld2ipynb-helloworld2-b516481a-2024-04-15-10-47-31/input/hello-world2.ipynb

Обновление 2

@Tomonori Shimomura подал идею провести эксперимент, и в конце концов я понял, что SageMaker вообще не управляет этой работой!

Теперь нужно упомянуть один шаг назад и мой предыдущий вопрос на StackOverflow, где я придумал собственное «решение», но теперь кажется, что моя текущая проблема каким-то образом связана с этим хаком.

Обновление 3

Я помещаю в ресурс-метаданные.json:

{
    "AppType": "JupyterLab"
}

... потому что я нашел в amazon_sagemaker_jupyter_scheduler/model_converter.py:

if get_app_type() == "JupyterLab":
    container_entrypoint = ["amazon_sagemaker_scheduler"]
else:
    container_entrypoint = ["/bin/bash"]

Теперь задание запускается, но сразу завершается с ошибкой: «[FATAL tini (8)] exec amazon_sagemaker_scheduler не удалось: нет такого файла или каталога»

Пытаюсь разобраться, но идей пока нет.

Последнее обновление

Я пропустил строгие требования к версии в руководстве и пытался использовать разные версии из 3-й ветки. К счастью, @Tomonori-сан заметил мою ошибку.

Однако следует отметить, что не все начало работать так, как ожидалось, сразу после перехода на более раннюю версию, потому что я столкнулся с проблемой GetBucketLocation, и сразу после нескольких часов отладки расширений aiobotocore и amazon-sagemaker-jupyter-scheduler я наконец понял, что ведро S3 размещаться где-то еще, а не в us-east-1, потому что LocationConstraint таких сегментов имеет значение null, что влияет на логику в amazon_sagemaker_jupyter_scheduler/clients.py

(base) lab4:~$ aws s3api get-bucket-location --bucket sagemaker-automated-execution-xxxxxxxxxxxx-us-east-2
{
    "LocationConstraint": "us-east-2"
}
(base) lab4:~$ aws s3api get-bucket-location --bucket sagemaker-automated-execution-xxxxxxxxxxxx-us-east-1
{
    "LocationConstraint": null
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
113
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я только что проследил за сообщением в блоге и смог успешно выполнить задание в блокноте.

Если вы успешно запустите задание, вы увидите следующие файлы в указанной вами корзине S3.

$ aws s3 ls s3://sagemaker-automated-execution-123456789012-us-east-2 --recursive
2024-04-17 17:57:49       9480 notebookjobtestip-notebookjobtest-bf50211d-2024-04-18-00-57-47/input/notebook-job-test.ipynb
2024-04-17 18:00:14      13948 notebookjobtestip-notebookjobtest-bf50211d-2024-04-18-00-57-47/output/output.tar.gz

Делюсь своими входными конфигурациями:

  • Тип вычисления: ml.m5.large
  • Изображение: arn:aws:sagemaker:us-east-2:429704687514:image/sagemaker-base-python-38
  • Ядро: python3
  • arn:aws:iam::123456789012:role/SagemakerJupyterSchedulerRole
  • Входная папка: s3://sagemaker-automated-execution-123456789012-us-east-2/
  • Выходная папка: s3://sagemaker-automated-execution-123456789012-us-east-2/

Попробуйте аналогичные конфигурации и проверьте, работает ли они.

Спасибо, что связались со мной в обоих местах :) Я обновил свой ответ со всеми шагами, не могли бы вы пойти со мной и сравнить со своим?

danilabagroff 18.04.2024 16:34

Единственное отличие, которое я обнаружил, заключается в том, что я подключил AmazonSageMakerFullAccess только к SagemakerJupyterSchedulerRole. Я не думаю, что это связано с проблемой, с которой вы сталкиваетесь, потому что ваша SagemakerJupyterSchedulerExecutionPolicy разрешает только дополнительные разрешения. AmazonSageMakerFullAccess должен иметь разрешение на чтение и запись в корзины S3, в имени которых содержится ключевое слово «sagemaker».

Tomonori Shimomura 18.04.2024 20:54

Чтобы изолировать проблему: если вы загрузите какой-либо файл в корзину S3 из самого ноутбука (с помощью команды aws s3 или boto3), удастся ли это?

Tomonori Shimomura 18.04.2024 21:13

Аригато @Tomonori, реальная проблема серьезнее, чем я думал. Не могли бы вы проверить второе обновление и найти файл resources-metadata.json в /opt/ml/metadata: существует он или нет? пустой или нет? Спасибо!

danilabagroff 20.04.2024 14:00

Я добавлю еще один ответ для основной причины

Tomonori Shimomura 22.04.2024 00:25
Ответ принят как подходящий

Эта проблема связана с добавленным вручную файлом resources-metadata.json.

Пожалуйста, проверьте ответ в своем предыдущем сообщении, чтобы найти решение, позволяющее избежать ошибки «[Errno 2] Нет такого файла или каталога: '/opt/ml/metadata/resource-metadata.json'», и вы сможете отменить свои хаки. .

Другие вопросы по теме