【问题标题】:Sagemaker Train Job can't connect to ec2 instanceSagemaker 训练作业无法连接到 ec2 实例
【发布时间】:2021-05-22 17:08:57
【问题描述】:

我在 ec2 实例上运行 MLFlow 服务器,端口为 5000。

此 ec2 实例的安全组在端口 5000 上打开了与另一个为 SageMaker 指定的安全组的 TCP 连接。

ec2 实例入站规则:

SageMaker 出站规则:

这 2 个安全组在同一个 VPC 中

现在,我尝试使用指定的安全组运行 SageMaker 训练作业,以便训练脚本通过内部 IP 地址将指标记录到 ec2 服务器。 (如回答here),但连接失败

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

但是,当我创建具有相同安全组和相同 IAM 角色的 SageMaker Notebook 实例时,我能够成功连接到 ec2 并从 Notebook 中记录指标。

这是 SageMaker Notebook 配置:

如何从 SageMaker 训练作业连接到 ec2 实例?

【问题讨论】:

    标签: amazon-ec2 amazon-vpc amazon-sagemaker aws-security-group mlflow


    【解决方案1】:

    您的估算器将创建一个独立的实例,因此您是否能够从笔记本访问 mlflow 并不重要。如果您希望通过“PyTorch”估算器使用子网/安全组配置和 Internet 连接,则需要设置 VPC 资源。

    我遇到了同样的问题,Sagemaker plus MLflow Server 在另一个 ec2 上。第一个直觉是为估算器分配与 ec2(MLflow 服务器)相同的 VPC 和安全组。它们应该能够相互连接,因为它们在同一个专用网络中。另一个问题是,Sagemaker 启动的实例无法连接到 Internet 以下载您在 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 到达互联网。

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2020-11-08
      • 2012-12-26
      • 2021-09-22
      相关资源
      最近更新 更多