亚马逊AWS官方博客

利用 Amazon Elastic Inference 设置工具在几分钟内快速加载 EI 加速器

Amazon Elastic Inference (EI) 设置工具是一个 Python 脚本,使用它可以快速地开始使用EI。

Elastic Inference使得您可以将低成本的以GPU为动力的计算加速附加到 Amazon EC2 和 Amazon SageMaker 实例,从而将运行深度学习推理的成本降低多达 75%。如果您是第一次使用 EI,必须设置若干依赖项:Amazon Web Services (AWS) PrivateLink VPC 终端节点、IAM 策略和安全组规则。您可以使用 EI 设置工具来加速这一过程,它能够在几分钟内创建所需的资源帮助您启动 EI 加速器,使您快速上手。本文阐述了如何使用脚本、脚本的功能以及运行脚本时的情况。

概要地说,这个脚本执行了以下任务:

  1. 使用 IAM 策略为实例创建 IAM 角色,以供您连接到 AWS Elastic Inference 服务。
  2. 使用必要的传入和传出规则创建安全组,以供实例与EI加速器通讯。
  3. 在您所需的子网中创建 AWS PrivateLink VPC 终端节点。
  4. 启动所需的 EC2 实例以及EI 加速器,并将最新的 AWS 深度学习 AMI (DLAMI) 选为操作系统

先决条件

要设置 EI,运行下面链接的脚本之前,需要准备好以下项目:

  1. 在运行此工具的本地机器上,安装Python 3。
  2. 同样,安装好AWS SKD for Python(Boto3)。
  3. 您启动实例时所在的区域中的一个 Amazon VPC(可以是您的默认VPC)。
  4. 您要启动该实例时所处的子网。
  5. EC2 密钥对。
  6. AWS 凭证(AWS Credentials)。

当这些就绪后,从 GitHub 将 amazonei_setup.py 脚本下载到本地机器,并在终端上使用以下命令运行该脚本:

$ python amazonei_setup.py

此工具以您的名义创建的内容

该脚本可创建以下 AWS 资源:

  • 应用 Amazon EI 策略的实例角色。 在第一次运行脚本时创建此角色。在所有后续运行中,脚本都重复使用此 IAM 角色。如果此角色被删除,脚本将在下一次运行时重新创建此角色。IAM 角色具有以下属性:
    • 角色名称:Amazon-Elastic-Inference-Connect-Role
    • 策略名称:Amazon-Elastic-Inference-Connect-Policy
    • 实例配置文件名称:Amazon-Elastic-Inference-Instance-Profile

    策略描述如下:

    { "Version": "2012-10-17",
      "Statement": [
           {
                "Effect": "Allow",
                "Action": [ 
                "elastic-inference:Connect",
                "iam:List*",
                "iam:Get*",
                "ec2:Describe*",
                "ec2:Get*" 
                ],
                "Resource": "*"
            } 
        ] 
    }
    
  • 安全组。按照 Amazon EI 服务的要求,与 EC2 实例关联的安全组应当允许到端口 443 的入站流量。您还需要允许到端口 22 的入站流量从而来使用SSH。如果找到与这些规则匹配的安全组,则脚本将使用该安全组。但是,如果未找到匹配的安全组,则脚本会创建包含所需规则的新安全组。出站规则应设置为允许至所有端口的流量。新安全组名称为 amazon_ei_security_group,其描述是用于访问 Amazon EI 服务的安全组
  • VPC 终端节点接口 (AWS PrivateLink)。 脚本扫描在所用区域中与Amazon EI 服务以及您选择的 VPC 关联的现有终端节点。例如,对于 us-west-2 区域,脚本查找指定 VPC ID 中名为 amazonaws.us-west-2.elastic-inference.runtime 的终端节点。  如果未找到终端节点,脚本将会创建一个。另外,按照 Amazon EI 的要求,脚本将 VPC 终端节点的下列属性设置为 true:
    • EnableDnsSupport
    • EnableDnsHostNames
    • 脚本可修改终端节点,如果被发现的终端节点中缺失安全和所选子网,脚本会相应地添加
  • 脚本根据用户选择的操作系统寻找最新版本的 AWS DLAMI。
  • 如果所有步骤全都成功,脚本将会启动实例并报告实例 ID。
  • 实例启动并处于运行状态后,脚本会尝试获得Public DNS 名称。
  • 即使实例正在运行,也可能未准备好接受 SSH 连接,用户应等到实例完全初始化结束。通过 EC2 控制台或 AWS CLI,可使用脚本反馈的新启动实例的 ID 来查询初始化状态。

运行脚本时的情况

下面的示例演示了当您运行脚本时的情况。

    • 启动脚本。 脚本可通过以下命令从命令提示符启动:
$ python amazonei_setup.py –region us-west-2 –instance-type m5.xlarge
        

 

  • 必须提供 AWS 凭证(AWS Credentials)才能创建或修改 AWS 资源。脚本使用 Boto3,即AWS SDK for Python。为了能够配置和管理 AWS 资源,脚本需要用户凭证。如果脚本在运行时没有适当的凭证,将会报告下面的错误:
    $ python amazonei_setup.py --region us-west-2 --instance-type m5.xlarge
    Error setting up Amazon EI configuration - 
     Failed to retrieve VPC endpoints for us-west-2 : An error occurred (RequestExpired)
     when calling the DescribeVpcEndpointServices operation: Request has expired.

    解决方法是利用 Amazon Boto3 文档中介绍的多个方法中的一个配置适当的 AWS 凭证。凭证准备就绪之后,脚本就能够继续工作。

  • 选择操作系统。 脚本会打印提示消息以及选择操作系统的提示。它还会提醒,输入 ‘q’ 会退出脚本运行。选择 ‘1’ 以执行下一步。
    $ python amazonei_setup.py --region us-west-2 --instance-type m5.xlarge
    
    This script launches Amazon EC2 instances with Amazon Elastic Inference accelerators.
    Performs the following functions:
     1.It uses the Deep Learning AMIs preconfigured with EI-enabled deep learning 
     frameworks to launch the instances.
     2.It creates security groups for the instance and VPC endpoint.
     3.It creates the VPC endpoint needed for your instances to communicate with EI 
     accelerators.
     4.It creates an IAM Instance Role and Policy with the permissions needed to 
     connect to accelerators.
    
     To begin, please choose the Operating System for your instance by typing its index :
    
     0: Amazon Linux
     1: Ubuntu
    
    Type 'q' to quit.
    amazonei-wizard>
    
  • 选择加速器大小。 脚本发现并使用了基于 Ubuntu 的最新 DL AMI,还发现并使用了一个密钥对。如果它发现多个密钥对,会将它们列出,并要求用户键入其序号以选择所需的密钥对。  通常来讲,如果脚本发现有多个符合条件的项目,会将其显示为编号列表,并让用户通过键入其序号选择对应的项。比如在此处,脚本列出可支持的加速器大小并让用户选择。
    amazonei-wizard>1 
     Using Image ID: ami-0027dfad6168539c7,Image Name: Deep Learning AMI (Ubuntu) Version 21.2
     Using instance type: m5.xlarge
     Using Key Pair: Efti-Default-KeyPair
    
    Please type index of the accelerator type to use:
    
     0: eia1.medium (1 GB of accelerator memory)
     1: eia1.large (2 GB of accelerator memory)
     2: eia1.xlarge (4 GB of accelerator memory)
    
    Type 'q' to quit.
    amazonei-wizard>
  • 选择 VPC。 如上文所示,用户选择了加速器大小选项 ‘1’,脚本确认加速器大小已选择,进一步发现并应用 IAM 角色。然后,它将会显示可用 VPC 的列表。
    amazonei-wizard> 1 
     Using Amazon EI accelerator type: eia1.large
    
     Found an IAM role configured for connecting to Amazon EI service.Name - Amazon-Elastic-Inference-Connect-Role, ARN - arn:aws:iam::326228132093:role/Amazon-Elastic-Inference-Connect-Role
    
    Please select the VPC to use by typing the desired VPC index.Type 0 for default VPC.
    
     0: VPC Id 'vpc-d7d218af'
     1: VPC Id 'vpc-0c2496c51925ff1be'
    
    Type 'q' to quit.
    amazonei-wizard>
  • 启动实例。 当用户选择 VPC ID 时,脚本会找到与所选 VPC 关联的包含匹配入站规则的安全组,还会找到一个与所选 VPC ID 关联的子网。此外,它还找到了连接 Amazon EI 服务的 VPC 终端节点。当脚本获得了启动 EC2 实例的所有详细信息后,脚本将会汇总所有参数并用来启动该实例。
    amazonei-wizard>1 
     Using VPC ID: vpc-0c2496c51925ff1be
     Using Security Group: sg-00aec97685affb306
     Using Subnet: subnet-04881d24764d6e73f
    
     Discovered VPC endpoint for Amazon EI service, ID: vpce-0d2942a8147305240
    
     The script will now launch new instance with following configuration.Type 'y' to continue.
    
     Accelerator Type: eia1.large
     Region: us-west-2
     Image-ID: ami-0027dfad6168539c7 - (Deep Learning AMI (Ubuntu) Version 21.2)
     Instance Type: m5.xlarge
     Key Pair: Efti-Default-KeyPair
     Security Group ID: sg-00aec97685affb306
     Subnet ID: subnet-04881d24764d6e73f
     Instance Profile: Amazon-Elastic-Inference-Instance-Profile
    
    Type 'y' to continue.Type 'q' to quit.
    amazonei-wizard>
  • 启动并等待实例达到运行状态。 当用户键入 ‘y’ 后,脚本会继续启动实例。脚本还会打印可能的 SSH 命令。脚本根据根据操作系统类型、所选的密钥对和Public DNS 名称来形成 SSH 命令。实际命令可能会因 pem 文件的位置而有不同。脚本还会发出提示警告:即使已处于运行状态,实例仍可能无法立即通过 SSH 访问。实例需要完全初始化,尤其是需要先启动 SSH 守护程序才能接受 SSH 连接。如果正确定位到 pem 文件,用户应当能够访问实例,并进一步使用 Amazon Elastic Inference。
    amazonei-wizard>y
    
     Launching Instance ..
    
     Launched instance successfully.The instance ID is 'i-0969820364c038cca'.
    
     Waiting for instance to reach running state ...
    
     You can use the following sample SSH command to connect to your instance: ssh -i "Efti-Default-KeyPair.pem" ubuntu@ec2-52-13-194-188.us-west-2.compute.amazonaws.com
    
    
     Note: Please wait until instance is fully initialized and ready to accept SSH connections.You may check instance status at EC2 console.
     Also please locate your private key file 'Efti-Default-KeyPair.pem'.
    
    amazon-elastic-inference-tools $ 

 

小结

此设置脚本可简化您启动 EC2 实例以及 EI 的流程。它确保所有设置都已正确配置,且实例启动时使用了 EI 必需的权限。如果您对本文有任何反馈,请直接在此页面的评论区中提出。


关于作者

Eftiquar Shaikh 是 AWS AI 的高级软件工程师。他致力于构建 AI 领域的 AWS 服务。不编程的时候,他喜欢看书、跑步和旅行。

 

 

 

 

Satadal Bhattacharjee 是 AWS AI 的首席产品经理。他领导 Machine Learning Engine PM 团队,致力于 SageMaker Neo、AWS 深度学习 AMI 和 AWS Elastic Inference 等项目。在工作之余,Satadal 爱好徒步、指导机器人设计小组,并与家人和朋友一起消遣。