本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 上開始使用EFA和處NCCL理機器學習工作負載 EC2
NVIDIA集體通訊程式庫 (NCCL) 是一個標準集體通訊常式程式庫,用於GPUs跨單一節點或多個節點的多個。NCCL可與 Libfabric 一起使用EFA,並MPI支援各種機器學習工作負載。如需詳細資訊,請參閱NCCL
下列步驟可協助您開始NCCL使用其中一個受支援的作業系統EFA並使用基礎AMI。
注意
-
只支援
p3dn.24xlarge
、p4d.24xlarge
和p5.48xlarge
執行個體類型。 -
僅支持 Amazon Linux 2 和 21 月 22 日基礎AMIs。
-
僅支援 NCCL 2.4.2 及更新版本。EFA
如需有關NCCL使用EFA和使用執行機器學習工作負載的詳細資訊 AWS Deep Learning AMIs,請參閱AWS Deep Learning AMIs 開發人員指南DLAMI中的〈使用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。
-
針對「來源類型」,選擇「隨處-」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為其中一個支援的作業系統選取一個。僅支持 Amazon Linux 2,Ubuntu 20.04 和 Ubuntu 22.04。
-
在執行個體類型區段中,選取
p3dn.24xlarge
、p4d.24xlarge
或p5.48xlarge
。 -
在 Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。
-
在 Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:
-
對於 Subnet (子網),請選擇要在其中啟動執行個體的子網。如果您未選取子網路,則無法啟用的執行個體EFA。
-
針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。
-
展開 Advanced network configuration (進階網路組態) 區段,並針對 Elastic Fabric Adapter,選取 Enable (啟用)。
-
-
在 儲存 區段中,根據需求設定磁碟區。
注意
您必須為 Nvidia CUDA 工具組提供額外的 10 至 20 GiB 儲存空間。如果您沒有佈建足夠的儲存空間,您會在嘗試安裝 Nvidia 驅動程式和CUDA工具組時收到
insufficient disk space
錯誤訊息。 -
在右邊的 Summary (摘要) 面板中,選擇 Launch instance (啟動執行個體)。
第 3 步:安裝 Nvidia GPU 驅動程序,Nvidia CUDA 工具包和 cu DNN
步驟 4:安裝 GDRCopy
安裝GDRCopy以提高利布的性能。如需有關的詳細資訊GDRCopy,請參閱GDRCopy存放庫
步驟 5:安裝EFA軟件
安EFA裝在暫存執行個體EFA上支援所需的已啟用核心、EFA驅動程式、Libfabric 和 Open MPI 堆疊。
安裝 EFA 軟體
-
連接至您啟動的執行個體。如需詳細資訊,請參閱使用 Connect 到您的 Linux 執行個體 SSH。
-
下載 EFA 軟體安裝檔案。軟體安裝檔案已封裝成壓縮 tarball (
.tar.gz
) 檔案。若要下載最新穩定版本,請使用下列命令:$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.34.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.34.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.34.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.34.0.tar.gz && cd aws-efa-installer -
執行 EFA 軟體安裝指令碼。
注意
從 EFA 1.30.0 開始,預設會安裝「開啟 MPI 4」和「開啟 MPI 5」。除非您需要 Open MPI 5,否則我們建議您僅安裝 Open MPI 4。下列指令只會安裝 Open MPI 4。如果要安裝「打開 MPI 4」和「打開 MPI 5」,請刪除
--mpi=openmpi4
。$
sudo ./efa_installer.sh -y --mpi=openmpi4Libfabric 安裝在
/opt/amazon/efa
目錄中,而打開安裝MPI在/opt/amazon/openmpi
目錄中。 -
如果EFA安裝程式提示您重新啟動執行個體,請執行此動作,然後重新連線至執行個體。否則,請登出執行個體,然後重新登入以完成安裝。
-
確認EFA軟體元件已成功安裝。
$
fi_info -p efa -t FI_EP_RDM該命令應該返回有關 LibFabric EFA 接口的信息。以下範例顯示命令輸出。
-
p3dn.24xlarge
具有單一網路介面provider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
具有多個網路介面的
p4d.24xlarge
和p5.48xlarge
provider: efa fabric: EFA-fe80::c6e:8fff:fef6:e7ff domain: efa_0-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c34:3eff:feb2:3c35 domain: efa_1-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c0f:7bff:fe68:a775 domain: efa_2-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::ca7:b0ff:fea6:5e99 domain: efa_3-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
步驟 6:安裝 NCCL
安裝NCCL。如需有關的詳細資訊NCCL,請參閱NCCL存放庫
若要安裝 NCCL
-
導覽至
/opt
目錄。$
cd /opt -
將官方NCCL存儲庫克隆到實例並導航到本地克隆的存儲庫。
$
sudo git clone https://github.com/NVIDIA/nccl.git && cd nccl -
建置並安裝NCCL並指定CUDA安裝目錄。
$
sudo make -j src.build CUDA_HOME=/usr/local/cuda
步驟 7:安裝 aws-ofi-nccl 插件
該 aws-ofi-nccl 插件將面向連接NCCL的傳輸映射APIs到 Libfabric 的無連接可靠接口。這可讓您在執行NCCL基於應用程式時使用 Libfabric 作為網路提供者。如需 aws-ofi-nccl 外掛程式的詳細資訊,請參閱aws-ofi-nccl 儲存庫
若要安裝 aws-ofi-nccl 外掛程式
-
導覽至您的主目錄。
$
cd $HOME -
安裝所需的公用程式。
-
Amazon Linux 2
$
sudo yum install hwloc-devel -
Ubuntu
$
sudo apt-get install libhwloc-dev
-
-
下載 aws-ofi-nccl 插件文件。檔案已封裝成壓縮 tarball (
.tar.gz
)。$
wget https://github.com/aws/aws-ofi-nccl/releases/download/v1.11.0-aws/aws-ofi-nccl-1.11.0-aws.tar.gz -
從壓縮的 .tar.gz 檔案中解壓縮檔案,然後導覽至解壓縮的目錄。
$
tar -xf aws-ofi-nccl-1.11.0-aws.tar.gz && cd aws-ofi-nccl-1.11.0-aws -
若要產生製作檔案,請執行指
configure
令碼並指定MPI、Libfabric 和CUDA安裝目錄。NCCL$
./configure --prefix=/opt/aws-ofi-nccl --with-mpi=/opt/amazon/openmpi \ --with-libfabric=/opt/amazon/efa \ --with-cuda=/usr/local/cuda \ --enable-platform-aws -
將「打開」MPI 目錄添加到
PATH
變量中。$
export PATH=/opt/amazon/openmpi/bin/:$PATH -
安裝 aws-ofi-nccl 插件。
$
make && sudo make install
步驟 8:安裝測NCCL試
安裝NCCL測試。這些NCCL測試可讓您確認NCCL是否已正確安裝,並如預期般運作。如需有關NCCL測試的詳細資訊,請參閱 nccl-
安裝測NCCL試
-
導覽至您的主目錄。
$
cd $HOME -
複製官方的 nccl-tests 存放庫至執行個體,並導覽至本地複製的存放庫。
$
git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests -
新增 Libfabric 目錄至
LD_LIBRARY_PATH
變數。-
Amazon Linux 2
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib64
:$LD_LIBRARY_PATH -
Ubuntu
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib
:$LD_LIBRARY_PATH
-
-
安裝NCCL測試並指定MPINCCL、和CUDA安裝目錄。
$
make MPI=1 MPI_HOME=/opt/amazon/openmpi
NCCL_HOME=/opt/nccl/build
CUDA_HOME=/usr/local/cuda
步驟 9:測試您EFA的NCCL配置
執行測試以確保您的暫存執行個體已針對EFA和設定正確NCCL。
測試您的EFA和NCCL配置
-
建立主機檔案指定要執行測試的主機。下列命另建立名稱為
my-hosts
的主機檔案,包含執行個體本身的參考資料。 -
運行測試並指定主機文件(
--hostfile
)和GPUs要使用的數量(-n
)。下列命令會在執行個體本身的 8 GPUs 上執行all_reduce_perf
測試,並指定下列環境變數。-
FI_EFA_USE_DEVICE_RDMA=1
—(p4d.24xlarge
僅)使用設備的RDMA功能進行單面和雙面傳輸。 -
NCCL_DEBUG=INFO
- 啟用詳細的除錯輸出。您也可以指VERSION
定在測試開始時僅列印NCCL版本,或僅WARN
接收錯誤訊息。
有關NCCL測試參數的更多信息,請參閱官方 nccl-test 存儲庫README中的NCCL測
試。 -
p3dn.24xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/aws-ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100 -
p4d.24xlarge
和p5.48xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x FI_EFA_USE_DEVICE_RDMA=1 \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/aws-ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
-
-
您可以確認EFA在列印
NCCL_DEBUG
記錄檔NCCL時作為基礎提供者處於作用中狀態。ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
使用
p4d.24xlarge
執行個體時會顯示下列其他資訊。ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
步驟 10:安裝您的機器學習應用程式
在暫時執行個體上安裝機器學習應用程式。安裝程序依特定的機器學習應用程式而異。如需在 Linux 執行個體上安裝軟體的詳細資訊,請參閱管理 Amazon Linux 2 執行個體上的軟體。
注意
參考機器學習應用程式的文件,以取得安裝指示。
第 11 步:創建一個EFA和NCCL啟用 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
,再繼續進行下一個步驟。
步驟 12:終止暫時執行個體
此時,您不再需要您啟動的暫時執行個體。您可以終止執行個體,以停止產生費用。
終止暫時執行個體
在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/
。 -
在導覽窗格中,選擇 Instances (執行個體)。
-
選取您建立的暫時執行個體,然後選取動作、執行個體狀態、終止執行個體。
-
出現確認提示時,請選擇終止。
步驟 13:在叢集置放群組中啟動EFA並啟NCCL用執行個體
使用您之前建立的已啟用EFA和NCCL已啟用的安全性群組,將您AMI和EFA已啟用的執行個體EFA啟動到叢集置放群組中。
注意
-
將EFA已啟用的執行個體啟動到叢集置放群組並不是絕對需求。不過,我們建議您在叢集置放群組中執行EFA已啟用的執行個體,因為它會將執行個體啟動到單一可用區域中的低延遲群組。
-
要確保在擴展叢集執行個體時容量可用,您可以為集群放置群組建立容量保留。如需詳細資訊,請參閱在叢集置放群組中建立容量保留區。
步驟 14:啟用無密碼 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
,然後新增您先前複製的公有金鑰。
-
-
若要測試無密碼SSH是否如預期般運作,請連接至您的領導節點並執行下列命令。
$
sshmember_node_private_ip
您應該連線至成員節點,而不會提示您輸入金鑰或密碼。