本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用EFA和 MPI
本教學課程可協助您針對HPC工作負載啟MPI用EFA且已啟用的執行個體叢集。在本教學課程中,您將執行下列步驟:
目錄
步驟 1:準備EFA已啟用的安全性群組
EFA需要安全性群組,該群組允許進出安全性群組本身的所有輸入和輸出流量。下列程序會建立一個安全性群組,允許所有輸入和輸出流量進出本身,並允許來自任何IPv4位址的輸入SSH流量進行SSH連線。
重要
此安全群組僅供測試之用。對於生產環境,建議您建立輸入SSH規則,該規則僅允許來自您連線的 IP 位址的流量,例如電腦的 IP 位址或區域網路中的一系列 IP 位址。
如需其他案例,請參閱 不同使用案例的安全群組規則 。
若要建立EFA已啟用的安全性群組
-
在打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/
-
在導覽窗格中,選擇 Security Groups (安全群組),然後選擇 Create Security Group (建立安全群組)。
在 Create Security Group (建立安全群組) 視窗中,執行下列動作:
對於 Security group name (安全群組名稱),輸入安全群組的描述性名稱,例如
EFA-enabled security group
。(選用) 對於 Description (描述),輸入安全群組的簡短描述。
在VPC中 VPC ,選取您要啟用已啟EFA用執行個體的目標。
選擇 Create Security Group (建立安全群組)。
選取您建立的安全群組,在 Details (詳細資料) 索引標籤上,複製 Security group ID (安全群組 ID)。
在仍然選取安全群組的情況下,依序選取 Actions (動作) 和 Edit inbound rules (編輯傳入規則),然後執行下列動作。
選擇 新增規則 。
針對 類型 ,選擇 所有流量 。
若為 Source type (來源類型),選擇 Custom (自訂),然後將您複製的安全群組 ID 貼到欄位中。
選擇 新增規則 。
針對 Type (類型) ,選擇 SSH 。
針對「 來源類型 」,選擇「 隨處- 」IPv4。
選擇 儲存規則 。
在仍然選取安全群組的情況下,依序選取 Actions (動作) 和 Edit outbound rules (編輯傳出規則),然後執行下列動作。
選擇 新增規則 。
針對 類型 ,選擇 所有流量 。
若為 Destination type (目的地類型),選擇 Custom (自訂),然後將您複製的安全群組 ID 貼到欄位中。
選擇 儲存規則 。
步驟 2:啟動暫時執行個體
啟動可用來安裝和設定EFA軟體元件的暫時執行個體。您可以使用此執行個體建立EFA已啟用的執行個體,AMI從中啟動EFA已啟用的執行個體。
啟動暫時執行個體
-
在打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/
-
在導覽窗格中,選擇 Instances (執行個體),接著選擇 Launch Instances (啟動執行個體) 來開啟新的啟動執行個體精靈。
( 選用 ) 在 Name and tags (名稱和標籤) 區段中,為執行個體命名,例如,
EFA-instance
。該名稱將指派作為執行個體的資源標籤 (Name=
)。EFA-instance
在「 應用程式和作業系統映像 」區段中,AMI為其中一個 支援的作業系統 選取一個。
在 Instance type (執行個體類型) 區段中,選取 支援的執行個體類型 。
在 Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。
在 Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:
對於 Subnet (子網) ,請選擇要在其中啟動執行個體的子網。如果您未選取子網路,則無法啟用的執行個體EFA。
針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。
展開 Advanced network configuration (進階網路組態) 區段,並針對 Elastic Fabric Adapter ,選取 Enable (啟用)。
在 儲存 區段中,根據需求設定磁碟區。
在右邊的 Summary (摘要) 面板中,選擇 Launch instance (啟動執行個體)。
注意
除非您已經 設IMDSv2定為帳戶的預設值,否則請考慮IMDSv2針對暫存執行個體以及在步驟 9 中建立的執行個體使用 。AMI如需IMDSv2組態步驟的詳細資訊,請參閱 設定新執行個體的執行個體中繼資料選項 。
步驟 3:安裝 EFA 軟體
安EFA裝在暫存執行個體EFA上支援所需的已啟用核心、EFA驅動程式、Libfabric 和 Open MPI 堆疊。
這些步驟會因您打算搭配「開啟」MPI、「Intel」或「EFA開放」MPI 和「IntelMPI」搭配使用而有所不同MPI。
安裝 EFA 軟體
-
連接至您啟動的執行個體。如需詳細資訊,請參閱 使用 Connect 到您的 Linux 執行個體 SSH 。
為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。此程序可能需要幾分鐘的時間。
Amazon Linux 2023, Amazon Linux 2, 7 月 8 日, CentOS 7, 洛基 Linux RHEL 8/9
$
sudo yum update -yUbuntu 和 Debian
$
sudo apt-get update && sudo apt-get upgrade -ySUSELinux 企業版
$
sudo zypper update -y重新啟動執行個體並重新連線至其中。
下載 EFA 軟體安裝檔案。軟體安裝檔案已封裝成壓縮 tarball (
.tar.gz
) 檔案。若要下載最新 穩定 版本,請使用下列命令:$
C:\>
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.33.0.tar.gz您也可以在之前的命令中以
latest
取代版本號碼,以取得最新版本。( 選擇 性) 驗證 EFA tarball (
.tar.gz
) 檔案的真實性與完整性。我們建議您執行這項操作來確認軟體發行者的身分,並檢查檔案自發行以來並未遭到變更或損毀。如果您不想驗證 tarball 檔案,請略過此步驟。
注意
或者,如果您想要使用MD5或SHA256總和檢查碼來驗證 tarball 檔案,請參閱。 使用總和檢查碼驗證EFA安裝程式
下載公開GPG金鑰並將其匯入您的金鑰圈。
$
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.33.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.33.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 <[email protected]>" 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
檔案中解壓縮檔案,然後導覽至解壓縮的目錄。$
C:\>
tar -xf aws-efa-installer-1.33.0.tar.gz && cd aws-efa-installer安裝 EFA 軟體。根據使用案例而定,執行以下其中一個命令。
注意
EFA不支援NVIDIAGPUDirect使用 SUSE Linux 。如果您使用的是 SUSE Linux,則必須另外指定
--skip-kmod
選項以防止 kmod 安裝。根據預設,SUSELinux 不允許 out-of-tree 核心模組。- Open MPI and Intel MPI
如果您打算EFA搭配「開放」MPI 和「Intel」使用MPI,您必須使用 Libfabric 與開放式來安裝EFA軟體MPI,而且您 必須完成「步驟 5:安裝 Intel MPI 」。
若要使用 Libfabric 安裝EFA軟體並開啟MPI,請執行下列命令。
注意
從 EFA 1.30.0 開始,預設會安裝「開啟 MPI 4」和「開啟 MPI 5」。您可以選擇性地指定要安裝MPI的 Open 版本。要僅安裝打開 MPI 4,包括
--mpi=openmpi4
。要僅安裝打開 MPI 5,包括--mpi=openmpi5
。若要同時安裝這兩種版本,請忽略--mpi
選項。$
sudo ./efa_installer.sh -yLibfabric 會安裝到
/opt/amazon/efa
。打開 MPI 4 安裝到/opt/amazon/openmpi
。打開 MPI 5 安裝到/opt/amazon/openmpi5
。- Open MPI only
如果您打算在「MPI僅EFA開啟」中使用,則必須使用 Libfabric 和「開啟」來安裝EFA軟體MPI,並且可以 略過「步驟 5:安裝 Intel MPI 」。若要使用 Libfabric 安裝EFA軟體並開啟MPI,請執行下列命令。
注意
從 EFA 1.30.0 開始,預設會安裝「開啟 MPI 4」和「開啟 MPI 5」。您可以選擇性地指定要安裝MPI的 Open 版本。要僅安裝打開 MPI 4,包括
--mpi=openmpi4
。要僅安裝打開 MPI 5,包括--mpi=openmpi5
。若要同時安裝這兩種版本,請忽略--mpi
選項。$
sudo ./efa_installer.sh -yLibfabric 會安裝到
/opt/amazon/efa
。打開 MPI 4 安裝到/opt/amazon/openmpi
。打開 MPI 5 安裝到/opt/amazon/openmpi5
。- Intel MPI only
如果您MPI只打算EFA與 Intel 搭配使用,您可以在沒有 Libfabric 和開啟MPI的情況下安裝EFA軟體。在這種情況下,英特爾MPI使用其嵌入式利布。如果您選擇這樣做,您 必須完成步驟 5:安裝 Intel MPI 。
若要在不使用 Libfabric 並開啟的情況下安裝EFA軟體MPI,請執行下列命令。
$
sudo ./efa_installer.sh -y --minimal如果EFA安裝程式提示您重新啟動執行個體,請執行此動作,然後重新連線至執行個體。否則,請登出執行個體,然後重新登入以完成安裝。
步驟 4:( 可選 )啟用打開 MPI 5
注意
只有在您打算使用「開啟 MPI 5」時才執行此步驟。
從 EFA 1.30.0 開始,預設會安裝「開啟 MPI 4」和「開啟 MPI 5」。或者,您可以選擇僅安裝「打開 MPI 4」或「打開 MPI 5」。
如果您選擇在 步驟 3:安裝EFA軟體中安裝 Open MPI 5,並且打算使用它,則必須執行以下步驟來啟用它。
啟用「開啟 MPI 5」
-
將「開啟 MPI 5」新增至PATH環境變數。
$
module load openmpi5確認已啟用「開啟 MPI 5」以供使用。
$
which mpicc該命令應返回 Open MPI 5 安裝目錄-
/opt/amazon/openmpi5
。( 選擇性 ) 若要確保每次執行個體啟動時都會將 Open MPI 5 新增至PATH環境變數,請執行下列動作:
- bash shell
將
module load openmpi5
新增至/home/
和username
/.bashrc/home/
。username
/.bash_profile- csh and tcsh shells
將
module load openmpi5
新增至/home/
。username
/.cshrc如果您需要從PATH環境變數中移除 Open MPI 5,請執行下列命令,並從 shell 啟動程序檔中移除該命令。
$
module unload openmpi5步驟 5:( 可選 )安裝英特爾 MPI
重要
只有在您打算使用 Intel 時才執行此步驟MPI。如果您只打算使用「打開」MPI,請跳過此步驟。
Intel MPI 需要額外的安裝與環境變數組態。
確保執行下列步驟的使用者具有 sudo 許可。
若要安裝英特爾 MPI
-
若要下載 Intel MPI 安裝指令碼,請執行下列動作
請造訪 Intel 網站
在網頁的「 Intel 程式MPI庫 」區段中,選擇適用於 Linux 的 Intel 程式MPI庫 離線 安裝程式的連結。
執行您在上一個步驟中下載的安裝指令碼。
$
sudo bashinstallation_script_name
.sh在安裝程式中,選擇 Accept & install (接受並安裝)。
閱讀 Intel 改進計畫,選擇適當的選項,然後選擇 Begin Installation (開始安裝)。
完成安裝時,請選擇 Close (關閉) 。
根據預設,Intel MPI 會使用其內嵌式 (內部) 網格架構。您可以MPI將 Intel 設定為使用隨EFA安裝程式隨附的 Libfabric。通常情況下,EFA安裝程式隨附的 Libfabric 版本比英特爾MPI更新。在某些情況下,EFA安裝程式隨附的 Libfabric 比 Intel 更具效能。MPI若要設定 Intel MPI 使用隨EFA安裝程式隨附的 Libfabric,請根據您的殼層執行下列其中一項動作。
- bash shells
將以下陳述式新增至
/home/
和username
/.bashrc/home/
。username
/.bash_profileexport I_MPI_OFI_LIBRARY_INTERNAL=0
- csh and tcsh shells
將以下陳述式新增至
/home/
。username
/.cshrcsetenv I_MPI_OFI_LIBRARY_INTERNAL 0
新增下列 source 命令到您的 shell 指令碼,從安裝目錄中獲取
vars.sh
的指令碼,從而在每次啟動執行個體時設定編譯器環境。根據 shell 而定,執行以下其中一個命令。- bash shells
將以下陳述式新增至
/home/
和username
/.bashrc/home/
。username
/.bash_profilesource /opt/intel/oneapi/mpi/latest/env/vars.sh
- csh and tcsh shells
將以下陳述式新增至
/home/
。username
/.cshrcsource /opt/intel/oneapi/mpi/latest/env/vars.csh
根據預設,如果EFA因MPI為設定錯誤而無法使用,Intel 會預設使用 TCP /IP 網路堆疊,這可能會導致應用程式效能變慢。透過將
I_MPI_OFI_PROVIDER
設定為efa
,可防止此情況發生。如EFA果無法使MPI用,這會導致 Intel 失敗,並出現下列錯誤: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 而定,執行以下其中一個命令。
- bash shells
將以下陳述式新增至
/home/
和username
/.bashrc/home/
。username
/.bash_profileexport I_MPI_OFI_PROVIDER=efa
- csh and tcsh shells
將以下陳述式新增至
/home/
。username
/.cshrcsetenv I_MPI_OFI_PROVIDER efa
根據預設,Intel MPI 不會列印除錯資訊。您可以指定不同的詳細資訊等級來控制偵錯資訊。可能的值 (依提供的詳細資訊量排序) 為:
0
(預設)、1
、2
、3
、4
、5
。等級1
和更高等級會列印libfabric version
和libfabric provider
。用libfabric version
來檢查 Intel MPI 是否正在使用安裝程式隨附的內部 Libfabric 或是隨附於安裝程式的 Libfabric。EFA如果它使用的是內部 Libfabric,則版本字尾為impi
。用libfabric provider
於檢查 Intel MPI 正在使用EFA或 TCP /IP 網路。如果它正在使用EFA,則值為efa
。如果它使用 TCP /IP,則值為tcp;ofi_rxm
。若要啟用偵錯資訊,請根據您的 shell 執行以下其中一個命令。
- bash shells
將以下陳述式新增至
/home/
和username
/.bashrc/home/
。username
/.bash_profileexport I_MPI_DEBUG=
value
- csh and tcsh shells
將以下陳述式新增至
/home/
。username
/.cshrcsetenv I_MPI_DEBUG
value
根據預設,Intel MPI 會使用作業系統的共用記憶體 (
shm
) 進行節點內部通訊,而且僅使用 Libfabric (ofi
) 進行節點間通訊。通常,此組態可提供最佳效能。不過,在某些情況下,Intel MPI shm 網狀架構可能會造成某些應用程式無限期懸置。若要解決這個問題,您可以強制 Intel 使MPI用 Libfabric 進行節點內部與節點間通訊。為此,請根據您的 shell,執行以下其中一個命令。
- bash shells
將以下陳述式新增至
/home/
和username
/.bashrc/home/
。username
/.bash_profileexport I_MPI_FABRICS=ofi
- csh and tcsh shells
將以下陳述式新增至
/home/
。username
/.cshrcsetenv I_MPI_FABRICS ofi
注意
EFALibfabric 提供者會使用作業系統的共用記憶體進行節點內部通訊。這表示將
I_MPI_FABRICS
設定為ofi
可產生與預設shm:ofi
組態類似的效能。登出執行個體,然後重新登入。
如果您不想再使用 IntelMPI,請從殼層啟動程序檔中移除環境變數。
步驟 6:停用 ptrace 保護
為了改善HPC應用程式的效能,當處理序在同一個執行個體上執行時,Libfabric 會使用執行個體的本機記憶體進行處理序間通訊。
共用記憶體功能使用跨記憶體連接 (CMA), ptrace 保護 不支援此功能。如果您使用的 Linux 發行套件依預設已啟用 ptrace 防護,例如 Ubuntu,您必須停用該保護。如果您的 Linux 發行套件依預設未啟用 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對於 OpenMPI,返回的路徑應包括
/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從暫存執行個體建立
-
在打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/
-
在導覽窗格中,選擇 Instances (執行個體)。
選取您建立的暫時執行個體,然後選取 Actions (動作)、 Image (映像)、 Create image (建立映像)。
對於 Create image (建立映像),執行下列動作:
在「 影像名稱 」中,輸入的描述性名稱AMI。
(選擇性) 在 影像說明 中,輸入用途的簡短描述AMI。
選擇 Create image (建立映像)。
在導覽窗格中,選擇 AMIs 。
找到您在列表中創建的 AMI tht。等待狀態從
pending
變為available
,再繼續進行下一個步驟。步驟 10:在叢集置放群組中EFA啟動已啟用的執行個體
使用您在 步驟 7 中建立的EFA已啟用,以及您在步驟 1 中建立的EFA已AMI啟用安全性群組,將EFA已啟用的執行個體啟動到叢集置放群組。
將EFA已啟用的執行個體啟動到叢集配置群組並不是絕對需求。不過,我們建議您在叢集置放群組中執行EFA已啟用的執行個體,因為它會將執行個體啟動到單一可用區域中的低延遲群組。
要確保在擴展叢集執行個體時容量可用,您可以為集群放置群組建立容量保留。如需詳細資訊,請參閱 在叢集置放群組中建立容量保留 。
啟動執行個體
-
在打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/
-
在導覽窗格中,選擇 Instances (執行個體),接著選擇 Launch Instances (啟動執行個體) 來開啟新的啟動執行個體精靈。
( 選用 ) 在 Name and tags (名稱和標籤) 區段中,為執行個體命名,例如,
EFA-instance
。該名稱將指派作為執行個體的資源標籤 (Name=
)。EFA-instance
在 [ 應用程式和作業系統映像 ] 區段中AMIs,選擇 [ 我 的],然後選取AMI您在上一個步驟中建立的。
在 Instance type (執行個體類型) 區段中,選取 支援的執行個體類型 。
在 Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。
在 Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:
對於 Subnet (子網) ,請選擇要在其中啟動執行個體的子網。如果您未選取子網路,則無法啟用的執行個體EFA。
針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。
展開 Advanced network configuration (進階網路組態) 區段,並針對 Elastic Fabric Adapter ,選取 Enable (啟用)。
( 選用 )在 儲存 區段中,根據需求設定磁碟區。
在 進階詳細資訊 區段中,針對 配置群組名稱 ,選取要在其中啟動執行個體的集群放置群組。如果您需要建立新的集群放置群組,請選取 建立新的配置群組 。
在右側的「 摘 要」面板中,針對「 執行個體數目 」,輸入您要啟動的EFA已啟用執行個體數目,然後選擇 Launch 執 行個體。
步驟 11:終止暫時執行個體
此時,您不再需要在 步驟 2 中啟動的執行個體。您可以終止執行個體,以停止產生費用。
終止暫時執行個體
-
在打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/
-
在導覽窗格中,選擇 Instances (執行個體)。
選取您建立的暫時執行個體,然後選取 動作 、 執行個體狀態 、 終止執行個體 。
出現確認提示時,請選擇 終止 。
步驟 12:啟用無密碼 SSH
若要讓應用程式能夠在叢集中的所有執行個體上執行,您必須啟用從領導節點到成員節點的無密碼SSH存取。領導節點是您在其中執行應用程式的執行個體。叢集中的其餘執行個體為成員節點。
啟用叢集中執行個體SSH之間的無密碼
-
選取叢集中的一個執行個體作為領導節點,並與它連線。
在領導節點上停用
strictHostKeyChecking
並啟用ForwardAgent
。使用您偏好的文字編輯器開啟~/.ssh/config
,然後新增下列命令。Host * ForwardAgent yes Host * StrictHostKeyChecking no
產生 RSA key pair。
$
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
,然後新增您先前複製的公有金鑰。
-
-
-
-
-