本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EC2 上的適用於 ML 工作負載的 EFA 和 NCCL 入門
NVIDIA Collective Communications Library (NCCL) 是一種標準集體溝通常式程式庫,用於多個 GPU 橫跨單一節點或多個節點。您可以搭配 EFA、Libfabric 和 MPI 使用 NCCL,以支援各種機器學習工作負載。如需詳細資訊,請參閱 NCCL 網站。
要求
-
支援的執行個體類型包括 EFA 支援的 P 系列和 G 系列執行個體類型。如需詳細資訊,請參閱 Amazon EC2 加速運算執行個體。
-
支援的基本 AMIs:Amazon Linux 2023、Ubuntu 26.04、Ubuntu 24.04、Ubuntu 22.04、Debian 12 和 RHEL 10。
-
EFA 僅支援 NCCL 2.4.2 和更新版本。
如需使用 搭配 EFA 和 NCCL 執行機器學習工作負載的詳細資訊 AWS 深度學習 AMIs,請參閱《 AWS 深度學習 AMIs 開發人員指南》中的在 DLAMI 上使用 EFA。
步驟 1:準備具備 EFA 功能的安全群組
EFA 需要有安全群組來允許往返安全群組自身的所有傳入和傳出流量。下列程序會建立一個安全群組,該安全群組允許所有傳入和傳出流量,並允許來自任何 IPv4 地址的傳入 SSH 流量以進行 SSH 連線。
如需其他案例,請參閱不同使用案例的安全群組規則。
建立具備 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)。
-
在應用程式和作業系統映像區段中,為其中一個支援的作業系統選取 AMI。
-
在執行個體類型區段中,選取支援的執行個體類型。
-
在 Key pair (金鑰對) 區段中,選取要用於執行個體的金鑰對。
-
在 Network settings (網路設定) 區段,選擇 Edit (編輯),接著執行下列動作:
-
對於 Subnet (子網路),請選擇要在其中啟動執行個體的子網路。
您必須選取子網路。若您未選取子網路,便無法啟用 EFA 的執行個體。
-
針對 Firewall (security groups) (防火牆 (安全群組)),選取 Select existing security group (選取現有的安全群組),接著選取您在前一個步驟中建立的安全群組。
-
展開進階設定區段。
針對網路介面 1,選取網路卡索引 = 0、裝置索引 = 0,以及介面類型 = EFA 搭配 ENA。
(選用) 如果您使用的是多卡執行個體類型,則針對所需的每個額外網路界面,選擇新增網路界面,針對網路卡索引,選擇下一個未使用的索引,然後選擇裝置索引 = 1 和界面類型 = EFA 搭配 ENA 或僅限 EFA。
-
在儲存區段中,根據需求設定磁碟區。
您必須為 NVIDIA CUDA Toolkit 佈建額外的 10 到 20 GiB 儲存空間。如果您未佈建足夠的儲存空間,當您嘗試安裝 NVIDIA 驅動程式和 CUDA 工具組時,會收到insufficient disk space錯誤。
-
在右邊的 Summary (摘要) 面板中,選擇 Launch instance (啟動執行個體)。
步驟 3:安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN
- Amazon Linux 2023
-
安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN
-
為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。
$ sudo dnf upgrade -y && sudo reboot
重新啟動執行個體後,請重新與它連線。
-
安裝安裝 NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 所需的公用程式。
$ sudo dnf groupinstall 'Development Tools' -y && sudo dnf install -y dkms kernel-devel-$(uname -r) kernel-headers-$(uname -r)
-
停用 nouveau 開放原始碼驅動程式。
-
針對您目前執行的核心版本,安裝需要的公用程式和核心標頭套件。
$ sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r)
-
將 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
-
附加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
-
重新啟動執行個體並重新連線至其中。
-
新增 CUDA 網路儲存庫。
$ sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
-
下載並安裝 NVIDIA GPU 驅動程式。
$ wget https://us.download.nvidia.com/tesla/580.167.08/NVIDIA-Linux-x86_64-580.167.08.run \
&& sudo sh NVIDIA-Linux-x86_64-580.167.08.run -m kernel-open --no-drm --disable-nouveau --dkms --silent
-
安裝 NVIDIA CUDA Toolkit 和 cuDNN。
$ sudo dnf install -y cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-devel-cuda-13
-
重新啟動執行個體並重新連線至其中。
-
(使用 NVSwitch 的執行個體,例如 P 系列多 GPU 執行個體) 安裝和啟動 NVIDIA Fabric Manager。G 系列執行個體不使用 NVSwitch,也不需要 Fabric Manager。
$ sudo dnf install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/nvidia-fabricmanager-580.167.08-1.el8.x86_64.rpm \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
確認每次執行個體啟動時都已設定 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
-
若要確認 NVIDIA GPU 驅動程式是否正常運作,請執行下列命令。
$ nvidia-smi -q | head
此命令應會傳回 NVIDIA GPUs、NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 的相關資訊。
- Ubuntu 26.04, Ubuntu 24.04, and Ubuntu 22.04
-
安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN
-
為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。
$ sudo apt-get update && sudo apt-get upgrade -y
-
安裝安裝 NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 所需的公用程式。
$ sudo apt-get update && sudo apt-get install build-essential -y
-
若要使用 NVIDIA GPU 驅動程式,您必須先停用nouveau開放原始碼驅動程式。
-
針對您目前執行的核心版本,安裝需要的公用程式和核心標頭套件。
$ sudo apt-get install -y gcc make linux-headers-$(uname -r)
-
將 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
-
使用您偏好的文字編輯器開啟 /etc/default/grub,然後新增下列命令。
GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
-
重建 GRUB 組態。
$ sudo update-grub
-
重新啟動執行個體並重新連線至其中。
-
新增 CUDA 儲存庫並安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN。
-
Ubuntu 26.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo add-apt-repository -y 'deb [trusted=yes] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64 /' \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open cuda-toolkit-13-3 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
Ubuntu 24.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo add-apt-repository -y 'deb [trusted=yes] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64 /' \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open-580 cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
Ubuntu 22.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open-580 cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
重新啟動執行個體並重新連線至其中。
-
(使用 NVSwitch 的執行個體,例如 P 系列多 GPU 執行個體) 安裝和啟動 NVIDIA Fabric Manager。G 系列執行個體不使用 NVSwitch,也不需要 Fabric Manager。
-
Ubuntu 26.04
$ sudo apt-get install -y nvidia-fabricmanager \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
Ubuntu 24.04 和 Ubuntu 22.04
$ sudo apt-get install -y nvidia-fabricmanager-580 \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
確認每次執行個體啟動時都已設定 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
-
若要確認 NVIDIA GPU 驅動程式是否正常運作,請執行下列命令。
$ nvidia-smi -q | head
此命令應會傳回 NVIDIA GPUs、NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 的相關資訊。
- Debian 12
-
安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN
-
安裝安裝 NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 所需的公用程式。
$ sudo apt-get install -y build-essential gcc make linux-headers-$(uname -r) dkms
-
停用 nouveau 開放原始碼驅動程式。
$ sudo sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="rdblacklist=nouveau"/' /etc/default/grub && sudo update-grub
-
重新啟動執行個體並重新連線至其中。
-
新增 CUDA 儲存庫並安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb \
&& sudo dpkg -i cuda-keyring_1.1-1_all.deb \
&& sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "deb https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/ /" \
&& sudo apt-get update
$ sudo apt-get install -y nvidia-open cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-dev-cuda-13
-
設定 NVIDIA UVM 核心模組。
$ uvm_ko=$(find /lib/modules/$(uname -r) -name 'nvidia*uvm*.ko*' 2>/dev/null | head -1) && if [ -n "$uvm_ko" ]; then real=$(basename "$uvm_ko"); real=${real%.ko*}; echo "$real" | sudo tee /etc/modules-load.d/nvidia-uvm.conf; if [ "$real" != "nvidia-uvm" ]; then echo "alias nvidia-uvm $real" | sudo tee /etc/modprobe.d/nvidia-uvm.conf; fi; sudo modprobe "$real" || true; fi && sudo modprobe nvidia
-
重新啟動執行個體並重新連線至其中。
-
(使用 NVSwitch 的執行個體,例如 P 系列多 GPU 執行個體) 安裝和啟動 NVIDIA Fabric Manager。G 系列執行個體不使用 NVSwitch,也不需要 Fabric Manager。
-
判斷 NVIDIA 核心模組的版本。
$ cat /proc/driver/nvidia/version | grep "Kernel Module"
以下為範例輸出。
NVRM version: NVIDIA UNIX x86_64 Kernel Module 610.43.02 ...
在上述範例中,已安裝610核心模組的主要版本。
-
使用上一個步驟中識別的主要版本安裝 NVIDIA Fabric Manager。
$ sudo apt-get install -y nvidia-fabricmanager-major_version_number \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
確認每次執行個體啟動時都已設定 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
-
若要確認 NVIDIA GPU 驅動程式是否正常運作,請執行下列命令。
$ nvidia-smi -q | head
此命令應會傳回 NVIDIA GPUs、NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 的相關資訊。
- RHEL 10
-
安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN
-
為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。
$ sudo dnf upgrade -y && sudo reboot
重新啟動執行個體後,請重新與它連線。
-
安裝安裝 NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 所需的公用程式。
$ sudo dnf groupinstall 'Development Tools' -y \
&& sudo dnf install -y dkms kernel-devel-$(uname -r) \
&& sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
-
停用 nouveau 開放原始碼驅動程式。
-
將 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
-
附加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
-
重新啟動執行個體並重新連線至其中。
-
新增 CUDA 儲存庫並安裝 NVIDIA GPU 驅動程式、NVIDIA CUDA Toolkit 和 cuDNN。
$ sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/cuda-rhel10.repo \
&& sudo dnf install -y nvidia-open-580.167.08 cuda-toolkit-13-0 libcudnn9-cuda-13 libcudnn9-devel-cuda-13
-
重新啟動執行個體並重新連線至其中。
-
(使用 NVSwitch 的執行個體,例如 P 系列多 GPU 執行個體) 安裝和啟動 NVIDIA Fabric Manager。G 系列執行個體不使用 NVSwitch,也不需要 Fabric Manager。
$ sudo dnf install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/nvidia-fabricmanager-580.167.08-1.x86_64.rpm \
&& sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
-
確認每次執行個體啟動時都已設定 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
-
若要確認 NVIDIA GPU 驅動程式是否正常運作,請執行下列命令。
$ nvidia-smi -q | head
此命令應會傳回 NVIDIA GPUs、NVIDIA GPU 驅動程式和 NVIDIA CUDA Toolkit 的相關資訊。
步驟 4:安裝 GDRY
安裝 GDRCopy 以提高 Libfabric 的效能。如需更多關於 GDRCopy 的詳細資訊,請參閱 GDRCopy 儲存庫。
- Amazon Linux 2023
-
若要安裝 GDRCopy
-
安裝所需的依存項目。
$ sudo yum -y install dkms rpm-build make check check-devel
-
下載並解壓縮 GDRCopy 套件。
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz && cd gdrcopy-2.5.2/packages
-
建置 GDRCopy RPM 套件。
$ CUDA=/usr/local/cuda ./build-rpm-packages.sh
-
安裝 GDRCopy RPM 套件。
$ sudo rpm -Uvh gdrcopy-kmod-2.5.2*dkms*.rpm \
&& sudo rpm -Uvh gdrcopy-2.5.2*.rpm \
&& sudo rpm -Uvh gdrcopy-devel-2.5.2*.rpm
- Ubuntu 26.04, Ubuntu 24.04, and Ubuntu 22.04
-
若要安裝 GDRCopy
-
安裝所需的依存項目。
$ sudo apt-get install -y build-essential devscripts debhelper fakeroot pkg-config dkms
在 Ubuntu 22.04 上,也安裝下列其他相依性:
$ sudo apt-get install -y check libsubunit-dev
-
下載並擷取 GDRCopy 套件,然後建置套件。
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz \
&& cd gdrcopy-2.5.2/packages \
&& CUDA=/usr/local/cuda ./build-deb-packages.sh
-
安裝 GDRCopy DEB 套件。
$ sudo dpkg -i gdrdrv-dkms_2.5.2-1_amd64.*.deb \
&& sudo dpkg -i libgdrapi_2.5.2-1_amd64.*.deb \
&& sudo dpkg -i gdrcopy-tests_2.5.2-1_amd64.*.deb \
&& sudo dpkg -i gdrcopy_2.5.2-1_amd64.*.deb
- Debian 12
-
若要安裝 GDRCopy
-
安裝所需的依存項目。
$ sudo apt-get install -y build-essential devscripts debhelper fakeroot pkg-config dkms
-
下載並解壓縮 GDRCopy 套件。
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz && cd gdrcopy-2.5.2/packages
-
套用 Debian 版本修補程式並建置套件。
$ sed -i 's/(2.5.2)/(2.5.2-1)/g' debian-lib/changelog \
&& sed -i 's/(2.5.2)/(2.5.2-1)/g' debian-tests/changelog \
&& sed -i 's/(2.5.2)/(2.5.2-1)/g' dkms/debian/changelog \
&& sed -i 's/(2.5.2)/(2.5.2-1)/g' debian-meta/changelog \
&& sed -i 's/FULL_VERSION="${VERSION}"/FULL_VERSION="${VERSION}-${DEBIAN_VERSION}"/g' build-deb-packages.sh
$ CUDA=/usr/local/cuda ./build-deb-packages.sh
-
安裝 GDRCopy DEB 套件。
$ sudo dpkg -i gdrdrv-dkms_2.5.2*.deb \
&& sudo dpkg -i libgdrapi_2.5.2*.deb \
&& sudo dpkg -i gdrcopy-tests_2.5.2*.deb \
&& sudo dpkg -i gdrcopy_2.5.2*.deb
- RHEL 10
-
若要安裝 GDRCopy
-
安裝所需的依存項目。
$ sudo yum -y install dkms rpm-build make check check-devel
-
下載並解壓縮 GDRCopy 套件。
$ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.5.2.tar.gz \
&& tar xf v2.5.2.tar.gz && cd gdrcopy-2.5.2/packages
-
建置 GDRCopy RPM 套件。
$ CUDA=/usr/local/cuda ./build-rpm-packages.sh
-
安裝 GDRCopy RPM 套件。
$ sudo rpm -Uvh gdrcopy-kmod-2.5.2*dkms*.rpm \
&& sudo rpm -Uvh gdrcopy-2.5.2*.rpm \
&& sudo rpm -Uvh gdrcopy-devel-2.5.2*.rpm
步驟 5:安裝 EFA 軟體
在執行個體上安裝支援 EFA 所需的具備 EFA 功能的核心、EFA 驅動程式、Libfabric、aws-ofi-nccl 外掛程式和 Open MPI 堆疊。
安裝 EFA 軟體
-
連接至您啟動的執行個體。如需詳細資訊,請參閱使用 SSH 連線至您的 Linux 執行個體。
-
下載 EFA 軟體安裝檔案。軟體安裝檔案做為壓縮的 tarball (.tar.gz) 檔案。若要下載最新穩定版本,請使用下列命令:
$ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.50.0.tar.gz
您也可以在之前的命令中以 latest 取代版本號碼,以取得最新版本。
(選用) 驗證 EFA tarball (.tar.gz) 檔案的真確性及完整性。
我們建議您執行這項操作來確認軟體發布者的身分,並檢查檔案自發行以來並未遭到變更或損毀。如果您不想驗證 tarball 檔案,請略過此步驟。
-
下載公有 GPG 金鑰並匯入至您的 keyring。
$ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key
命令應傳回金鑰值。請記下金鑰的值,因為下一個步驟將需要它。
-
驗證 GPG 金鑰的指紋。執行以下命令,並指定上一步驟中的金鑰值。
$ gpg --fingerprint key_value
命令應傳回與 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC 相同的指紋。如果指紋不相符,請勿執行 EFA 安裝指令碼,並聯絡 支援。
-
下載簽章檔案並驗證 EFA tarball 檔案的簽章。
$ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.50.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.50.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 安裝指令碼,並聯絡 支援。
-
從壓縮的 .tar.gz 檔案中解壓縮檔案,然後導覽至解壓縮的目錄。
$ tar -xf aws-efa-installer-1.50.0.tar.gz && cd aws-efa-installer
(選用) 在安裝期間驗證個別套件簽章。
從 EFA 安裝程式 1.48.0 開始,安裝程式包含 GPG 簽署的個別 RPM 和 DEB 套件。若要在安裝期間驗證每個個別套件的真實性和完整性,請使用 --check-signatures旗標。當您啟用此旗標時,安裝程式會先驗證所有套件簽章,而且只有在每個套件通過驗證時才會繼續安裝。如果任何套件驗證失敗,安裝程式會立即結束,而無需安裝任何項目。
-
下載 GPG 公有金鑰。
$ wget https://efa-installer.amazonaws.com/aws-efa-installer.key
-
匯出金鑰路徑。然後,在下一個步驟中,將 附加--check-signatures到安裝命令,並使用 sudo -E而不是 sudo 來保留環境變數。
$ export EFA_INSTALLER_KEY=$(pwd)/aws-efa-installer.key
在以 RPM 為基礎的系統上 (Amazon Linux 2023、RHEL、Rocky Linux 和 SUSE),安裝程式會使用 驗證每個 RPMrpm --checksig。在 DEB 型系統 (Ubuntu、Debian) 上,安裝程式會使用 GPG 簽章驗證來驗證每個 DEB。如果任何套件的驗證失敗,安裝會立即中止。
--check-signatures 旗標為選用。如果沒有,安裝程式不會執行個別簽章驗證。
-
執行 EFA 軟體安裝指令碼。
如果您已完成上一個設定套件簽章驗證的選用步驟,請附加--check-signatures至安裝命令並使用 sudo -E,而非 sudo。例如:sudo -E ./efa_installer.sh -y --mpi=openmpi5 --check-signatures。
從 EFA 1.30.0 開始,預設會同時安裝 Open MPI 4.1 和 Open MPI 5。除非您需要 Open MPI 4.1,否則請僅安裝 Open MPI 5。下列命令只會安裝 Open MPI 5。如果您想要安裝 Open MPI 4.1 和 Open MPI 5,請移除 --mpi=openmpi5。
$ sudo ./efa_installer.sh -y --mpi=openmpi5
Libfabric 安裝在 /opt/amazon/efa 目錄中。aws-ofi-nccl 外掛程式安裝在 /opt/amazon/ofi-nccl 目錄中。Open MPI 安裝在 /opt/amazon/openmpi 目錄中。
-
如果 EFA 安裝程式提示您重新啟動執行個體,請執行這項操作,然後重新連線至執行個體。否則,請登出執行個體,然後重新登入以完成安裝。
-
確認已成功安裝 EFA 軟體。
$ fi_info -p efa -t FI_EP_RDM
此命令應該會傳回 Libfabric EFA 介面的相關資訊。
步驟 6:安裝 NCCL
安裝 NCCL。如需更多關於 NCCL 詳細資訊,請參閱 NCCL 存放庫。
若要安裝 NCCL
-
請前往 /opt 目錄。
$ cd /opt
-
複製官方的 NCCL 存放庫至執行個體,並導覽至本地複製的存放庫。
$ sudo git clone https://github.com/NVIDIA/nccl.git -b v2.30.4-1 && cd nccl
-
建立並安裝 NCCL 並指定 CUDA 安裝目錄。
$ sudo make -j src.build CUDA_HOME=/usr/local/cuda-13
步驟 7:安裝 NCCL Test
安裝 NCCL test。NCCL test 可讓您確認 NCCL 已正確安裝,並如預期中執行。如需更多關於 NCCL test 的詳細資訊,請參閱 nccl-test 存放庫。
若要安裝 NCCL test
-
導覽至您的主目錄。
$ cd $HOME
-
複製官方的 nccl-tests 存放庫至執行個體,並導覽至本地複製的存放庫。
$ git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
-
新增 Libfabric 目錄至 LD_LIBRARY_PATH 變數。
-
Amazon Linux 2023
$ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
-
Ubuntu 和 Debian
$ export LD_LIBRARY_PATH=/opt/amazon/efa/lib:$LD_LIBRARY_PATH
-
RHEL 10
$ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
-
安裝 NCCL test 並指定 MPI、NCCL 和 CUDA 安裝目錄。
$ make MPI=1 MPI_HOME=/opt/amazon/openmpi NCCL_HOME=/opt/nccl/build CUDA_HOME=/usr/local/cuda-13
步驟 8:測試您的 EFA 和 NCCL 組態
執行測試以確保已對 EFA 和 NCCL 正確設定暫時執行個體。
若要測試您的 EFA 和 NCCL 組態
-
建立主機檔案指定要執行測試的主機。下列命另建立名稱為 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
-
執行 NCCL 測試。下列命令假設您每個執行個體有 8 個 GPUs。根據您的執行個體類型調整 -n和 -N值。
$ /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/amazon/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
-
列印 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
步驟 9:安裝您的機器學習應用程式
在暫時執行個體上安裝機器學習應用程式。安裝程序依特定的機器學習應用程式而異。如需在 Linux 執行個體上安裝軟體的詳細資訊,請參閱《Amazon Linux 2023 使用者指南》中的管理作業系統更新。
步驟 10:建立 EFA 和 NCCL 啟用的 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 的簡短描述。
-
選擇建立映像。
-
在導覽窗格中,選擇 AMIs。
-
找到您在清單中建立的 AMI。等待狀態從 pending 變為 available,再繼續進行下一個步驟。
步驟 11:終止暫時執行個體
此時,您不再需要您啟動的暫時執行個體。您可以終止執行個體,以停止產生費用。
步驟 12:在叢集置放群組中啟動 EFA 和具備 NCCL 功能的執行個體
使用具備 EFA 功能的 AMI 和具備 EFA 功能的安全群組,在叢集置放群組中啟動具備 EFA 和 NCCL 功能的執行個體。
- New console
-
啟動暫時執行個體
前往 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 (執行個體類型) 區段中,選取 p3dn.24xlarge 或者 p4d.24xlarge。
-
在 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 eith ENA 或僅限 EFA。
-
(選用) 在儲存區段中,根據需求設定磁碟區。
-
在進階詳細資訊區段中,針對叢集置放群組,選取要在其中啟動執行個體的叢集置放群組。如果您需要建立新的叢集置放群組,請選取建立新的配置群組。
-
在右邊的摘要面板,針對執行個體的數目,輸入要啟動的具備 EFA 功能的執行個體數量,接著選擇啟動執行個體。
- Old console
-
在叢集置放群組中啟動具備 EFA 和 NCCL 功能的執行個體
在 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。
-
選擇 Launch Instance (啟動執行個體)。
-
在 Choose an AMI (選取 AMI) 頁面上,選取 My AMIs (我的 AMI),找出您之前建立的 AMI,然後選取 Select (選取)。
-
在 Choose an Instance Type (選取執行個體類型) 頁面上,選取 p3dn.24xlarge,然後選取 Next: Configure Instance Details (下一步:設定執行個體詳細資訊)。
-
在 Configure Instance Details (設定執行個體詳細資訊) 頁面上,執行下列操作:
-
對於 Number of instances (執行個體的數目),輸入要啟動的具備 EFA 和 NCCL 功能的執行個體數。
-
對於 Network (網路) 和 Subnet (子網路),選取要在其中啟動執行個體的 VPC 和子網路。
-
對於 Placement group (置放群組),選取 Add instance to placement group (將執行個體新增至置放群組)。
-
對於 Placement group name (置放群組名稱),選取 Add to a new placement group (新增至新的置放群組),然後輸入置放群組的描述性名稱。然後為 Placement group strategy (置放群組策略) 選取 cluster (叢集)。
-
對於 EFA,選擇 Enable (啟用)。
-
在 Network Interfaces (網路介面) 區段中,針對裝置 eth0,選擇 New network interface (新網路介面)。您可以選擇性指定一個主要 IPv4 地址,以及一或多個次要 IPv4 地址。如果您在有相關聯 IPv6 CIDR 區塊的執行個體中啟動執行個體,您可以選擇性指定一個主要 IPv6 地址,以及一或多個次要 IPv6 地址。
-
選擇 Next: Add Storage (下一步:新增儲存體)。
-
在 Add Storage (新增儲存體) 頁面上,除了 AMI 指定的磁碟區 (例如根設備磁碟區),指定要連接到執行個體的磁碟區。然後選擇 Next: Add Tags (下一步:新增標籤)。
-
在 Add Tags (新增標籤) 頁面上,為執行個體指定標籤 (例如使用者易記的名稱),然後選擇 Next: Configure Security Group (下一步:設定安全群組)。
-
在 Configure Security Group (設定安全群組) 頁面上,針對 Assign a security group (指派安全群組),選取 Select an existing security group (選取現有安全群組),然後選取您之前建立的安全群組。
-
選擇 Review and Launch (檢閱和啟動)。
-
在 Review Instance Launch (檢閱執行個體啟動) 頁面上,檢閱設定,然後選擇 Launch (啟動),以選擇金鑰對並啟動執行個體。
步驟 13:啟用無密碼 SSH
預設 SSH 使用者因作業系統而異:ubuntu適用於 Ubuntu、admin適用於 Debian、ec2-user適用於 Amazon Linux 和 RHEL。
若要讓您的應用程式能夠跨越叢集中的所有執行個體執行,您必須啟用從領導節點到成員節點的無密碼 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 是否如預期運作,請連線至領導節點並執行下列命令。
$ ssh member_node_private_ip
您應該連線至成員節點,而不會提示您輸入金鑰或密碼。