You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.7 KiB

🚫 Отключение IPv6

Если у сетевых интерфейсов настроены IPv6-адреса, DeepSpeed и NCCL могут пытаться использовать их для межнодового обмена, что часто приводит к ошибкам соединения или подвисаниям, особенно если IPv6 на вашей сети фактически не используется. Чтобы этого избежать, рекомендуется полностью отключить IPv6 на всех машинах.

Как отключить IPv6 на Ubuntu

Откройте (или создайте) файл /etc/sysctl.conf:

sudo vim /etc/sysctl.conf

Добавьте в конец файла:

# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Примените изменения:

sudo sysctl -p

После этого проверьте, что IPv6 отключён:

ip a | grep inet6

Ничего не должно выводиться.


🔥 Разрешение портов в файрволе

Если после настройки SSH и передачи интерфейсов через -e NCCL_SOCKET_IFNAME=10gb0,10gb1 связь между машинами всё равно не устанавливается, причиной может быть блокировка портов файрволом. Для работы NCCL и DeepSpeed требуются открытые диапазоны TCP и UDP портов (по умолчанию в пределах ~1024-65535).

Проверяем и настраиваем UFW

Смотрим статус:

sudo ufw status verbose

Если включён, то разрешаем весь трафик на интерфейсе 10gb0:

sudo ufw allow in on 10gb0
sudo ufw allow out on 10gb0

И аналогично для 10gb1:

sudo ufw allow in on 10gb1
sudo ufw allow out on 10gb1

После чего перезагружаем UFW:

sudo ufw reload

Проверяем и настраиваем iptables

Посмотреть текущие правила:

sudo iptables -L -v -n

Открыть весь трафик для интерфейсов:

sudo iptables -A INPUT -i 10gb0 -j ACCEPT
sudo iptables -A OUTPUT -o 10gb0 -j ACCEPT
sudo iptables -A INPUT -i 10gb1 -j ACCEPT
sudo iptables -A OUTPUT -o 10gb1 -j ACCEPT

Сохранить правила (Ubuntu):

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Проверяем и настраиваем nftables

Если у вас используется nftables, посмотреть таблицы можно так:

sudo nft list ruleset

Добавить разрешающие правила:

sudo nft add rule inet filter input iifname "10gb0" accept
sudo nft add rule inet filter output oifname "10gb0" accept
sudo nft add rule inet filter input iifname "10gb1" accept
sudo nft add rule inet filter output oifname "10gb1" accept

Либо только для определенных портов для Docker:

sudo nft add rule ip filter DOCKER tcp dport 48000-48031 ip saddr 172.16.45.0/24 accept
sudo nft add rule ip filter DOCKER tcp sport 48000-48031 ip saddr 172.16.45.0/24 accept

После чего сохранить:

sudo nft list ruleset > /etc/nftables.conf
sudo systemctl restart nftables

После всех этих действий повторите запуск DeepSpeed / torchrun и проверьте обмен между нодами.