Comments 25
Показывал статью знакомым, добавлю еще ряд оговорок:
- 1080 Ti не успел протестировать (они заняты сейчас), но думаю там все будет понять из
gpu-burn
; - Чтобы не греть атмосферу лишний раз,
gpu-burn
и тест на 1 "слайсике" я не делал прокидывая внутрь контейнера 1 "маленький" слайсик. По нагрузке очевидно, что при 2 слайсиках будет максимум так же быстро как на всей карте A100 целиком, а параллелизация не выходит с MIG. А сgpu-burn
можно просто цифры разделить в уме согласно документации; - Цена карт Quadro — в районе US$5-6k;
- Почему AMP не дружит с сеткой еще ищем;
- Я уточнил через несколько каналов у Nvidia не затупил ли я с пониманием документации MIG, вроде все так;
И да, PCIE A100 пассивные, то есть кулера там нет
Еще ASUS анонсировали турбо карту -https://www.ixbt.com/news/2020/12/02/nvidia-asus-turbo-geforce-rtx-3090.html — даешь больше 3090 по нормальным ценам
tensor-cores
честно говоря автор не указал этой информации — http://wili.cc/blog/gpu-burn.html
предположим что FP32 или FP16
TFlops:
FP32 35.68
FP64 0.558
FP16 35.68
FP16 Tensor 285.48 ???
что тоже странно.
Если вы про MIG то
CUDA is limited to use a single CI and will pick the first one available if several of them are visible.
То есть придется поднимать N контейнеров чтобы такое работало в Питорче. Кажется достаточно неоправданным геморроем на одной машине делать так.
Насчёт TF — не знаю, не пользовался, но мне кажется что тащить фреймворк для распределенных вычислений на N машинах для распределения по N картам на одной машине это оверкилл.
Насчет «CUDA is limited to use a single CI and will pick the first one available» давно решается переменной окружения CUDA_VISIBLE_DEVICES, которая задается для каждого процесса своей.
Таким образом для multiGPU просто запускается количество процессов равное количеству карт, при этом масштабирование практически линейное.
пересылается ошибка
скорее градиенты
Насчет «CUDA is limited to use a single CI and will pick the first one available» давно решается переменной окружения CUDA_VISIBLE_DEVICES, которая задается для каждого процесса своей
Кстати я не догадался попробовать засетить ее после форка процесса, а не до
Это интересно
https://pytorch.org/docs/stable/distributed.html
В питорче говорят что NCCL даже по ethernet лучше
Кстати Nvidia посоветовала то же самое сделать в итоге
Здесь важно понимать, что 2 инстанса МИГА в распределенном обучении будут меньше по производительности, чем один но размером с оба инстанса. Я не зря написал, что не поддерживает в этом случае P2P операции, т.к. при работе с 2мя MIG весь обмен будет идти через системную память.
Можно сделать ухищрения через horovod, выставляя CUDA_VISIBLE_DEVICES в нужный миг и выставляя в конфиге тип устройства всегда 0, но это не более чем показать, что оно запустится.
В общем я завел
Но… ооочень медленно
Внутри каждого процесса до импорта торча я сделал такое — установил в CUDA_VISIBLE_DEVICES разные карты согласно рангу процесса. Если это не работает из коробки, то вряд ли уже стоит дальше трать время.
mig_devices: ['MIG-GPU-e6aa67a2-1b88-ad15-5bb8-ac9b1228d86f/3/0',
'MIG-GPU-e6aa67a2-1b88-ad15-5bb8-ac9b1228d86f/5/0',
'MIG-GPU-e6aa67a2-1b88-ad15-5bb8-ac9b1228d86f/6/0']
В любом случае это уже явно использование не по назначению.
Добавил gpu-burn вместе с CUDA_VISIBLE_DEVICES
Попробую указать CUDA_VISIBLE_DEVICES внутри каждого процесса PyTorch а не через device enumeration, посмотрим что выйдет
Update 2 — доабвил график утилизации карты когда запущено 3 параллельных gpu-burn через MIG
Финальный апдейт — MIG в текущем состоянии абсолютно точно не подходит для масштабной тренировки сетей. Сейчас это чисто фишка для инференса или для тренировки N маленьких сетей на маленьких датасетах.
1. В комп — такая плата:
www.ebay.com/itm/142614635879
2. А к ней подключается такая штука на 4 карты в 1U:
www.ebay.com/itm/223221951917
Это я не о том вообще или с новыми картами таких решений уже нет?
Не большой спец в серверном железе, но навскидку вижу только одну проблему
4 карты подключаются в один x16 PCIE разъем?
понятно что скорости может и вполне хватит (для DL надо 4-8x), но как будет система видеть такие карты?
насчет новых — там даже карт еще особо нигде нет =)
будет очень интересно если кто-то кто разбирается в таких штуках или пробовал напишет
а то подключить пассивные карты в обычный корпус через провод — очень интересно
экономим на платформе (ну или колхозим рядом), но получаем возможность работы с пассивными картами
а еще это очень старая железка
Т.е. при наличии 4 PCIEx16 на матери можно подключить 8 видеокарт в 2 1U-боксах (а не 16 как я думал изначально).
На картах (номер 1) стоят PCIE-коммутаторы, которые на дорогие материнки ставят для большего количества PCIE-портов, так что проблем с определением и видимостью всех быть не должно…
Товарищ один туда 1070 напихал с напилингом — ничё так суперсервер вышел…
PS: Старая — да, зато очень дёшево на иБее. Баксов в 500 можно уложиться на полный комплект, но без видях, есс-но…
Играемся с 3090 и пробуем MIG на A100