本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 上的MPIHPC工作負載入門 EFA和 EC2
本教學課程可協助您為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 貼到欄位中。
-
選擇新增規則。
-
針對類型 ,選擇 SSH。
-
對於來源類型 ,選擇 Anywhere-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將 用於暫時執行個體,以及您在步驟 9 中建立的 AMI,除非您已IMDSv2將 設定為帳戶 的預設值。如需IMDSv2組態步驟的詳細資訊,請參閱 設定新執行個體的執行個體中繼資料選項。
步驟 3:安裝 EFA 軟體
安裝臨時執行個體EFA上支援所需的EFA已啟用 的核心、EFA驅動程式、Libfabric 和 Open MPI堆疊。
這些步驟取決於您打算EFA搭配 Open 使用MPI、搭配 Intel MPI使用,還是搭配 Open MPI和 Intel 使用MPI。
安裝 EFA 軟體
-
連接至您啟動的執行個體。如需詳細資訊,請參閱使用 Connect 到您的 Linux 執行個體 SSH。
-
為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。此程序可能需要幾分鐘的時間。
-
Amazon Linux 2023、Amazon Linux 2、RHEL8/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.35.0.tar.gz您也可以在之前的命令中以
latest
取代版本號碼,以取得最新版本。 (選用 ) 驗證 tarball EFA (
.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.35.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.35.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.35.0.tar.gz && cd aws-efa-installer -
安裝 EFA 軟體。根據使用案例而定,執行以下其中一個命令。
注意
EFA 不支援 NVIDIA GPUDirect SUSE Linux 。如果您使用的是 SUSE Linux,則必須另外指定
--skip-kmod
選項以防止 kmod 安裝。根據預設,SUSELinux 不允許 out-of-tree核心模組。 -
如果EFA安裝程式提示您重新啟動執行個體,請執行此操作,然後重新連線至執行個體。否則,請登出執行個體,然後重新登入以完成安裝。
步驟 4:(選用) 啟用開啟 MPI 5
注意
只有在您打算使用 Open 5 MPI 時才執行此步驟。
從 EFA 1.30.0 版開始,預設會同時安裝 Open MPI 4 和 Open MPI 5。或者,您可以選擇僅安裝 Open MPI 4 或 Open MPI 5。
如果您選擇在步驟 MPI 3 中安裝 Open 5:安裝軟體 ,並且打算使用它,則必須執行下列步驟來啟用它。 EFA
若要啟用 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 離線安裝程式的連結。
-
-
執行您在上一個步驟中下載的安裝指令碼。
$
sudo bashinstallation_script_name
.sh -
在安裝程式中,選擇 Accept & install (接受並安裝)。
-
閱讀 Intel 改進計畫,選擇適當的選項,然後選擇 Begin Installation (開始安裝)。
-
完成安裝時,請選擇 Close (關閉)。
-
根據預設,Intel MPI會使用其內嵌 (內部) Libfabric。您可以設定 Intel MPI 使用安裝程式隨附的 LibfabricEFA。一般而言,EFA安裝程式隨附比 Intel 更新的 Libfabric 版本MPI。在某些情況下,隨附於EFA安裝程式的 Libfabric 比 Intel 的 Libfabric 效能更高MPI。若要設定 Intel MPI 使用安裝程式隨附的 LibfabricEFA,請根據您的 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,執行以下其中一個命令。
注意
Libfabric EFA 供應商使用作業系統的共用記憶體進行節點內通訊。這表示將
I_MPI_FABRICS
設定為ofi
可產生與預設shm:ofi
組態類似的效能。 -
登出執行個體,然後重新登入。
如果您不想再使用 Intel MPI,請從 Shell 啟動指令碼中移除環境變數。
步驟 6:停用 ptrace 保護
為了改善HPC應用程式的效能,當程序在相同執行個體上執行時,Libfabric 會使用執行個體的本機記憶體進行處理程序間通訊。
共用記憶體功能使用跨記憶體連接 (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暫時執行個體建立
在 開啟 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的EFA已啟用 ,以及您在步驟 1 中建立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的執行個體數量,然後選擇啟動執行個體 。
步驟 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金鑰對。
$
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
您應該連線至成員節點,而不會提示您輸入金鑰或密碼。