開始使用 EFA 和 NCCL - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

開始使用 EFA 和 NCCL

NVIDIA Collective Communications Library (NCCL) 是一種標準集體溝通常式程式庫,用於多個 GPU 橫跨單一節點或多個節點。NCCL 可與 EFA、Libfabric 和 MPI 一同使用來支援不同的機器學習工作負載。如需詳細資訊,請參閱 NCCL 網站。

下列步驟可協助您針對其中一個支援的作業系統使用基礎 AMI 開始使用 EFA 和 NCCL。

注意
  • 只支援 p3dn.24xlargep4d.24xlargep5.48xlarge 執行個體類型。

  • 僅支持 Amazon Linux 2 和 Ubuntu 20.04 基本 AMI。

  • EFA 僅支援 NCCL 2.4.2 和更新版本。

  • 如需使用 EFA 和 NCCL 執行機器學習工作負載的詳細資訊 AWS Deep Learning AMI,請參閱開發人員指南中的 DLAMI 上的使用 EFA。AWS Deep Learning AMI

步驟 1:準備具備 EFA 功能的安全群組

EFA 需要有安全群組來允許往返安全群組自身的所有傳入和傳出流量。下列程序會建立一個安全群組,該安全群組允許所有傳入和傳出流量,並允許來自任何 IPv4 地址的傳入 SSH 流量以進行 SSH 連線。

重要

此安全群組僅供測試之用。對於生產環境,我們建議您建立傳入 SSH 規則,該規則僅允許來自連線 IP 地址的流量,例如電腦的 IP 地址或區域網路中的一系列 IP 地址。

如需其他案例,請參閱不同使用案例的安全群組規則

建立具備 EFA 功能的安全群組
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Security Groups (安全群組),然後選擇 Create Security Group (建立安全群組)。

  3. Create Security Group (建立安全群組) 視窗中,執行下列動作:

    1. 對於 Security group name (安全群組名稱),輸入安全群組的描述性名稱,例如 EFA-enabled security group

    2. (選用) 對於 Description (描述),輸入安全群組的簡短描述。

    3. 對於 VPC,選取您打算讓具備 EFA 功能的執行個體在其中啟動的 VPC。

    4. 選擇 Create Security Group (建立安全群組)。

  4. 選取您建立的安全群組,在 Details (詳細資料) 索引標籤上,複製 Security group ID (安全群組 ID)。

  5. 在仍然選取安全群組的情況下,依序選取 Actions (動作) 和 Edit inbound rules (編輯傳入規則),然後執行下列動作。

    1. 選擇新增規則

    2. 針對類型,選擇所有流量

    3. 若為 Source type (來源類型),選擇 Custom (自訂),然後將您複製的安全群組 ID 貼到欄位中。

    4. 選擇新增規則

    5. 針對 Type (類型),選擇 SSH

    6. 針對 Source type (來源類別),選擇 Anywhere-IPv4(隨處 - IPv4)。

    7. 選擇儲存規則

  6. 在仍然選取安全群組的情況下,依序選取 Actions (動作) 和 Edit outbound rules (編輯傳出規則),然後執行下列動作。

    1. 選擇新增規則

    2. 針對類型,選擇所有流量

    3. 若為 Destination type (目的地類型),選擇 Custom (自訂),然後將您複製的安全群組 ID 貼到欄位中。

    4. 選擇儲存規則

步驟 2:啟動暫時執行個體

啟動暫時執行個體,以用來安裝和設定 EFA 軟體元件。您可以使用此執行個體來建立具備 EFA 功能的 AMI,再從中啟動具備 EFA 功能的執行個體。

啟動暫時執行個體
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體),接著選擇 Launch Instances (啟動執行個體) 來開啟新的啟動執行個體精靈。

  3. (選用) 在 Name and tags (名稱和標籤) 區段中,為執行個體命名,例如,EFA-instance。該名稱將指派作為執行個體的資源標籤 (Name=EFA-instance)。

  4. Application and OS Images (應用程式和作業系統映像) 區段中,為其中一個支援的作業系統選取 AMI。僅支持 Amazon Linux 2,Ubuntu 20.04 和 Ubuntu 22.04。

  5. 執行個體類型區段中,選取 p3dn.24xlargep4d.24xlargep5.48xlarge

  6. Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。

  7. Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:

    1. 對於 Subnet (子網),請選擇要在其中啟動執行個體的子網。若您未選取子網,便無法啟用 EFA 的執行個體。

    2. 針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。

    3. 展開 Advanced network configuration (進階網路組態) 區段,並針對 Elastic Fabric Adapter,選取 Enable (啟用)。

  8. 儲存 區段中,根據需求設定磁碟區。

    注意

    您必須為 Nvidia CUDA 工具組佈建額外的 10 到 20 GitB 儲存空間。如果您沒有佈建足夠的儲存空間,您會在嘗試安裝 Nvidia 驅動程式和 CUDA 工具組時,收到 insufficient disk space 錯誤。

  9. 在右邊的 Summary (摘要) 面板中,選擇 Launch instance (啟動執行個體)。

步驟 3:安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN

Amazon Linux 2
安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN
  1. 為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。

    $ sudo yum upgrade -y && sudo reboot

    重新啟動執行個體後,請重新與它連線。

  2. 請安裝 Nvidia GPU 驅動程式和 Nvidia CUDA 工具組需要的公用程式。

    $ sudo yum groupinstall 'Development Tools' -y
  3. 停用 nouveau 開放原始碼驅動程式。

    1. 針對您目前執行的核心版本,安裝需要的公用程式和核心標頭套件。

      $ sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    2. 新增 nouveau/etc/modprobe.d/blacklist.conf 拒絕清單檔案。

      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf blacklist vga16fb blacklist nouveau blacklist rivafb blacklist nvidiafb blacklist rivatv EOF
    3. GRUB_CMDLINE_LINUX="rdblacklist=nouveau" 附加至 grub 檔案並重建 Grub 組態。

      $ echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \ && sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  4. 重新啟動執行個體並重新連線至其中。

  5. 準備所需的儲存庫

    1. 安裝 DKMS 的 EPEL 儲存庫,並為您的 Linux 發行版本啟用任何可選儲存庫。

      $ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    2. 安裝 CUDA 儲存庫公有 GPG 金鑰。

      $ distribution='rhel7'
    3. 設定 CUDA 網路儲存庫並更新儲存庫快取。

      $ ARCH=$( /bin/arch ) \ && sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo \ && sudo yum clean expire-cache
    4. (僅限核心版本 5.10) 唯有當您使用 Amazon Linux 2 搭配核心版本 5.10 時,才執行下列步驟。如果您是使用 Amazon Linux 2 搭配核心版本 4.12,請跳過下列步驟。若要檢查核心版本,請執行 uname -r

      1. 建立名為 /etc/dkms/nvidia.conf 的 Nvidia 驅動程式組態檔案。

        $ sudo mkdir -p /etc/dkms \ && echo "MAKE[0]=\"'make' -j2 module SYSSRC=\${kernel_source_dir} IGNORE_XEN_PRESENCE=1 IGNORE_PREEMPT_RT_PRESENCE=1 IGNORE_CC_MISMATCH=1 CC=/usr/bin/gcc10-gcc\"" | sudo tee /etc/dkms/nvidia.conf
      2. (僅限 p4d.24xlargep5.48xlarge) 複製 Nvidia 驅動程序組態檔案。

        $ sudo cp /etc/dkms/nvidia.conf /etc/dkms/nvidia-open.conf
  6. 安裝 Nvidia GPU 驅動程式、NVIDIA CUDA 工具組和 cuDNN。

    • p3dn.24xlarge

      $ sudo yum clean all \ && sudo yum -y install kmod-nvidia-latest-dkms nvidia-driver-latest-dkms \ && sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
    • p4d.24xlargep5.48xlarge

      $ sudo yum clean all \ && sudo yum -y install kmod-nvidia-open-dkms nvidia-driver-latest-dkms \ && sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
  7. 重新啟動執行個體並重新連線至其中。

  8. (僅限 p4d.24xlargep5.48xlarge) 啟動 Nvidia Fabric Manager 服務,並確保它會在執行個體啟動時自動啟動。NV Switch Management 需要使用 Nvidia Fabric Manager。

    $ sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
  9. 確認每次執行個體啟動時都已設定 CUDA 路徑。

    • 針對 bash shell,新增以下陳述式到 /home/username/.bashrc/home/username/.bash_profile

      export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
    • 針對 tcsh shell,新增以下陳述式到 /home/username/.cshrc

      setenv PATH=/usr/local/cuda/bin:$PATH setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
  10. 若要確認 Nvidia GPU 驅動程式正確運作,請執行下列命令。

    $ nvidia-smi -q | head

    命令應該回傳 Nvidia GPU、Nvidia GPU 驅動程式和 Nvidia CUDA 工具組的資訊。

Ubuntu 20.04/22.04
安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN
  1. 為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。

    $ sudo apt-get update && sudo apt-get upgrade -y
  2. 請安裝 Nvidia GPU 驅動程式和 Nvidia CUDA 工具組需要的公用程式。

    $ sudo apt-get update && sudo apt-get install build-essential -y
  3. 若要使用 Nvidia GPU 驅動程式,您必須先停用 nouveau 開源驅動程式。

    1. 針對您目前執行的核心版本,安裝需要的公用程式和核心標頭套件。

      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
    2. 新增 nouveau/etc/modprobe.d/blacklist.conf 拒絕清單檔案。

      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf blacklist vga16fb blacklist nouveau blacklist rivafb blacklist nvidiafb blacklist rivatv EOF
    3. 使用您偏好的文字編輯器開啟 /etc/default/grub,然後新增下列命令。

      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
    4. 重建 Grub 組態。

      $ sudo update-grub
  4. 重新啟動執行個體並重新連線至其中。

  5. 新增 CUDA 儲存庫並安裝 Nvidia GPU 驅動程式、NVIDIA CUDA 工具組和 cuDNN。

    • p3dn.24xlarge

      $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \ && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \ && sudo dpkg -i /tmp/deeplearning.deb \ && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \ && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \ && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \ && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \ && sudo apt update \ && sudo apt install nvidia-dkms-535 \ && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
    • p4d.24xlargep5.48xlarge

      $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \ && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \ && sudo dpkg -i /tmp/deeplearning.deb \ && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \ && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \ && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \ && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \ && sudo apt update \ && sudo apt install nvidia-kernel-open-535 \ && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
  6. 重新啟動執行個體並重新連線至其中。

  7. (僅限 p4d.24xlargep5.48xlarge) 安裝 Nvidia Fabric Manager。

    1. 您安裝的 Nvidia Fabric Manager 版本必須與您在上一個步驟中安裝的 Nvidia 核心模組版本一致。

      執行以下命令來判斷 Nvidia 核心模組的版本。

      $ cat /proc/driver/nvidia/version | grep "Kernel Module"

      下列為範例輸出。

      NVRM version: NVIDIA UNIX x86_64 Kernel Module 450.42.01 Tue Jun 15 21:26:37 UTC 2021

      在上述範例中,已安裝核心模組主要版本 450。這表示您需要安裝 Nvidia Fabric Manager 版本 450

    2. 安裝 Nvidia Fabric Manager。執行以下命令,並指定在上一步驟中使用的主要版本。

      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number

      例如,如果已安裝核心模組的主要版本 450,請使用下列命令來安裝同樣版本的 Nvidia Fabric Manager。

      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
    3. 啟動服務,並確保服務會在執行個體啟動時自動啟動。NV Switch Management 需要使用 Nvidia Fabric Manager。

      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
  8. 確認每次執行個體啟動時都已設定 CUDA 路徑。

    • 針對 bash shell,新增以下陳述式到 /home/username/.bashrc/home/username/.bash_profile

      export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
    • 針對 tcsh shell,新增以下陳述式到 /home/username/.cshrc

      setenv PATH=/usr/local/cuda/bin:$PATH setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
  9. 若要確認 Nvidia GPU 驅動程式正確運作,請執行下列命令。

    $ nvidia-smi -q | head

    命令應該回傳 Nvidia GPU、Nvidia GPU 驅動程式和 Nvidia CUDA 工具組的資訊。

步驟 4:安裝 GDRY

安裝 GDRCopy 以提高 Libfabric 的效能。如需更多關於 GDRCopy 的詳細資訊,請參閱 GDRCopy 儲存庫

Amazon Linux 2
若要安裝 GDRCopy
  1. 安裝所需的依存項目。

    $ sudo yum -y install dkms rpm-build make check check-devel subunit subunit-devel
  2. 下載並解壓縮 GDRCopy 套件。

    $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \ && tar xf v2.4.tar.gz ; cd gdrcopy-2.4/packages
  3. 建立 GDRCopy RPM 套件。

    $ CUDA=/usr/local/cuda ./build-rpm-packages.sh
  4. 安裝 GDRCopy RPM 套件。

    $ sudo rpm -Uvh gdrcopy-kmod-2.4-1dkms.noarch*.rpm \ && sudo rpm -Uvh gdrcopy-2.4-1.x86_64*.rpm \ && sudo rpm -Uvh gdrcopy-devel-2.4-1.noarch*.rpm
Ubuntu 20.04/22.04
若要安裝 GDRCopy
  1. 安裝所需的依存項目。

    $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
  2. 下載並解壓縮 GDRCopy 套件。

    $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \ && tar xf v2.4.tar.gz \ && cd gdrcopy-2.4/packages
  3. 建立 GDRCopy RPM 套件。

    $ CUDA=/usr/local/cuda ./build-deb-packages.sh
  4. 安裝 GDRCopy RPM 套件。

    $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \ && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \ && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \ && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb

步驟 5:安裝 EFA 軟體

在暫存執行個體上安裝支援 EFA 所需的具備 EFA 功能的核心、EFA 驅動程式、Libfabric 和 Open MPI 堆疊。

安裝 EFA 軟體
  1. 連接至您啟動的執行個體。如需詳細資訊,請參閱 連接至您的 Linux 執行個體

  2. 下載 EFA 軟體安裝檔案。軟體安裝檔案已封裝成壓縮 tarball (.tar.gz) 檔案。若要下載最新穩定版本,請使用下列命令:

    $ C:\> curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.33.0.tar.gz

    您也可以在之前的命令中以 latest 取代版本號碼,以取得最新版本。

  3. (選用) 驗證 EFA tarball (.tar.gz) 檔案的真確性及完整性。

    我們建議您執行這項操作來確認軟體發行者的身分,並檢查檔案自發行以來並未遭到變更或損毀。如果您不想驗證 tarball 檔案,請略過此步驟。

    注意

    或者,如果您偏好使用 MD5 或 SHA256 檢查總和來驗證 tarball 檔案,請參閱使用檢查總和驗證 EFA 安裝程式

    1. 下載公有 GPG 金鑰並匯入至您的 keyring。

      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key

      命令應傳回金鑰值。請記下金鑰的值,因為下一個步驟將需要它。

    2. 驗證 GPG 金鑰的指紋。執行以下命令,並指定上一步驟中的金鑰值。

      $ gpg --fingerprint key_value

      命令應傳回與 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC 相同的指紋。如果指紋不相符,請勿執行 EFA 安裝指令碼,並聯絡 AWS Support。

    3. 下載簽章檔案並驗證 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 <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。

  4. 從壓縮的 .tar.gz 檔案中解壓縮檔案,然後導覽至解壓縮的目錄。

    $ C:\> tar -xf aws-efa-installer-1.33.0.tar.gz && cd aws-efa-installer
  5. 執行 EFA 軟體安裝指令碼。

    注意

    從 EFA 1.30.0 開始,根據預設會安裝 Open MPI 4 和 Open MPI 5。除非您需要 Open MPI 5,否則我們會建議您僅安裝 Open MPI 4。下列命令僅會安裝 Open MPI 4。如果您想安裝 Open MPI 4 和 Open MPI 5,請移除 --mpi=openmpi4

    $ sudo ./efa_installer.sh -y --mpi=openmpi4

    Libfabric 安裝在 /opt/amazon/efa 目錄中,而 Open MPI 則是安裝在 /opt/amazon/openmpi 目錄中。

  6. 如果 EFA 安裝程式提示您重新啟動執行個體,請執行這項操作,然後重新連線至執行個體。否則,請登出執行個體,然後重新登入以完成安裝。

  7. 確認已成功安裝 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.24xlargep5.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
  1. 請前往 /opt 目錄。

    $ cd /opt
  2. 複製官方的 NCCL 存放庫至執行個體,並導覽至本地複製的存放庫。

    $ sudo git clone https://github.com/NVIDIA/nccl.git && cd nccl
  3. 建立並安裝 NCCL 並指定 CUDA 安裝目錄。

    $ sudo make -j src.build CUDA_HOME=/usr/local/cuda

步驟 7:安裝 aws-ofi-nccl 插件

此 aws-ofi-nccl 外掛程式會將 NCCL 的連線導向傳輸 API 對應至 Libfabric 的無連線可靠介面。這可讓您在執行以 NCCL 為基礎的應用程式時以網路提供者的方式使用 Libfabric。如需有關 aws-ofi-nccl 外掛程式的詳細資訊,請參閱aws-ofi-nccl 儲存庫

若要安裝 aws-ofi-nccl 外掛程式
  1. 導覽至您的主目錄。

    $ cd $HOME
  2. 安裝所需的公用程式。

    • Amazon Linux 2

      $ sudo yum install hwloc-devel
    • Ubuntu

      $ sudo apt-get install libhwloc-dev
  3. 下載 aws-ofi-nccl 插件文件。檔案已封裝成壓縮 tarball (.tar.gz)。

    $ wget https://github.com/aws/aws-ofi-nccl/releases/download/v1.9.2-aws/aws-ofi-nccl-1.9.2-aws.tar.gz
  4. 從壓縮的 .tar.gz 檔案中解壓縮檔案,然後導覽至解壓縮的目錄。

    $ tar -xf aws-ofi-nccl-1.9.2-aws.tar.gz && cd aws-ofi-nccl-1.9.2-aws
  5. 若要產生製作檔案,請執行 configure 指令碼和指定 MPI、Libfabric、NCCL 和 CUDA 安裝目錄。

    $ ./configure --prefix=/opt/aws-ofi-nccl --with-mpi=/opt/amazon/openmpi \ --with-libfabric=/opt/amazon/efa \ --with-cuda=/usr/local/cuda \ --enable-platform-aws
  6. 將 Open MPI 目錄新增至 PATH 變數。

    $ export PATH=/opt/amazon/openmpi/bin/:$PATH
  7. 安裝 aws-ofi-nccl 插件。

    $ make && sudo make install

步驟 8:安裝 NCCL Test

安裝 NCCL test。NCCL test 可讓您確認 NCCL 已正確安裝,並如預期中執行。如需更多關於 NCCL test 的詳細資訊,請參閱 nccl-test 存放庫

若要安裝 NCCL test
  1. 導覽至您的主目錄。

    $ cd $HOME
  2. 複製官方的 nccl-tests 存放庫至執行個體,並導覽至本地複製的存放庫。

    $ git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
  3. 新增 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
  4. 安裝 NCCL test 並指定 MPI、NCCL 和 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 組態
  1. 建立主機檔案指定要執行測試的主機。下列命另建立名稱為 my-hosts 的主機檔案,包含執行個體本身的參考資料。

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
  2. 執行測試並指定主機檔案 (--hostfile) 以及要使用的 GPU 數量 (-n)。下列命令在執行個體本身為 8 GPU,和下列指定的環境變數上執行 all_reduce_perf 測試。

    • FI_EFA_USE_DEVICE_RDMA=1—(僅限 p4d.24xlarge) 使用裝置的 RDMA 功能進行單面和雙面傳輸。

    • NCCL_DEBUG=INFO - 啟用詳細的除錯輸出。您也可以在測試開始時指定 VERSION 來列印只有 NCCL 版本,或 WARN 只接收錯誤訊息。

    如需更多關於 NCCL 測試引數的詳細資訊,請參閱官方 nccl-test 存放庫中的 NCCL Test README

    • 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.24xlargep5.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
  3. 列印 NCCL_DEBUG 記錄時,您可以確認 EFA 是積極作為 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
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取您建立的暫時執行個體,然後選取 Actions (動作)、Image (映像)、Create image (建立映像)。

  4. 對於 Create image (建立映像),執行下列動作:

    1. 對於 Image name (映像名稱),輸入 AMI 的描述性名稱。

    2. (選用) 對於 Image description (映像描述),輸入 AMI 的簡短描述。

    3. 選擇Create image

  5. 在導覽窗格中,選擇 AMIs (AMI)。

  6. 在清單中找出您建立的 AMI。等待狀態從 pending 變為 available,再繼續進行下一個步驟。

步驟 12:終止暫時執行個體

此時,您不再需要您啟動的暫時執行個體。您可以終止執行個體,以停止產生費用。

終止暫時執行個體
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取您建立的暫時執行個體,然後選取動作執行個體狀態終止執行個體

  4. 出現確認提示時,請選擇終止

步驟 13:在集群放置群組中啟動已啟用 EFA 和 NCCL 的執行個體

使用具備 EFA 功能的 AMI 和具備 EFA 功能的安全群組,在集群放置群組中啟動具備 EFA 和 NCCL 功能的執行個體。

注意
  • 在叢集置放群組中啟動具備 EFA 的執行個體並非絕對必要。不過,建議在集群放置群組中執行具備 EFA 功能的執行個體,因為這樣會在單一可用區域的低延遲群組中啟動執行個體。

  • 要確保在擴展叢集執行個體時容量可用,您可以為集群放置群組建立容量保留。如需詳細資訊,請參閱 集群放置群組中的容量保留

New console
啟動暫時執行個體
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體),接著選擇 Launch Instances (啟動執行個體) 來開啟新的啟動執行個體精靈。

  3. (選用) 在 Name and tags (名稱和標籤) 區段中,為執行個體命名,例如,EFA-instance。該名稱將指派作為執行個體的資源標籤 (Name=EFA-instance)。

  4. Application and OS Images (應用程式和作業系統映像) 區段中,選取 My AMIs (我的 AMI),接著選取您在前一個步驟中建立的 AMI。

  5. 執行個體類型 區段中,選取 p3dn.24xlarge 或者 p4d.24xlarge

  6. Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。

  7. Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:

    1. 對於 Subnet (子網),請選擇要在其中啟動執行個體的子網。若您未選取子網,便無法啟用 EFA 的執行個體。

    2. 針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。

    3. 展開 Advanced network configuration (進階網路組態) 區段,並針對 Elastic Fabric Adapter,選取 Enable (啟用)。

  8. 選用)在 儲存 區段中,根據需求設定磁碟區。

  9. 進階詳細資訊 區段中,針對 置放群組名稱,選取要在其中啟動執行個體的集群放置群組。如果您需要建立新的集群放置群組,請選取 建立新的配置群組

  10. 在右邊的 摘要 面板,針對 執行個體的數目,輸入要啟動的具備 EFA 功能的執行個體數量,接著選擇 啟動執行個體

Old console
在集群放置群組中啟動具備 EFA 和 NCCL 功能的執行個體
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 選擇 Launch Instance (啟動執行個體)

  3. Choose an AMI (選取 AMI頁面)上,選取 My AMIs (我的 AMI),找出您之前建立的 AMI,然後選取 Select (選取)。

  4. Choose an Instance Type (選取執行個體類型) 頁面上,選取 p3dn.24xlarge,然後選取 Next: Configure Instance Details (下一步:設定執行個體詳細資訊)。

  5. Configure Instance Details (設定執行個體詳細資訊) 頁面上,執行下列操作:

    1. 對於 Number of instances (執行個體的數目),輸入要啟動的具備 EFA 和 NCCL 功能的執行個體數。

    2. 對於 Network (網路) 和 Subnet (子網),選取要在其中啟動執行個體的 VPC 和子網。

    3. 對於 Placement group (置放群組),選取 Add instance to placement group (將執行個體新增至置放群組)

    4. 對於 Placement group name (置放群組名稱),選取 Add to a new placement group (新增至新的置放群組),然後輸入置放群組的描述性名稱。然後為 Placement group strategy (置放群組策略) 選取 cluster (叢集)。

    5. 對於 EFA,選擇 Enable (啟用)

    6. Network Interfaces (網路介面) 區段中,針對裝置 eth0,選擇 New network interface (新網路介面)。您可以選擇性指定一個主要 IPv4 地址,以及一或多個次要 IPv4 地址。如果您在有相關聯 IPv6 CIDR 區塊的子網中啟動執行個體,您可以選擇性指定一個主要 IPv6 地址,以及一或多個次要 IPv6 地址。

    7. 選擇 Next: Add Storage (下一步:新增儲存體)

  6. Add Storage (新增儲存體) 頁面上,除了 AMI 指定的磁碟區 (例如根設備磁碟區),指定要連接到執行個體的磁碟區。然後選擇 Next: Add Tags (下一步:新增標籤)

  7. Add Tags (新增標籤) 頁面上,為執行個體指定標籤 (例如使用者易記的名稱),然後選擇 Next: Configure Security Group (下一步:設定安全群組)

  8. Configure Security Group (設定安全群組) 頁面上,針對 Assign a security group (指派安全群組),選取 Select an existing security group (選取現有安全群組),然後選取您之前建立的安全群組。

  9. 選擇 Review and Launch (檢閱和啟動)。

  10. Review Instance Launch (檢閱執行個體啟動) 頁面上,檢閱設定,然後選擇 Launch (啟動),以選擇金鑰對並啟動執行個體。

步驟 14:啟用無密碼 SSH

若要讓您的應用程式能夠跨越叢集中的所有執行個體執行,您必須啟用從領導節點到成員節點的無密碼 SSH 存取。領導節點是您在其中執行應用程式的執行個體。叢集中的其餘執行個體為成員節點。

在叢集的執行個體之間啟用無密碼 SSH
  1. 選取叢集中的一個執行個體作為領導節點,並與它連線。

  2. 在領導節點上停用 strictHostKeyChecking 並啟用 ForwardAgent。使用您偏好的文字編輯器開啟 ~/.ssh/config,然後新增下列命令。

    Host * ForwardAgent yes Host * StrictHostKeyChecking no
  3. 產生 RSA 金鑰對。

    $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

    $HOME/.ssh/ 目錄中建立金鑰對。

  4. 變更領導節點上私有金鑰的許可。

    $ chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config
  5. 使用您偏好的文字編輯器開啟 ~/.ssh/id_rsa.pub 並複製該金鑰。

  6. 對於叢集中的每個成員節點,執行以下操作:

    1. 連線到執行個體。

    2. 使用您偏好的文字編輯器開啟 ~/.ssh/authorized_keys,然後新增您先前複製的公有金鑰。

  7. 若要測試無密碼的 SSH 是否如預期運作,請連線至領導節點並執行下列命令。

    $ ssh member_node_private_ip

    您應該連線至成員節點,而不會提示您輸入金鑰或密碼。