使用 Base AMI
您可以通过以下步骤,使用 AMI 为其中一个支持的基本操作系统开始使用 Elastic Fabric Adapter。
步骤 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,请选择要在其中启动启用了 EFA 的实例的 VPC。
-
选择Create security group(创建安全组)。
-
选择您创建的安全组,然后在 Details(详细信息)选项卡上复制 Security group ID(安全组 ID)。
-
在安全组仍然选中的情况下,依次选择 Actions(操作)、Edit inbound rules(编辑入站规则),然后执行以下操作:
-
选择 Add rule。
-
对于 Type (类型),请选择 All traffic (所有流量)。
-
对于 Source type(源类型),请选择 Custom(自定义)并将您复制的安全组 ID 粘贴到该字段中。
-
选择 Add rule。
-
对于 Type,选择 SSH。
-
对于 Source type(源类型),请选择 Anywhere-IPv4。
-
选择 Save rules(保存规则)。
-
在安全组仍然选中的情况下,依次选择 Actions(操作)、Edit outbound rules(编辑出站规则),然后执行以下操作:
-
选择 Add rule。
-
对于 Type (类型),请选择 All traffic (所有流量)。
-
对于 Destination type(目标类型),请选择 Custom(自定义)并将您复制的安全组 ID 粘贴到该字段中。
-
选择 Save rules(保存规则)。
步骤 2:启动临时实例
启动一个临时实例,可用于安装和配置 EFA 软件组件。您使用该实例创建一个启用了 EFA 的 AMI,您可以从中启动启用了 EFA 的实例。
- New console
-
启动临时实例
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,请选择 Instances(实例),然后选择 Launch Instances(启动实例)以打开新的启动实例向导。
-
(可选)在 Name and tags(名称和标签)部分中,提供实例的名称,例如 EFA-instance
。名称作为资源标签(Name=EFA-instance
)分配给实例。
-
在 Application and OS Images(应用程序和操作系统映像)部分中,为其中一个支持的操作系统选择 AMI。
-
在实例类型部分中,选择 p3dn.24xlarge
、p4d.24xlarge
或 p5.48xlarge
。
-
在 Key pair(密钥对)部分中,选择要用于实例的密钥对。
-
在 Network settings(网络设置)部分中,请选择 Edit(编辑),然后执行以下操作:
-
对于子网,选择要在其中启动实例的子网。如果您未选择子网,则不能启用 EFA 的实例。
-
对于 Firewall(security groups)(防火墙(安全组)),请选择 Select existing security group(选择现有安全组),然后选择您在上一步中创建的安全组。
-
展开 Advanced network configuration(高级网络配置)部分,并为 Elastic Fabric Adapter 选择 Enable(启用)。
-
在 Storage(存储)部分中,根据需要配置卷。
您必须为 Nvidia CUDA 工具包额外预置 10 到 20 GiB 的存储空间。如果您没有预置足够的存储空间,您将在尝试安装 Nvidia 驱动程序和 CUDA 工具包时收到 insufficient disk
space
错误。
-
在右侧的 Summary(摘要)面板中,选择 Launch instance(启动实例)。
步骤 3:安装 Nvidia GPU 驱动程序、Nvidia CUDA 工具包和 cuDNN
- Amazon Linux 2
-
安装 Nvidia GPU 驱动程序、Nvidia CUDA 工具包和 cuDNN
-
为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。
$
sudo yum upgrade -y && sudo reboot
实例重启后,重新连接到实例。
-
安装在安装 Nvidia GPU 驱动程序和 Nvidia CUDA 工具包时需要的实用程序。
$
sudo yum groupinstall 'Development Tools' -y
-
禁用 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
-
重启实例并重新连接到它。
-
准备所需的存储库
-
安装适用于 DKMS 的 EPEL 存储库,并为您的 Linux 发行版启用任何可选存储库。
$
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-
安装 CUDA 存储库公有 GPG 密钥。
$
distribution='rhel7'
-
设置 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
-
(仅限 5.10 内核版本)请仅在您使用基于 5.10 内核版本的 Amazon Linux 2 时执行这些步骤。如果您使用基于 4.12 内核版本的 Amazon Linux 2,请跳过以下步骤。要检查内核版本,请运行 uname -r。
-
添加 amzn2-nvidia
存储库。创建一个名为 /etc/yum.repos.d/amzn2-nvidia.repo
的新存储库文件,并使用您偏好的文本编辑器将以下内容添加到该文件中。
[amzn2-nvidia]
name=Amazon Linux 2 Nvidia repository
mirrorlist=http://amazonlinux.$awsregion.$awsdomain/$releasever/amzn2-nvidia/$target/$basearch/mirror.list
priority=20
gpgcheck=0
gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub
enabled=1
metadata_expire=300
mirrorlist_expire=300
report_instanceid=yes
-
安装来自您在上一步中添加的存储库的 system-release-nvidia
软件包。
$
sudo yum install system-release-nvidia
-
创建名为 /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
-
安装 Nvidia GPU 驱动程序、NVIDIA CUDA 工具包和 cuDNN。
$
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.24xlarge
和 p5.48xlarge
实例)启动 Nvidia Fabric Manager 服务,并确保其在实例启动时自动启动。NV 交换管理需要 Nvidia Fabric 管理器。
$
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 GPU、Nvidia GPU 驱动程序和 Nvidia CUDA 工具包的信息。
- CentOS 7
-
安装 Nvidia GPU 驱动程序、Nvidia CUDA 工具包和 cuDNN
-
为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。
$
sudo yum upgrade -y && sudo reboot
实例重启后,重新连接到实例。
-
安装在安装 Nvidia GPU 驱动程序和 Nvidia CUDA 工具包时需要的实用程序。
$
sudo yum groupinstall 'Development Tools' -y \
&& sudo yum install -y tar bzip2 make automake pciutils elfutils-libelf-devel libglvnd-devel iptables firewalld vim bind-utils
-
要使用 Nvidia GPU 驱动程序,您必须先禁用 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
-
使用首选文本编辑器打开 /etc/default/grub
,并添加以下内容。
GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
-
重新生成 Grub 配置。
$
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
重启实例并重新连接到它。
-
安装 Nvidia GPU 驱动程序、NVIDIA CUDA 工具包和 cuDNN。
-
安装适用于 DKMS 的 EPEL 存储库,并为您的 Linux 发行版启用任何可选存储库。
$
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-
安装 CUDA 存储库公有 GPG 密钥。
$
distribution='rhel7'
-
设置 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
-
安装 Nvidia、CUDA 驱动程序和 cuDNN。
$
sudo yum clean all \
&& sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
-
重启实例并重新连接到它。
-
(仅限 p4d.24xlarge
和 p5.48xlarge
实例)启动 Nvidia Fabric Manager 服务,并确保其在实例启动时自动启动。NV 交换管理需要 Nvidia Fabric 管理器。
$
sudo systemctl start nvidia-fabricmanager \
&& sudo systemctl enable 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 GPU、Nvidia GPU 驱动程序和 Nvidia CUDA 工具包的信息。
- RHEL 7/8/9 and Rocky Linux 8/9
-
安装 Nvidia GPU 驱动程序、Nvidia CUDA 工具包和 cuDNN
-
为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。
$
sudo yum upgrade -y && sudo reboot
实例重启后,重新连接到实例。
-
安装在安装 Nvidia GPU 驱动程序和 Nvidia CUDA 工具包时需要的实用程序。
$
sudo yum groupinstall 'Development Tools' -y
-
要使用 Nvidia GPU 驱动程序,您必须先禁用 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
-
使用首选文本编辑器打开 /etc/default/grub
,并添加以下内容。
GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
-
重新生成 Grub 配置。
$
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
重启实例并重新连接到它。
-
安装 Nvidia GPU 驱动程序、NVIDIA CUDA 工具包和 cuDNN。
-
安装适用于 DKMS 的 EPEL 存储库,并为您的 Linux 发行版启用任何可选存储库。
-
RHEL 7
$
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-
RHEL 8 和 Rocky Linux 8/9
$
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
-
RHEL 9
$
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
-
安装 CUDA 存储库公有 GPG 密钥。
$
distribution=$(. /etc/os-release;echo $ID`rpm -E "%{?rhel}%{?fedora}"`)
-
设置 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
-
安装 Nvidia、CUDA 驱动程序和 cuDNN。
$
sudo yum clean all \
&& sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
-
重启实例并重新连接到它。
-
(仅限 p4d.24xlarge
和 p5.48xlarge
实例)启动 Nvidia Fabric Manager 服务,并确保其在实例启动时自动启动。NV 交换管理需要 Nvidia Fabric 管理器。
$
sudo systemctl start nvidia-fabricmanager \
&& sudo systemctl enable 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 GPU、Nvidia GPU 驱动程序和 Nvidia CUDA 工具包的信息。
- Ubuntu 20.04
-
安装 Nvidia GPU 驱动程序、Nvidia CUDA 工具包和 cuDNN
-
为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。
$
sudo apt-get update && sudo apt-get upgrade -y
-
安装在安装 Nvidia GPU 驱动程序和 Nvidia CUDA 工具包时需要的实用程序。
$
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 工具包和 cuDNN。
$
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-515 \
&& sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers cuda-toolkit-11-0 libcudnn8 libcudnn8-dev -y
-
重启实例并重新连接到它。
-
(仅限 p4d.24xlarge
和 p5.48xlarge
实例)安装 Nvidia Fabric Manager。
-
您必须安装与上一步中安装的 Nvidia 内核模块版本匹配的 Nvidia Fabric Manager 版本。
运行以下命令以确定 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
。
-
安装 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
-
启动服务,并确保它在实例启动时自动启动。NV 交换管理需要 Nvidia Fabric 管理器。
$
sudo systemctl start nvidia-fabricmanager && sudo systemctl enable 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 GPU、Nvidia GPU 驱动程序和 Nvidia CUDA 工具包的信息。
步骤 4:安装 GDRCopy
安装 GDRCopy 以提高 Libfabric 的性能。有关 GDRCopy 的更多信息,请参阅 GDRCopy 存储库。
- Amazon Linux 2, CentOS 7, RHEL 7/8/9, and Rocky Linux 8/9
-
安装 GDRCopy
-
安装所需的依赖项。
$
sudo yum -y install dkms rpm-build make check check-devel subunit subunit-devel
-
下载并解压缩 GDRCopy 程序包。
$
wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.3.tar.gz \
&& tar xf v2.3.tar.gz ; cd gdrcopy-2.3/packages
-
构建 GDRCopy RPM 程序包。
$
CUDA=/usr/local/cuda ./build-rpm-packages.sh
-
安装 GDRCopy RPM 程序包。
$
sudo rpm -Uvh gdrcopy-kmod-2.3-1dkms.noarch*.rpm \
&& sudo rpm -Uvh gdrcopy-2.3-1.x86_64*.rpm \
&& sudo rpm -Uvh gdrcopy-devel-2.3-1.noarch*.rpm
- Ubuntu 20.04
-
安装 GDRCopy
-
安装所需的依赖项。
$
sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
-
下载并解压缩 GDRCopy 程序包。
$
wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.3.tar.gz \
&& tar xf v2.3.tar.gz ; cd gdrcopy-2.3/packages
-
构建 GDRCopy RPM 程序包。
$
CUDA=/usr/local/cuda ./build-deb-packages.sh
-
安装 GDRCopy RPM 程序包。
$
sudo dpkg -i gdrdrv-dkms_2.3-1_amd64.*.deb \
&& sudo dpkg -i libgdrapi_2.3-1_amd64.*.deb \
&& sudo dpkg -i gdrcopy-tests_2.3-1_amd64.*.deb \
&& sudo dpkg -i gdrcopy_2.3-1_amd64.*.deb
步骤 5:安装 EFA 软件
在临时实例上安装支持 EFA 所需的启用 EFA 的内核、EFA 驱动程序、Libfabric 和 Open MPI 堆栈。
安装 EFA 软件
-
连接到您启动的实例。有关更多信息,请参阅连接到您的 Linux 实例。
-
下载 EFA 软件安装文件。软件安装文件将打包为压缩的 tarball(.tar.gz
)文件。要下载最新的稳定 版本,请使用以下命令。
$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.28.0.tar.gz
您也可以通过将上面命令中的版本号替换为 latest
来获取最新版本。
-
(可选)验证 EFA tarball(.tar.gz
)文件的真实性和完整性。建议您执行此操作以验证软件发布者的身份,并检查该文件自发布以来是否已被更改或损坏。如果您不想验证 tarball 文件,请跳过此步骤。
-
下载公有 GPG 密钥并将其导入到您的密钥环中。
$
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 安装脚本,并联系 AWS Support。
-
下载签名文件并验证 EFA tarball 文件的签名。
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.28.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.28.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.28.0.tar.gz && cd aws-efa-installer
-
运行 EFA 软件安装脚本。
$
sudo ./efa_installer.sh -y
Libfabric 安装在 /opt/amazon/efa
目录中,而 Open 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 的面向连接的传输 API 映射到 Libfabric 的无连接可靠接口。这使您能够在运行基于 NCCL 的应用程序时将 Libfabric 用作网络提供程序。有关 aws-ofi-nccl 插件的更多信息,请参阅 aws-ofi-nccl 存储库。
安装 aws-ofi-nccl 插件
-
导航到您的主目录。
$
cd $HOME
-
下载 aws-ofi-nccl 插件文件。这些文件将打包为压缩的 tarball (.tar.gz
) 格式。
$
wget https://github.com/aws/aws-ofi-nccl/releases/download/v1.7.2-aws/aws-ofi-nccl-1.7.2-aws.tar.gz
-
从压缩的 .tar.gz 文件中提取这些文件,然后导航到放置提取文件的目录。
$
tar -xf aws-ofi-nccl-1.7.2-aws.tar.gz && cd aws-ofi-nccl-1.7.2-aws
-
要生成 make 文件,请运行 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
-
将 Open MPI 目录添加到 PATH
变量中。
$
export PATH=/opt/amazon/openmpi/bin/:$PATH
-
安装 aws-ofi-nccl 插件。
$
make && sudo make install
步骤 8:安装 NCCL 测试
安装 NCCL 测试。NCCL 测试使您能够确认是否已正确安装 NCCL 以及它是否正在按预期运行。有关 NCCL 测试的更多信息,请参阅 nccl-tests 存储库。
安装 NCCL 测试
-
导航到您的主目录。
$
cd $HOME
-
将官方 nccl-tests 存储库克隆到实例,然后导航到本地克隆的存储库。
$
git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
-
将 Libfabric 目录添加到 LD_LIBRARY_PATH
变量。
-
Amazon Linux、Amazon Linux 2、RHEL、Rocky Linux 8/9 和 CentOS
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib64
:$LD_LIBRARY_PATH
-
Ubuntu 20.04
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib
:$LD_LIBRARY_PATH
-
安装 NCCL 测试并指定 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 配置
-
创建一个主机文件来指定要在其上运行测试的主机。以下命令创建一个名为 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
-
运行测试并指定主机文件 (--hostfile
) 和要使用的 GPU 数 (-n
)。以下命令在实例本身的 8 个 GPU 上运行 all_reduce_perf
测试,并指定以下环境变量。
有关 NCCL 测试参数的更多信息,请参阅官方 nccl-tests 存储库中的 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
-
打印 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 实例上安装软件的更多信息,请参阅在 Linux 实例上管理软件。
步骤 11:创建启用了 EFA 和 NCCL 的 AMI
在安装所需的软件组件后,您可以创建一个 AMI,然后可以将其重复使用以启动启用了 EFA 的实例。
从临时实例创建 AMI
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择实例。
-
选择您创建的临时实例,然后依次选择 Actions (操作)、Image (映像)、Create image (创建映像)。
-
对于 Create image (创建映像),请执行以下操作:
-
对于 Image name (映像名称),为 AMI 输入一个描述性名称。
-
(可选)对于 Image description (映像描述),输入 AMI 用途的简要描述。
-
选择创建映像。
-
在导航窗格中,选择 AMIs。
-
在列表中找到您创建的 AMI。等待状态从 pending
更改为 available
,然后继续下一步。
步骤 12:终止临时实例
现在,已不再需要您启动的临时实例。您可以终止实例以停止产生费用。
终止临时实例
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择实例。
-
选择您创建的临时实例,然后依次选择 Actions (操作)、Instance state (实例状态)、Terminate instance (终止实例)。
-
当系统提示您确认时,选择终止。
步骤 13:在集群放置组中启动启用了 EFA 和 NCCL 的实例
使用启用了 EFA 的 AMI 以及之前创建的启用了 EFA 的安全组,在集群置放群组中启动启用了 EFA 和 NCCL 的实例。
- New console
-
启动临时实例
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/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(编辑),然后执行以下操作:
-
对于子网,选择要在其中启动实例的子网。如果您未选择子网,则不能启用 EFA 的实例。
-
对于 Firewall(security groups)(防火墙(安全组)),请选择 Select existing security group(选择现有安全组),然后选择您在上一步中创建的安全组。
-
展开 Advanced network configuration(高级网络配置)部分,并为 Elastic Fabric Adapter 选择 Enable(启用)。
-
(可选)在 Storage(存储)部分中,根据需要配置卷。
-
在 Advanced details(高级详细信息)部分中,对于置放群组名称,选择要在其中启动实例的集群置放群组。如果您需要创建新的集群置放群组,请选择 Create new placement group(创建新置放群组)。
-
在右侧的 Summary(摘要)面板中,为 Number of instances(实例数量)输入您要启动的启用了 EAA 的实例数量,然后选择 Launch instance(启动实例)。
- Old console
-
在集群置放群组中启动启用了 EFA 和 NCCL 的实例
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
选择 Launch Instance(启动实例)。
-
在 Choose an AMI (选择 AMI) 页面上,选择 My AMIs (我的 AMI),找到之前创建的 AMI,然后选择 Select (选择)。
-
在选择实例类型页面上,选择 p3dn.24xlarge,然后选择下一步:配置实例详细信息。
-
在 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 地址。
-
选择下一步:添加存储。
-
在 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 (启动) 以选择一个密钥对并启动您的实例。
步骤 14:启用无密码 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 是否按预期运行,请连接到领导节点并运行以下命令。
$
ssh member_node_private_ip
您应该连接到成员节点,而不会收到输入密钥或密码的提示。