Amazon EC2 上 HPC 工作負載的 EFA 和 MPI 入門
本教學課程協助您啟動 EFA 和 MPI 啟用的執行個體叢集用於 HPC 工作負載。
任務
步驟 1:準備具備 EFA 功能的安全群組
EFA 需要有安全群組來允許往返安全群組自身的所有傳入和傳出流量。下列程序會建立一個安全群組,該安全群組允許所有傳入和傳出流量,並允許來自任何 IPv4 地址的傳入 SSH 流量以進行 SSH 連線。
重要
此安全群組僅供測試之用。對於生產環境,我們建議您建立傳入 SSH 規則,該規則僅允許來自連線 IP 位址的流量,例如電腦的 IP 位址或區域網路中的一系列 IP 位址。
如需其他案例,請參閱不同使用案例的安全群組規則。
建立具備 EFA 功能的安全群組
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Security Groups (安全群組),然後選擇 Create Security Group (建立安全群組)。
-
在 Create Security Group (建立安全群組) 視窗中,執行下列動作:
-
對於 Security group name (安全群組名稱),輸入安全群組的描述性名稱,例如
EFA-enabled security group
。 -
(選用) 對於 Description (描述),輸入安全群組的簡短描述。
-
對於 VPC,選取您打算讓具備 EFA 功能的執行個體在其中啟動的 VPC。
-
選擇 Create Security Group (建立安全群組)。
-
-
選取您建立的安全群組,在 Details (詳細資料) 索引標籤上,複製 Security group ID (安全群組 ID)。
-
在仍然選取安全群組的情況下,依序選取 Actions (動作) 和 Edit inbound rules (編輯傳入規則),然後執行下列動作。
-
選擇新增規則。
-
針對類型,選擇所有流量。
-
若為 Source type (來源類型),選擇 Custom (自訂),然後將您複製的安全群組 ID 貼到欄位中。
-
選擇新增規則。
-
針對 Type (類型),選擇 SSH。
-
針對 Source type (來源類別),選擇 Anywhere-IPv4(隨處 - IPv4)。
-
選擇儲存規則。
-
-
在仍然選取安全群組的情況下,依序選取 Actions (動作) 和 Edit outbound rules (編輯傳出規則),然後執行下列動作。
-
選擇新增規則。
-
針對類型,選擇所有流量。
-
若為 Destination type (目的地類型),選擇 Custom (自訂),然後將您複製的安全群組 ID 貼到欄位中。
-
選擇儲存規則。
-
步驟 2:啟動暫時執行個體
啟動暫時執行個體,以用來安裝和設定 EFA 軟體元件。您可以使用此執行個體來建立具備 EFA 功能的 AMI,再從中啟動具備 EFA 功能的執行個體。
啟動暫時執行個體
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Instances (執行個體),接著選擇 Launch Instances (啟動執行個體) 來開啟新的啟動執行個體精靈。
-
(選用) 在 Name and tags (名稱和標籤) 區段中,為執行個體命名,例如,
EFA-instance
。該名稱將指派作為執行個體的資源標籤 (Name=
)。EFA-instance
-
在 Application and OS Images (應用程式和作業系統映像) 區段中,為其中一個支援的作業系統選取 AMI。
-
在 Instance type (執行個體類型) 區段中,選取支援的執行個體類型。
-
在 Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。
-
在 Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:
-
對於 Subnet (子網路),請選擇要在其中啟動執行個體的子網路。若您未選取子網路,便無法啟用 EFA 的執行個體。
-
針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。
-
展開進階設定區段。
針對網路介面 1,選取網路卡索引 = 0、裝置索引 = 0,以及介面類型 = EFA 搭配 ENA。
(選用) 如果您使用的是多卡執行個體類型,例如
p4d.24xlarge
或p5.48xlarge
,則針對所需的每個額外網路介面,選擇新增網路介面,針對網路卡索引,選擇下一個未使用的索引,然後選擇裝置索引 = 1,介面類型 = EFA 搭配 ENA 或僅限 EFA。
-
-
在儲存區段中,根據需求設定磁碟區。
-
在右邊的 Summary (摘要) 面板中,選擇 Launch instance (啟動執行個體)。
注意
請考慮要求將 IMDSv2 用於暫時執行個體,以及您在步驟 9 中建立的 AMI,除非您已將 IMDSv2 設定為帳戶的預設值。如需 IMDSv2 設定步驟的相關資訊,請參閱 設定新執行個體的執行個體中繼資料選項。
步驟 3:安裝 EFA 軟體
在暫存執行個體上安裝支援 EFA 所需的具備 EFA 功能的核心、EFA 驅動程式、Libfabric 和 Open MPI 堆疊。
該步驟會根據您是否打算將 EFA 與 Open MPI、Intel MPI 或 Open MPI 與 Intel MPI 搭配使用而有所不同。
安裝 EFA 軟體
-
連接至您啟動的執行個體。如需詳細資訊,請參閱 使用 SSH 連線至您的 Linux 執行個體。
-
為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。此程序可能需要幾分鐘的時間。
-
Amazon Linux 2023、Amazon Linux 2、RHEL 8/9、Rocky Linux 8/9
$
sudo yum update -y -
Ubuntu 和 Debian
$
sudo apt-get update && sudo apt-get upgrade -y -
SUSE Linux Enterprise
$
sudo zypper update -y
-
-
重新啟動執行個體並重新連線至其中。
-
下載 EFA 軟體安裝檔案。軟體安裝檔案已封裝成壓縮 tarball (
.tar.gz
) 檔案。若要下載最新穩定版本,請使用下列命令:$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.37.0.tar.gz您也可以在之前的命令中以
latest
取代版本號碼,以取得最新版本。 (選用) 驗證 EFA tarball (
.tar.gz
) 檔案的真確性及完整性。我們建議您執行這項操作來確認軟體發布者的身分,並檢查檔案自發行以來並未遭到變更或損毀。如果您不想驗證 tarball 檔案,請略過此步驟。
注意
或者,如果您偏好使用 MD5 或 SHA256 檢查總和來驗證 tarball 檔案,請參閱使用檢查總和驗證 EFA 安裝程式。
-
下載公有 GPG 金鑰並匯入至您的 keyring。
$
wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key命令應傳回金鑰值。請記下金鑰的值,因為下一個步驟將需要它。
-
驗證 GPG 金鑰的指紋。執行以下命令,並指定上一步驟中的金鑰值。
$
gpg --fingerprintkey_value
命令應傳回與
4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
相同的指紋。如果指紋不相符,請勿執行 EFA 安裝指令碼,並聯絡 AWS Support。 -
下載簽章檔案並驗證 EFA tarball 檔案的簽章。
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.37.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.37.0.tar.gz.sig下面顯示了範例輸出。
gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
如果結果包含
Good signature
,而指紋與上一個步驟中傳回的指紋相符,請繼續下一個步驟。如果指紋不相符,請勿執行 EFA 安裝指令碼,並聯絡 AWS Support。
-
-
從壓縮的
.tar.gz
檔案中解壓縮檔案,然後導覽至解壓縮的目錄。$
tar -xf aws-efa-installer-1.37.0.tar.gz && cd aws-efa-installer -
安裝 EFA 軟體。根據使用案例而定,執行以下其中一個命令。
注意
EFA 不支援使用 SUSE Linux 的 NVIDIA GPUDirect。如果您使用的是 SUSE Linux,您必須另外指定
--skip-kmod
選項來防止 kmod 安裝。根據預設,SUSE Linux 不允許樹狀結構外的核心模組。 -
如果 EFA 安裝程式提示您重新啟動執行個體,請執行這項操作,然後重新連線至執行個體。否則,請登出執行個體,然後重新登入以完成安裝。
步驟 4:(選用) 啟用 Open MPI 5
注意
只有在您打算使用 Open MPI 5 時,才執行此步驟。
從 EFA 1.30.0 開始,根據預設會安裝 Open MPI 4 和 Open MPI 5。或者,您也可以選擇僅安裝 Open MPI 4 或 Open MPI 5。
如果您在步驟 3:安裝 EFA 軟體中選擇安裝且有意使用 Open MPI 5,則必須執行下列步驟以啟用 Open MPI 5。
啟用 Open MPI 5
-
將 Open MPI 5 新增至 PATH 環境變數。
$
module load openmpi5 -
確認是否已啟用 Open MPI 5 以供使用。
$
which mpicc此命令應會傳回 Open MPI 5 安裝目錄 -
/opt/amazon/openmpi5
。 -
(選用) 若要確保在每次執行個體啟動時,Open MPI 5 都會新增至 PATH 環境變數,請執行下列動作:
如果您需要從 PATH 環境變數移除 Open MPI 5,請執行下列命令,並從 shell 啟動指令碼中移除該命令。
$
module unload openmpi5
步驟 5:(選用) 安裝 Intel MPI
重要
只有在您打算使用 Intel MPI 時,才執行此步驟。如果您打算使用 Open MPI,請略過此步驟。
Intel MPI 需要額外的安裝和環境變數組態。
先決條件
確保執行下列步驟的使用者具有 sudo 許可。
安裝 Intel MPI
-
如要下載 Intel MPI 安裝指令碼,請執行下列步驟
-
請造訪 Intel 網站
。 -
在該網頁的 Intel MPI Library 區段中,選擇 Intel MPI Library for Linux Offline 安裝程式。
-
-
執行您在上一個步驟中下載的安裝指令碼。
$
sudo bashinstallation_script_name
.sh -
在安裝程式中,選擇 Accept & install (接受並安裝)。
-
閱讀 Intel 改進計畫,選擇適當的選項,然後選擇 Begin Installation (開始安裝)。
-
完成安裝時,請選擇 Close (關閉)。
-
根據預設,Intel MPI 會使用其內嵌 (內部) Libfabric。您可以將 Intel MPI 設定為使用 EFA 安裝程式隨附的 LibFabric。通常,EFA 安裝程式隨附的 Libfabric 版本比 Intel MPI 版本更高。在某些情況下,EFA 安裝程式隨附的 Libfabric 比 Intel MPI 效能更佳。若要將 Intel MPI 設定為使用 EFA 安裝程式隨附的 Libfabric,請根據您的 shell 執行下列其中一項操作。
-
新增下列 source 命令到您的 shell 指令碼,從安裝目錄中獲取
vars.sh
的指令碼,從而在每次啟動執行個體時設定編譯器環境。根據 shell 而定,執行以下其中一個命令。 -
根據預設,如果因為設定錯誤而無法使用 EFA,Intel MPI 會預設使用 TCP/IP 網路堆疊,這可能會導致應用程式效能降低。透過將
I_MPI_OFI_PROVIDER
設定為efa
,可防止此情況發生。如果無法使用 EFA,這會導致 Intel MPI 失敗,並出現下列錯誤:Abort (XXXXXX) on node 0 (rank 0 in comm 0): Fatal error in PMPI_Init: OtherMPI error, MPIR_Init_thread (XXX)........: MPID_Init (XXXX)..............: MPIDI_OFI_mpi_init_hook (XXXX): open_fabric (XXXX)............: find_provider (XXXX)..........: OFI fi_getinfo() failed (ofi_init.c:2684:find_provider:
根據 shell 而定,執行以下其中一個命令。
-
根據預設,Intel MPI 不會列印偵錯資訊。您可以指定不同的詳細資訊等級來控制偵錯資訊。可能的值 (依提供的詳細資訊量排序) 為:
0
(預設)、1
、2
、3
、4
、5
。等級1
和更高等級會列印libfabric version
和libfabric provider
。使用libfabric version
檢查 Intel MPI 使用的是內部 LibFabric 還是 EFA 安裝程式隨附的 LibFabric。如果它使用的是內部 Libfabric,則版本字尾為impi
。使用libfabric provider
檢查 Intel MPI 是否的是 EFA 還是或 TCP/IP 網絡。如果使用的是 EFA,則值為efa
。如果使用的是 TCP/IP,則值為tcp;ofi_rxm
。若要啟用偵錯資訊,請根據您的 shell 執行以下其中一個命令。
-
根據預設,Intel MPI 會使用作業系統的共用記憶體 (
shm
) 進行節點內通訊,並且僅將 Libfabric (ofi
) 用於節點間通訊。通常,此組態可提供最佳效能。不過,在某些情況下,Intel MPI shm 結構可能會導致某些應用程式無限期中止。若要解決此問題,您可以強制 Intel MPI 使用 Libfabric 進行節點內和節點間通訊。為此,請根據您的 shell,執行以下其中一個命令。
注意
EFA Libfabric 提供者會使用作業系統的共用記憶體進行節點內通訊。這表示將
I_MPI_FABRICS
設定為ofi
可產生與預設shm:ofi
組態類似的效能。 -
登出執行個體,然後重新登入。
如果您不要再使用 Intel MPI,請從 shell 啟動指令碼中移除環境變數。
步驟 6:停用 ptrace 保護
為了改善 HPC 應用程式的效能,在相同執行個體上執行處理序時,Libfabric 會使用執行個體的本機記憶體進行處理序間通訊。
共用記憶體功能使用 Cross Memory Attach (CMA),其未受 ptrace 保護支援。如果您使用的 Linux 發行套件依預設已啟用 ptrace 防護,例如 Ubuntu,您必須停用該保護。如果您的 Linux 發行套件依預設未啟用 ptrace 保護,請略過此步驟。
停用 ptrace 保護
請執行下列其中一項:
-
如果出於測試用途要暫時停用 ptrace 保護,請執行下列命令。
$
sudo sysctl -w kernel.yama.ptrace_scope=0 -
若要永久停用 ptrace 保護,請將
kernel.yama.ptrace_scope = 0
新增至/etc/sysctl.d/10-ptrace.conf
,並重新啟動執行個體。
步驟 7. 確認安裝
確認已成功安裝
-
若要確認已成功安裝 MPI,請執行下列命令:
$
which mpicc-
若為 Open MPI,傳回的路徑應包括
/opt/amazon/
-
若為 Intel MPI,傳回的路徑應包括
/opt/intel/
。如果沒有得到預期輸出,請確保已獲取 Intel MPIvars.sh
指令碼。
-
-
若要確認是否已成功安裝 EFA 軟體元件和 Libfabric,請執行下列命令。
$
fi_info -p efa -t FI_EP_RDM此命令應該會傳回 Libfabric EFA 介面的相關資訊。以下範例顯示命令輸出。
provider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
步驟 8:安裝 HPC 應用程式
在暫時執行個體上安裝 HPC 應用程式。安裝程序依特定的 HPC 應用程式而異。如需詳細資訊,請參閱《Amazon Linux 2 使用者指南》中的在 AL2 執行個體上管理軟體。
注意
參考 HPC 應用程式的文件,以取得安裝指示。
步驟 9:建立已啟用 EFA 的 AMI
安裝所需的軟體元件之後,您需要建立 AMI,以重複用來啟動具備 EFA 功能的執行個體。
從暫時執行個體建立 AMI
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Instances (執行個體)。
-
選取您建立的暫時執行個體,然後選取 Actions (動作)、Image (映像)、Create image (建立映像)。
-
對於 Create image (建立映像),執行下列動作:
-
對於 Image name (映像名稱),輸入 AMI 的描述性名稱。
-
(選用) 對於 Image description (映像描述),輸入 AMI 的簡短描述。
-
選擇Create image。
-
-
在導覽窗格中,選擇 AMIs。
-
在清單中找出您建立的 AMI。等待狀態從
pending
變為available
,再繼續進行下一個步驟。
步驟 10:在集群放置群組中啟動已啟用 EFA 的執行個體
使用具備 EFA 功能的 AMI (在步驟 7 中建立) 和具備 EFA 功能的安全群組 (在步驟 1 中建立),在叢集置放群組中啟動具備 EFA 功能的執行個體。
注意
-
在叢集置放群組中啟動具備 EFA 的執行個體並非絕對必要。不過,建議在叢集置放群組中執行具備 EFA 功能的執行個體,因為這樣會在單一可用區域的低延遲群組中啟動執行個體。
-
要確保在擴展叢集執行個體時容量可用,您可以為叢集置放群組建立容量保留。如需詳細資訊,請參閱在叢集置放群組建立容量保留。
啟動執行個體
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Instances (執行個體),接著選擇 Launch Instances (啟動執行個體) 來開啟新的啟動執行個體精靈。
-
(選用) 在 Name and tags (名稱和標籤) 區段中,為執行個體命名,例如,
EFA-instance
。該名稱將指派作為執行個體的資源標籤 (Name=
)。EFA-instance
-
在 Application and OS Images (應用程式和作業系統映像) 區段中,選取 My AMIs (我的 AMI),接著選取您在前一個步驟中建立的 AMI。
-
在 Instance type (執行個體類型) 區段中,選取支援的執行個體類型。
-
在 Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。
-
在 Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:
-
對於 Subnet (子網路),請選擇要在其中啟動執行個體的子網路。若您未選取子網路,便無法啟用 EFA 的執行個體。
-
針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。
-
展開進階設定區段。
針對網路介面 1,選取網路卡索引 = 0、裝置索引 = 0,以及介面類型 = EFA 搭配 ENA。
(選用) 如果您使用的是多卡執行個體類型,例如
p4d.24xlarge
或p5.48xlarge
,則針對所需的每個額外網路介面,選擇新增網路介面,針對網路卡索引,選擇下一個未使用的索引,然後選擇裝置索引 = 1,介面類型 = EFA 搭配 ENA 或僅限 EFA。
-
-
(選用) 在儲存區段中,根據需求設定磁碟區。
-
在進階詳細資訊區段中,針對 配置群組名稱,選取要在其中啟動執行個體的叢集置放群組。如果您需要建立新的叢集置放群組,請選取建立新的配置群組。
-
在右邊的摘要面板,針對執行個體的數目,輸入要啟動的具備 EFA 功能的執行個體數量,接著選擇啟動執行個體。
步驟 11:終止暫時執行個體
此時,您不再需要您在步驟 2 中啟動的執行個體。您可以終止執行個體,以停止產生費用。
終止暫時執行個體
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Instances (執行個體)。
-
選取您建立的暫時執行個體,然後選擇動作、執行個體狀態、終止 (刪除) 執行個體。
-
出現確認提示時,請選擇終止 (刪除)。
步驟 12:啟用無密碼 SSH
若要讓您的應用程式能夠跨越叢集中的所有執行個體執行,您必須啟用從領導節點到成員節點的無密碼 SSH 存取。領導節點是您在其中執行應用程式的執行個體。叢集中的其餘執行個體為成員節點。
在叢集的執行個體之間啟用無密碼 SSH
-
選取叢集中的一個執行個體作為領導節點,並與它連線。
-
在領導節點上停用
strictHostKeyChecking
並啟用ForwardAgent
。使用您偏好的文字編輯器開啟~/.ssh/config
,然後新增下列命令。Host * ForwardAgent yes Host * StrictHostKeyChecking no
-
產生 RSA 金鑰對。
$
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa在
$HOME/.ssh/
目錄中建立金鑰對。 -
變更領導節點上私有金鑰的許可。
$
chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
使用您偏好的文字編輯器開啟
~/.ssh/id_rsa.pub
並複製該金鑰。 -
對於叢集中的每個成員節點,執行以下操作:
-
連線到執行個體。
-
使用您偏好的文字編輯器開啟
~/.ssh/authorized_keys
,然後新增您先前複製的公有金鑰。
-
-
若要測試無密碼的 SSH 是否如預期運作,請連線至領導節點並執行下列命令。
$
sshmember_node_private_ip
您應該連線至成員節點,而不會提示您輸入金鑰或密碼。