Как я собирал комп для Deep Learning (год 2017)
Выиграв конкурс и получив призовые, встал вопрос о втором компе, который будет играть роль сервера для расчёта нейронных сеток. На своём 980 Ti с 6 GB памяти мне стало тесновато. И например на 3Д свёртках в задаче с раком лёгких я утыкался в лимиты. Да и при запуске расчётов работать за компом становилось не комфортно из-за тормозов интерфейса, да и Youtube особо не посмотришь.
Итак после небольшого изучения рынка и опыта товарищей по цеху, было принято решение собирать компьютер из 4 GPU. Для этого было выбрано 4 видео карты, 2 свежие NVIDIA 1080 Ti 11 GB + 1080 8 GB + 1070 8 GB. Две последние из-за относительной дешевизны. За это решение, впрочем, меня критиковали.
Сразу оговорюсь, что компы я собираю редко и не люблю тратить на это время. Плюс я не знаю много тонкостей в сочетании разных комплектующих. Поэтому я заказывал все комплектующие в одном месте вместе со сборкой. Артур (n01z3) мне посоветовал Регард. Я и до этого там покупал что-то из комплектующих, но не знал что они занимаются и сборкой, которая кстати бесплатная. К тому же у них шикарный конфигуратор: http://www.regard.ru/cfg Там правда возможно выбрать только 2 видеокарты, но ещё 2 можно написать в комменте к заказу (что я и сделал).
Тонкости
1) Крайне мало материнских плат поддерживают 4 видеокарты, прежде всего из-за их размеров. Топовые видеокарты занимают сразу два слота.
2) Соответственно из-за больших размеров комплектующих лучше заказать корпус максимального размера. Я ориентировался на XL-ATX
3) В пике каждая видеокарта может потреблять более 250W, соответственно 4 это уже 1000W. Не забываем что энергию едят и другие устройства. Поэтому блок питания нужен минимум на 1200 W. Я взял с запасом на 1500 W.
4) Ожидаемо, что при таких потреблениях энергии всё это хозяйство будет сильно греться. Дополнительно в корпус я запихнул 4 вентилятора.
5) Для того что бы комп не вырубался при перепадах энергии я заказал UPS, который держит 1500W, мой стандартный начинал жалобно пищать от перегруза во время работы всех 4 карточек.
6) Изначально я решил не тратиться сильно на процессор, из-за того что одна и та же серия при небольшой казалось бы разнице в производительности может различаться по стоимости в разы. Однако для поддержки 4 видеокарт надо брать процессор с 40 линиями PCI, первый который я выбрал был только на 28.
7) У процессоров есть ограничение на количество поддерживаемой памяти. В моём ограничение было 64 GB (это я выяснил уже постфактум на этапе сборки), однако каким то чудом видно все заказанные 128 GB и я проверил их скриптом, что всё записывается и читается. Вообще я не уверен что для DL нужно 128 ГБ, потому-что я уже давно перешёл от модели зачитки всех изображений в память к работе с отдельными батчами, а там обычно много оперативной памяти не требуется. Batch Generator наше всё.
Бюджет на подобный компьютер порядка 350-400 тыс. рублей. Мой конфиг ниже:
Использование
Комп реально сильно греется если используются все 4 видеокарты. Но вроде бы выше 90 градусов температура не поднималась.
Прогнал мультиГПУ тест на MXNet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
NET: vgg19, GPUs in Parallel: 1, BATCH: 12 Speed: 67.81 samples/sec NET: vgg19, GPUs in Parallel: 2, BATCH: 24 Speed: 57.08 samples/sec NET: vgg19, GPUs in Parallel: 3, BATCH: 36 Speed: 79.79 samples/sec NET: vgg19, GPUs in Parallel: 4, BATCH: 48 Speed: 100.78 samples/sec NET: Inception-BN, GPUs in Parallel: 1, BATCH: 12 Speed: 213.62 samples/sec NET: Inception-BN, GPUs in Parallel: 2, BATCH: 24 Speed: 269.55 samples/sec NET: Inception-BN, GPUs in Parallel: 3, BATCH: 36 Speed: 375.35 samples/sec NET: Inception-BN, GPUs in Parallel: 4, BATCH: 48 Speed: 459.22 samples/sec NET: resnet-152, GPUs in Parallel: 1, BATCH: 12 Speed: 60.66 samples/sec NET: resnet-152, GPUs in Parallel: 2, BATCH: 24 Speed: 54.44 samples/sec NET: resnet-152, GPUs in Parallel: 3, BATCH: 36 Speed: 79.54 samples/sec NET: resnet-152, GPUs in Parallel: 4, BATCH: 48 Speed: 104.61 samples/sec NET: resnext-101, GPUs in Parallel: 1, BATCH: 12 Speed: 48.31 samples/sec NET: resnext-101, GPUs in Parallel: 2, BATCH: 24 Speed: 59.69 samples/sec NET: resnext-101, GPUs in Parallel: 3, BATCH: 36 Speed: 86.48 samples/sec NET: resnext-101, GPUs in Parallel: 4, BATCH: 48 Speed: 112.15 samples/sec |
На паре тестов наблюдается провал на двух GPU. Это связано с тем что вторым подключалась в работу самая слабая NVIDIA GTX 1070, а MXNet не справился с полноценным распараллеливанием.
Эх мне о таком только мечтать приходится. Скажи пожалуйста, а на GT 630 (2 несчастных Гб) вообще реально ResNet 50 обучить? Пусть даже и медленно.
Поделюсь полезностью:
Список книг, видео и курсов по машинному обучению и математике, всё на русском языке. Большая, качественная подборка. Почти все pdf’ки книг гуглятся.
https://ru.stackoverflow.com/a/683632/1084