|
|
## 🚫 Отключение IPv6
|
|
|
|
|
|
Если у сетевых интерфейсов настроены IPv6-адреса, `DeepSpeed` и `NCCL` могут пытаться использовать их для межнодового обмена, что часто приводит к ошибкам соединения или подвисаниям, особенно если IPv6 на вашей сети фактически не используется. Чтобы этого избежать, рекомендуется полностью отключить IPv6 на всех машинах.
|
|
|
|
|
|
### Как отключить IPv6 на Ubuntu
|
|
|
|
|
|
Откройте (или создайте) файл `/etc/sysctl.conf`:
|
|
|
|
|
|
```bash
|
|
|
sudo vim /etc/sysctl.conf
|
|
|
```
|
|
|
|
|
|
Добавьте в конец файла:
|
|
|
|
|
|
```ini
|
|
|
# Disable IPv6
|
|
|
net.ipv6.conf.all.disable_ipv6 = 1
|
|
|
net.ipv6.conf.default.disable_ipv6 = 1
|
|
|
```
|
|
|
|
|
|
Примените изменения:
|
|
|
|
|
|
```bash
|
|
|
sudo sysctl -p
|
|
|
```
|
|
|
|
|
|
После этого проверьте, что IPv6 отключён:
|
|
|
|
|
|
```bash
|
|
|
ip a | grep inet6
|
|
|
```
|
|
|
|
|
|
Ничего не должно выводиться.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🔥 Разрешение портов в файрволе
|
|
|
|
|
|
Если после настройки SSH и передачи интерфейсов через `-e NCCL_SOCKET_IFNAME=10gb0,10gb1` связь между машинами всё равно не устанавливается, причиной может быть блокировка портов файрволом. Для работы `NCCL` и `DeepSpeed` требуются открытые диапазоны TCP и UDP портов (по умолчанию в пределах `~1024-65535`).
|
|
|
|
|
|
### Проверяем и настраиваем UFW
|
|
|
|
|
|
Смотрим статус:
|
|
|
|
|
|
```bash
|
|
|
sudo ufw status verbose
|
|
|
```
|
|
|
|
|
|
Если включён, то разрешаем весь трафик на интерфейсе `10gb0`:
|
|
|
|
|
|
```bash
|
|
|
sudo ufw allow in on 10gb0
|
|
|
sudo ufw allow out on 10gb0
|
|
|
```
|
|
|
|
|
|
И аналогично для `10gb1`:
|
|
|
|
|
|
```bash
|
|
|
sudo ufw allow in on 10gb1
|
|
|
sudo ufw allow out on 10gb1
|
|
|
```
|
|
|
|
|
|
После чего перезагружаем UFW:
|
|
|
|
|
|
```bash
|
|
|
sudo ufw reload
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
### Проверяем и настраиваем iptables
|
|
|
|
|
|
Посмотреть текущие правила:
|
|
|
|
|
|
```bash
|
|
|
sudo iptables -L -v -n
|
|
|
```
|
|
|
|
|
|
Открыть весь трафик для интерфейсов:
|
|
|
|
|
|
```bash
|
|
|
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):
|
|
|
|
|
|
```bash
|
|
|
sudo iptables-save | sudo tee /etc/iptables/rules.v4
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
### Проверяем и настраиваем nftables
|
|
|
|
|
|
Если у вас используется `nftables`, посмотреть таблицы можно так:
|
|
|
|
|
|
```bash
|
|
|
sudo nft list ruleset
|
|
|
```
|
|
|
|
|
|
Добавить разрешающие правила:
|
|
|
|
|
|
```bash
|
|
|
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:
|
|
|
```bash
|
|
|
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
|
|
|
```
|
|
|
|
|
|
После чего сохранить:
|
|
|
|
|
|
```bash
|
|
|
sudo nft list ruleset > /etc/nftables.conf
|
|
|
sudo systemctl restart nftables
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
После всех этих действий повторите запуск `DeepSpeed` / `torchrun` и проверьте обмен между нодами. |