Sagemaker Train Job не может подключиться к экземпляру ec2

У меня есть сервер MLFlow, работающий на экземпляре ec2, порт 5000.

У этого экземпляра ec2 есть группа безопасности с открытым TCP-соединением на порту 5000 с другой группой безопасности, предназначенной для SageMaker.

Входящие правила экземпляра ec2: введите здесь описание изображения

Исходящие правила SageMaker: введите здесь описание изображения

Эти 2 группы безопасности находятся в одном VPC.

Теперь я пытаюсь запустить задание обучения SageMaker с назначенной группой безопасности, чтобы сценарий обучения регистрировал метрики на сервере ec2 через внутренний IP-адрес. (Как ответил здесь), но соединение не установлено

Инициализация задания SageMaker:

   role = "ml_sagemaker"
   security_group_ids = ['sg-04868acca16e81183']
   bucket = sagemaker_session.default_bucket()  
   out_path = f"s3://{bucket}/{project_name}"

   estimator = PyTorch(entry_point='run_train.py',
                       source_dir='.',
                       sagemaker_session=sagemaker_session,
                       instance_type=instance_type,
                       instance_count=1,
                       framework_version='1.5.0',
                       py_version='py3',
                       role=role,
                       security_group_ids=security_group_ids,
                       hyperparameters={},
                       )
   ....

Внутри run_train.py:

import mlflow
tracking_uri = "http://172.31.77.137:5000"  # <- this is internal ec2 IP
mlflow.set_tracking_uri(tracking_uri)
mlflow.log_param("test_param", 3)

Ошибка:

File "/opt/conda/lib/python3.6/site-packages/urllib3/util/connection.py", line 74, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

Однако когда я создаю экземпляр SageMaker Notebook с той же группой безопасности и той же ролью IAM, я могу успешно подключиться к ec2 и регистрировать показатели из Notebook.

введите здесь описание изображения

Вот конфигурации ноутбука SageMaker:

Как я могу подключиться к инстансу ec2 из учебного задания SageMaker?


person Vadym B.    schedule 19.02.2021    source источник


Ответы (1)


Ваш оценщик создаст автономный экземпляр, поэтому не имеет значения, сможете ли вы получить доступ к mlflow из записной книжки. Если вы хотите использовать конфигурацию группы подсети/безопасности с оценщиком «PyTorch» с подключением к Интернету, вам необходимо установить ресурс VPC.

У меня была такая же проблема, Sagemaker плюс MLflow Server на другом ec2. Первый инстинкт — назначить оценщику те же VPC и группы безопасности, что и ec2 (сервер MLflow). Они должны иметь возможность подключаться друг к другу, поскольку они находятся в одной и той же частной сети. Здесь возникает еще одна проблема: экземпляр, который запускает Sagemaker, не может подключиться к Интернету для загрузки библиотек/пакетов, которые вы указали в файле requirements.txt (например, mlflow). Тогда проблема в том, как подключиться к Интернету.

Единственный способ обеспечить доступ в Интернет, когда подсеть используется для оценок, — это настроить его в подсети с настроенным шлюзом NAT.

  1. Создайте шлюз NAT в одной из ваших общедоступных подсетей, например subnet-axxxx.
  2. Создайте новую таблицу маршрутов как «NAT_Route_Table».
  3. Изменить маршруты: пункт назначения добавить 0.0.0.0/0, добавить цель Newly create NAT gateway (при необходимости добавить другие маршруты)
  4. Создайте новую подсеть с именем «NAT_Subnet» и свяжите ее с вновь созданной «NAT_Route_Table».

Трафик будет проходить через NAT в интернет.

person JemmaChu    schedule 20.05.2021