AWS Trainium 和 Inferentia 文档

Amazon EC2 入门指南

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Amazon EC2 入门指南

在 Amazon EC2 上使用 AWS Trainium 或 Inferentia 和 Optimum Neuron 最简单的方法是 Hugging Face Neuron 深度学习 AMI (DLAMI)。DLAMI 预先包装了所有必需的库,包括 Neuron 驱动程序、Transformers、Datasets 和 Accelerate。HF DLAMI 对 Amazon EC2 用户免费提供。

Optimum Neuron 支持 Inf1、Inf2、Trn1 和 Trn2,所有这些都可以在 Amazon EC2 上访问。您可以在此处的“加速计算”部分找到 Trn 和 Inf 实例的所有规范。

在本指南中,我们将向您展示

  1. 如何在 Amazon EC2 上使用 HF DLAMI 创建 AWS Trainium 或 Inferentia 实例
    1. 查找支持的区域
    2. 增加服务配额
    3. 使用 HF DLAMI 启动 Amazon EC2 实例
    4. 通过 SSH 连接
  2. 如何设置远程开发环境
    1. 通过 Jupyter Notebook 访问
    2. 通过 VS Code 远程服务器访问

使用 HF DLAMI 在 Amazon EC2 上创建 AWS Trainium 或 Inferentia 实例

在创建 EC2 实例之前,请确保您位于所选实例的支持区域,并且您的 AWS 账户中有配额。

查找支持的区域

以下是截至 2025 年 2 月支持至少一种 Trainium 或 Inferentia2 实例类型的区域列表

  • us-east-1:美国东部(弗吉尼亚北部)
  • us-east-2:美国东部(俄亥俄州)
  • us-west-2:美国西部(俄勒冈州)
  • ap-south-1:亚太地区(孟买)
  • ap-northeast-1:亚太地区(东京)
  • ap-southeast-1:亚太地区(新加坡)
  • ap-southeast-2:亚太地区(悉尼)
  • ap-southeast-4:亚太地区(墨尔本)
  • eu-north-1:欧洲(斯德哥尔摩)
  • eu-west-3:欧洲(巴黎)
  • eu-west-2:欧洲(伦敦)
  • eu-west-1:欧洲(爱尔兰)
  • eu-central-1:欧洲(法兰克福)
  • sa-east-1:南美洲(圣保罗)

这是一个 Python 脚本,可让您在您启用的每个区域中提取最新的支持实例类型

import boto3  
from datetime import datetime

ec2 = boto3.client('ec2')  

regions = [region['RegionName'] for region in ec2.describe_regions()['Regions']]  


#Edit this line to change the instance types displayed  
instance_types = ['trn1.32xlarge', 'trn1.2xlarge', 'inf2.48xlarge', 'inf2.24xlarge', 'inf2.8xlarge', 'inf2.xlarge', 'trn2.48xlarge']  
  
supported_regions = {}  
  
for region in regions:  
   ec2_region = boto3.client('ec2', region_name=region)  
   response = ec2_region.describe_instance_type_offerings(  
      #LocationType='availability-zone',  
      Filters=[  
        {'Name': 'instance-type', 'Values': instance_types},  
      ]  
   )
   if response['InstanceTypeOfferings']:  
      supported_regions[region] = [offer['InstanceType'] for offer in response['InstanceTypeOfferings']]  

print('# Supported Regions as of',datetime.now().strftime('%B %d, %Y'))
print('================')  


client = boto3.client('ssm')

for region, instance_types in supported_regions.items():
    try:
        response = client.get_parameter(Name=f'/aws/service/global-infrastructure/regions/{region}/longName')
        region_long_name = response['Parameter']['Value']
    except (client.exceptions.ParameterNotFound, KeyError):
        region_long_name = region
    print(f' * {region}: {region_long_name}')
    for instance_type in instance_types:
      print(f'  - {instance_type}')
    print('\n') 

增加服务配额

现在您选择了区域并切换到该区域,您可以通过导航到服务配额、左侧面板中的 AWS 服务、搜索 Amazon EC2,然后搜索“trn”或“inf”,通过 AWS 控制台请求增加服务配额。您可以分别请求按需实例和 Spot 实例的配额增加。

默认情况下,Inferentia 和 Trainium 的所有配额均为 0。增加配额不收取任何费用。Inferentia 和 Trainium 有单独的配额,Spot 和按需也有单独的配额。配额是指分配给每种实例类型的最大 vCPU 总数。

例如,192 的配额允许您运行单个 inf2.48xlarge、两个 inf2.24xlarge、六个 inf2.8xlarge 或四十八个 inf2.xlarge。它还允许您运行 inf1 实例类型。与 Trainium 类似,128 的配额允许您运行单个 trn1n.32xlarge 或 trn1.32xlarge,但也允许您运行十六个 trn1.2xlarge。

使用 HF DLAMI 启动 Amazon EC2 实例

让我们通过 EC2 控制台在美国东部 1 区(弗吉尼亚北部)部署一个 trn1.2xlarge 实例。

首先,单击启动实例并为实例定义一个名称 (trainium-huggingface-demo)。

name instance

接下来,您在 Amazon Marketplace 中搜索 Hugging Face AMI。在“应用程序和操作系统映像”的搜索栏中输入“Hugging Face”并按“Enter”。

search ami

现在应该打开“选择 Amazon 系统映像”视图进行搜索。您现在可以导航到“AWS Marketplace AMI”并找到 Hugging Face Neuron 深度学习 AMI,然后单击选择。

select ami

如果您尚未订阅,系统将要求您订阅。AMI 完全免费,您只需支付 EC2 计算费用。

然后您需要定义一个密钥对,该密钥对将用于通过 ssh 连接到实例。如果您没有密钥对,可以在此处创建一个。

select ssh key

之后,创建或选择一个安全组,该安全组允许 ssh 流量。

select security group

您已准备好启动实例。因此,单击右侧的“启动实例”。

select ssh key

AWS 现在将使用 Hugging Face Neuron 深度学习 AMI 预置实例。

通过 SSH 连接

实例准备就绪后,您可以查看并复制公共 IPv4 地址以 ssh 进入机器。

select public dns

将下面代码片段中的空字符串 "" 替换为您的实例的 IP 地址和您在启动实例时创建/选择的密钥对的路径。

PUBLIC_DNS="" # IP address
KEY_PATH="" # local path to key pair

ssh -i $KEY_PATH ubuntu@$PUBLIC_DNS

连接后,您可以运行 neuron-ls 以确保您可以访问 Trainium 加速器。您应该看到与下面类似的输出。

ubuntu@ip-172-31-79-164:~$ neuron-ls
instance-type: trn1.2xlarge
instance-id: i-0570615e41700a481
+--------+--------+--------+---------+
| NEURON | NEURON | NEURON |   PCI   |
| DEVICE | CORES  | MEMORY |   BDF   |
+--------+--------+--------+---------+
| 0      | 2      | 32 GB  | 00:1e.0 |
+--------+--------+--------+---------+

如何设置远程开发环境

我们将逐步介绍如何在 Amazon EC2 实例上设置 Jupyter Notebook 或 VS Code 远程服务器。

这两种方法都需要某种 SSH 连接。这些说明是为 Mac 编写的,但也应在 Linux 系统上运行。PC 可能需要使用 Putty。

您应该有一个 .pem 文件,该文件是您在部署实例时创建的,或者从之前的部署中获得的。您可以使用以下命令连接到您的系统

ssh -i "/path/to/sshkey.pem" ubuntu@instance_ip_address

通过 Jupyter Notebook 访问

此方法涉及在 Neuron 实例上运行 Jupyter notebook 服务器,本地映射端口,然后使用桌面上的浏览器访问 notebook 服务器。

首先,将本地计算机上的端口映射到 Neuron 实例。在系统上的终端中,运行

ssh -i "/path/to/sshkey.pem" -N -f -L localhost:8888:localhost:8888 ubuntu@instance_ip_address

然后使用 SSH 从您的计算机连接到您的 Amazon EC2 实例。连接后,从命令提示符运行

nohup jupyter notebook --no-browser --port=8888

几秒钟后,检查 nohup.out 文件以查找服务器的令牌

cat nohup.out | grep localhost

复制连接字符串并将其粘贴到浏览器中。几秒钟后,您最终应该看到 Jupyter Notebook 浏览器。它应该看起来像 http://localhost:8888/tree?token=337fc8de2aenot_a_real_tokene952c43946e4fb57131

此过程有效,因为您已将本地计算机上的 8888 端口映射到 Neuron 实例上的 8888 端口,因此当您连接到 localhost:8888 时,您最终会访问 Neuron 实例上的 Jupyter 服务器。

如果您遇到问题,请确保初始端口映射成功。如果您已经在机器上的端口 8888 上运行某些东西,这可能会给您带来错误。如果需要,您可以随时在所有说明中更改端口(例如 8885)。

通过 VS Code 远程服务器访问

在本地计算机上安装 Visual Studio Code 后,您可以使用 Remote-SSH 命令来编辑和运行存储在 Neuron 实例上的文件。有关更多详细信息,请参阅 VS Code 文章。

  1. 从命令面板 (F1, ⇧⌘P) 中选择 Remote-SSH: Connect to Host…(远程 SSH:连接到主机…)
  2. 从上面的 ssh 部分输入完整的连接字符串:ssh -i “/path/to/sshkey.pem” ubuntu@instance_ip_address
  3. VS Code 应该连接并自动设置 VS Code 服务器。
  4. 最终,系统应提示您输入基本目录。您可以浏览到 Neuron 实例上的目录。
  5. 如果您发现某些命令在菜单中显示为灰色,但键盘命令仍然有效(⌘S 保存或 ^⇧` 打开终端),您可能需要重启 VS Code。