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 Drivers、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 遠端伺服器訪問

在 Amazon EC2 上使用 HF DLAMI 建立 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控制檯請求提高服務配額。方法是導航到左側面板中的“服務配額”,選擇“AWS 服務”,然後搜尋 Amazon EC2,再搜尋 “trn” 或 “inf”。您可以分別請求按需例項和 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 控制檯在 us-east-1 區域(弗吉尼亞北部)部署一個 trn1.2xlarge 例項。

首先,點選 **啟動例項 (Launch instance)** 併為例項定義一個名稱(例如 `trainium-huggingface-demo`)。

name instance

接下來,在 Amazon Marketplace 中搜索 Hugging Face AMI。在“應用程式和作業系統映像”的搜尋欄中輸入“Hugging Face”,然後按“回車鍵”。

search ami

這應該會開啟帶有搜尋結果的“選擇 Amazon Machine Image”檢視。您現在可以導航到“AWS Marketplace AMIs”,找到 Hugging Face Neuron 深度學習 AMI 並點選選擇。

select ami

如果您尚未訂閱,系統會要求您訂閱。該 AMI 完全免費,您只需支付 EC2 的計算費用。

然後你需要定義一個金鑰對,它將用於透過 `ssh` 連線到例項。如果你沒有金鑰對,可以當場建立一個。

select ssh key

之後,建立或選擇一個允許 `ssh` 流量的安全組

select security group

現在您可以啟動例項了。點選右側的“啟動例項 (Launch Instance)”。

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 Notebooks 或 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 瀏覽器。它應該看起來像 https://: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…
  2. 輸入上面 ssh 部分的完整連線字串: ssh -i “/path/to/sshkey.pem” ubuntu@instance_ip_address
  3. VS Code 應該會連線並自動設定 VS Code 伺服器。
  4. 最終,您應該會被提示選擇一個基礎目錄。您可以瀏覽到 Neuron 例項上的一個目錄。
  5. 如果您發現選單中的某些命令顯示為灰色,但鍵盤命令仍然有效(⌘S 儲存或 ^⇧` 開啟終端),您可能需要重啟 VS Code。

© . This site is unofficial and not affiliated with Hugging Face, Inc.