亚马逊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 加速器,使您快速上手。本文阐述了如何使用脚本、脚本的功能以及运行脚本时的情况。
概要地说,这个脚本执行了以下任务:
- 使用 IAM 策略为实例创建 IAM 角色,以供您连接到 AWS Elastic Inference 服务。
- 使用必要的传入和传出规则创建安全组,以供实例与EI加速器通讯。
- 在您所需的子网中创建 AWS PrivateLink VPC 终端节点。
- 启动所需的 EC2 实例以及EI 加速器,并将最新的 AWS 深度学习 AMI (DLAMI) 选为操作系统
先决条件
要设置 EI,运行下面链接的脚本之前,需要准备好以下项目:
- 在运行此工具的本地机器上,安装Python 3。
- 同样,安装好AWS SKD for Python(Boto3)。
- 您启动实例时所在的区域中的一个 Amazon VPC(可以是您的默认VPC)。
- 您要启动该实例时所处的子网。
- EC2 密钥对。
- AWS 凭证(AWS Credentials)。
当这些就绪后,从 GitHub 将 amazonei_setup.py 脚本下载到本地机器,并在终端上使用以下命令运行该脚本:
此工具以您的名义创建的内容
该脚本可创建以下 AWS 资源:
- 应用 Amazon EI 策略的实例角色。 在第一次运行脚本时创建此角色。在所有后续运行中,脚本都重复使用此 IAM 角色。如果此角色被删除,脚本将在下一次运行时重新创建此角色。IAM 角色具有以下属性:
- 角色名称:Amazon-Elastic-Inference-Connect-Role
- 策略名称:Amazon-Elastic-Inference-Connect-Policy
- 实例配置文件名称:Amazon-Elastic-Inference-Instance-Profile
策略描述如下:
- 安全组。按照 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 来查询初始化状态。
运行脚本时的情况
下面的示例演示了当您运行脚本时的情况。
-
- 启动脚本。 脚本可通过以下命令从命令提示符启动:
- 必须提供 AWS 凭证(AWS Credentials)才能创建或修改 AWS 资源。脚本使用 Boto3,即AWS SDK for Python。为了能够配置和管理 AWS 资源,脚本需要用户凭证。如果脚本在运行时没有适当的凭证,将会报告下面的错误:
解决方法是利用 Amazon Boto3 文档中介绍的多个方法中的一个配置适当的 AWS 凭证。凭证准备就绪之后,脚本就能够继续工作。
- 选择操作系统。 脚本会打印提示消息以及选择操作系统的提示。它还会提醒,输入 ‘q’ 会退出脚本运行。选择 ‘1’ 以执行下一步。
- 选择加速器大小。 脚本发现并使用了基于 Ubuntu 的最新 DL AMI,还发现并使用了一个密钥对。如果它发现多个密钥对,会将它们列出,并要求用户键入其序号以选择所需的密钥对。 通常来讲,如果脚本发现有多个符合条件的项目,会将其显示为编号列表,并让用户通过键入其序号选择对应的项。比如在此处,脚本列出可支持的加速器大小并让用户选择。
- 选择 VPC。 如上文所示,用户选择了加速器大小选项 ‘1’,脚本确认加速器大小已选择,进一步发现并应用 IAM 角色。然后,它将会显示可用 VPC 的列表。
- 启动实例。 当用户选择 VPC ID 时,脚本会找到与所选 VPC 关联的包含匹配入站规则的安全组,还会找到一个与所选 VPC ID 关联的子网。此外,它还找到了连接 Amazon EI 服务的 VPC 终端节点。当脚本获得了启动 EC2 实例的所有详细信息后,脚本将会汇总所有参数并用来启动该实例。
- 启动并等待实例达到运行状态。 当用户键入 ‘y’ 后,脚本会继续启动实例。脚本还会打印可能的 SSH 命令。脚本根据根据操作系统类型、所选的密钥对和Public DNS 名称来形成 SSH 命令。实际命令可能会因 pem 文件的位置而有不同。脚本还会发出提示警告:即使已处于运行状态,实例仍可能无法立即通过 SSH 访问。实例需要完全初始化,尤其是需要先启动 SSH 守护程序才能接受 SSH 连接。如果正确定位到 pem 文件,用户应当能够访问实例,并进一步使用 Amazon Elastic Inference。
小结
此设置脚本可简化您启动 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 爱好徒步、指导机器人设计小组,并与家人和朋友一起消遣。