本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置EFA客户端
使用以下过程将 Lustre 客户端设置FSx为访问EFA已启用 Lustre 的文件系统。
安装EFA模块和配置接口
要使用EFA接口访问 f FSx or Lustre 文件系统,必须安装 Lustre EFA 模块并配置EFA接口。 EFA目前支持运行 Ubuntu 22、内核版本为 6.8 及更高版本的 Lustre 客户端。有关安装EFA驱动程序的步骤,请参阅《Amazon EC2 用户指南》中的 “步骤 3:安装EFA软件”。
在EFA启用了功能的文件系统上配置您的客户端实例
连接到您的亚马逊EC2实例。
复制以下脚本并将其另存为名为的文件
configure-efa-fsx-lustre-client.sh
。#!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin echo "Started ${0} at $(date)" eth_intf="$(ip -br -4 a sh | grep $(hostname -i)/ | awk '{print $1}')" efa_version=$(modinfo efa | awk '/^version:/ {print $2}' | sed 's/[^0-9.]//g') min_efa_version="2.12.1" # Check the EFA driver version. Minimum v2.12.1 supported if [[ -z "$efa_version" ]]; then echo "Error: EFA driver not found" exit 1 fi if [[ "$(printf '%s\n' "$min_efa_version" "$efa_version" | sort -V | head -n1)" != "$min_efa_version" ]]; then echo "Error: EFA driver version $efa_version does not meet the minimum requirement $min_efa_version" exit 1 else echo "Using EFA driver version $efa_version" fi echo "Loading Lustre/EFA modules..." sudo /sbin/modprobe lnet sudo /sbin/modprobe kefalnd ipif_name="$eth_intf" sudo /sbin/modprobe ksocklnd sudo lnetctl lnet configure echo "Configuring TCP interface..." sudo lnetctl net del --net tcp 2> /dev/null sudo lnetctl net add --net tcp --if $eth_intf # For P5 instance type which supports 32 network cards, # by default add 8 EFA interfaces selecting every 4th device (1 per PCI bus) echo "Configuring EFA interface(s)..." instance_type="$(ec2-metadata --instance-type | awk '{ print $2 }')" num_efa_devices="$(ls -1 /sys/class/infiniband | wc -l)" echo "Found $num_efa_devices available EFA device(s)" if [[ "$instance_type" == "p5.48xlarge" || "$instance_type" == "p5e.48xlarge" ]]; then for intf in $(ls -1 /sys/class/infiniband | awk 'NR % 4 == 1'); do sudo lnetctl net add --net efa --if $intf --peer-credits 32 done else # Other instances: Configure 2 EFA interfaces by default if the instance supports multiple network cards, # or 1 interface for single network card instances # Can be modified to add more interfaces if instance type supports it sudo lnetctl net add --net efa --if $(ls -1 /sys/class/infiniband | head -n1) --peer-credits 32 if [[ $num_efa_devices -gt 1 ]]; then sudo lnetctl net add --net efa --if $(ls -1 /sys/class/infiniband | tail -n1) --peer-credits 32 fi fi echo "Setting discovery and UDSP rule" sudo lnetctl set discovery 1 sudo lnetctl udsp add --src efa --priority 0 sudo /sbin/modprobe lustre sudo lnetctl net show echo "Added $(sudo lnetctl net show | grep -c '@efa') EFA interface(s)"
运行EFA配置脚本。
sudo apt-get install amazon-ec2-utils cron sudo chmod +x configure-efa-fsx-lustre-client.sh ./configure-efa-fsx-lustre-client.sh
使用以下示例命令来设置 cron 作业,该作业将在客户机实例重启后自动在这些实例EFA上重新配置:
(sudo crontab -l 2>/dev/null; echo "@reboot /path/to/configure-efa-fsx-lustre-client.sh > /var/log/configure-efa-fsx-lustre-client-output.log") | sudo crontab -
添加或移除EFA接口
Lustre 文件系统的每个FSx客户端实例的最大EFA连接限制为 1024 个。
该configure-efa-fsx-lustre-client.sh
脚本会根据EC2实例类型自动配置实例上的 Elastic Fabric Adapter (EFA) 接口的数量。对于 P5 实例(p5.48xlarge
或p5e.48xlarge
),它默认配置 8 个EFA接口。对于其他带有多个网卡的实例,它会配置 2 个EFA接口。对于使用单个网卡的实例,它会配置 1 个EFA接口。当客户端实例连接到 fo FSx r Lustre 文件系统时,在客户端实例上配置的每个EFA接口都计入 1024 的EFA连接限制。
与EFA接口较少的客户端实例相比,EFA接口较多的客户端实例通常支持更高的吞吐量。只要不超过EFA连接限制,就可以修改脚本以增加或减少每个实例的EFA接口数量,从而优化工作负载的每客户端吞吐量性能。
要添加EFA接口,请执行以下操作:
sudo lnetctl net add --net efa --if
device_name
--peer-credits 32
中列出的设备在device_name
哪里ls -1 /sys/class/infiniband
。
要删除EFA接口,请执行以下操作:
sudo lnetctl net del --net efa --if
device_name
安装GDS驱动程序
要在 Lustre 上FSx使用GPUDirect存储 (GDS),必须使用 Amazon EC2 P5 或 G6 客户端实例,以及版本为 2.24.2 或更高版本的NVIDIAGDS驱动程序。
在您的客户端实例上安装NVIDIAGPUDirect存储驱动程序
克隆上可用的 NVIDIA/gds-nvidia-fs 存储库
GitHub。 git clone https://github.com/NVIDIA/gds-nvidia-fs.git
克隆存储库后,使用以下命令构建驱动程序:
cd gds-nvidia-fs/src/ export NVFS_MAX_PEER_DEVS=128 export NVFS_MAX_PCI_DEPTH=16 sudo -E make sudo insmod nvidia-fs.ko