Тренировка нейронной сети на ноутбуке с eGPU. Сравнение с облачными GPU сервисами.

Многим разработчикам комфортнее работать на ноутбуках, которые нередко обладат достаточно слабыми GPU, а тренировка нейронных сетей быстрее всего идет на многоядерных графических картах. Как разрешить это противоречие?

Можно использовать два варианта:

  • Облачные сервера с GPU. Из наиболее распространенных бесплатных: Google Colab, Kaggle. Но там есть ограничение по времени тренировки сети и по аппаратным ресурсам. Скорее всего переподписка значительная, поэтому производительность может быть довольно низкой. Не раз сталкивался с просадкой скорости тренировки в несколько раз. Из платных относительного недорогие варианты GPU облачных серверов (хостингов): FloydHub, PaperSpace, ExoScale, Alibaba Cloud. Добротное сравнение GPU хостингов.
  • Внешний eGPU корпус с видеокартой и ноутбук с портом Thunderbolt 3 (теоретическая производительность до 40 Gb/s, реальная скорее 5 Гб/с). Сравнение eGPU платформ здесь + производительная видеокарта (не Tesla, она серверная с пассивным охлаждением), подобрать которую можно здесь. Собственно, под производительные «горячие» и длинные видеокарты основной вариант — Razer Core X, поддерживающий энергопотребление видеокарт до 500 Вт.

Естественно, в данном случае есть некоторые сомнения по поводу производительности eGPU, поскольку Thunderbolt интерфейс — узкое место по скорости.

Мне удалось найти лишь одно сравнение облачных GPU серверов на видеокартах Tesla K80 12 GB VRAM (спаренный GPU, суммарно 2х12 Gb) и eGPU с картой Nvidia GTX 1070Ti 8GB VRAM (через eGPU Sonnet Breakaway).

Честно говоря результаты довольно удивительные. Во всех тестах комбинация ноутбук + eGPU с не самой производительной картой Nvidia GTX 1070Ti выдавал почти вдвое выше скорость, нежели супермощные Tesla в облаке.

Вероятнее всего ресурсы GPU сервер деляться между подписчиками сервиса, т.е. в эксклюзивное пользование видеокарта если и предоставляется, то на короткое время. Возможно пользователям отдается в пользование ограниченное число ядер GPU, поэтому есть просадка.

Сравнение производительности eGPU с облачным GPU сервером на CIFAR 10 (CNN)
Сравнение производительности eGPU с облачным GPU сервером на MNIST (CNN)
Сравнение производительности eGPU с облачным GPU сервером на PTB (LSTM)

Финансы

Сравним затраты на оба варианта реализации лаборатории для работы на ноутбуке:

НаименованиеeGPUFloydHub GPU
eGPU Razer Core X 300 USD
Nvidia GTX 1070Ti 8GB 430 uSD
GPU9 USD/мес * 12 мес = 108 USD/год
Сервер1.2 USD/час * 8 ч * 21 день = 201 USD/мес. * 12 мес = 2419 USD / год
Итого:730 USD / 3 года = 243 USD/год2527 USD/год

Получаем, что в случае eGPU единовременные затраты составят порядка 730 USD. При этом средний срок эксплуатации решения 3 года или 243 USD/год.

Получаем, что аренда GPU сервера обходится примерно в 10 раз дороже, чем приобретение eGPU + видеокарты. Это без учета в два раза меньшей производительности, скорее всего вызванной переподпиской ресурсов GPU.

Отмечу, что это весьма недорогой сервис по сдаче GPU в аренду. Если смотреть решения, например, от IBM, то там ежемесячная стоимость начинается от 1200 USD на виртуальном сервере. Но при этом решении видеокарта предоставляется в эксклюзивное пользование.

Видеокарты с 8 Gb недостаточно для решения сложных задач deep learning. Новая Nvidia M6000 с 24 Gb VRAM будет стоить около 2350 USD. Совокупные затраты в этом случае вырастут примерно до 2650 USD единовременно и окупятся примерно через год, если сравнивать с арендой GPU сервера. В этом случае уже надо смотреть какие затраты предпочтительнее CAPEX в случае с пприобретением eGPU или OPEX при аренде облачных GPU.

Примеры тестирования cloud GPU

Скрипт для тестирования в Colab от http://ai-benchmark.com/alpha:

!pip install ai-benchmark

from ai_benchmark import AIBenchmark
results = AIBenchmark().run()

Пример результатов по Colab не Pro версия (20.06.2020):

*  TF Version: 2.2.0
*  Platform: Linux-4.19.104+-x86_64-with-Ubuntu-18.04-bionic
*  CPU: Intel(R) Xeon(R) CPU @ 2.00GHz
*  CPU RAM: 13 GB
*  GPU/0: Tesla T4
*  GPU RAM: 13.6 GB
*  CUDA Version: 10.1
*  CUDA Build: V10.1.243

The benchmark is running...
The tests might take up to 20 minutes
Please don't interrupt the script

1/19. MobileNet-V2

1.1 - inference | batch=50, size=224x224: 69.8 ± 5.5 ms
1.2 - training  | batch=50, size=224x224: 322 ± 2 ms

2/19. Inception-V3

2.1 - inference | batch=20, size=346x346: 97.0 ± 2.0 ms
2.2 - training  | batch=20, size=346x346: 364 ± 2 ms

3/19. Inception-V4

3.1 - inference | batch=10, size=346x346: 99.5 ± 1.9 ms
3.2 - training  | batch=10, size=346x346: 383 ± 2 ms

4/19. Inception-ResNet-V2

4.1 - inference | batch=10, size=346x346: 136.4 ± 1.0 ms
4.2 - training  | batch=8, size=346x346: 402 ± 3 ms

5/19. ResNet-V2-50

5.1 - inference | batch=10, size=346x346: 64.9 ± 1.0 ms
5.2 - training  | batch=10, size=346x346: 228 ± 1 ms

6/19. ResNet-V2-152

6.1 - inference | batch=10, size=256x256: 90.0 ± 1.5 ms
6.2 - training  | batch=10, size=256x256: 308 ± 2 ms

7/19. VGG-16

7.1 - inference | batch=20, size=224x224: 168 ± 2 ms
7.2 - training  | batch=2, size=224x224: 234 ± 1 ms

8/19. SRCNN 9-5-5

8.1 - inference | batch=10, size=512x512: 124.3 ± 1.0 ms
8.2 - inference | batch=1, size=1536x1536: 132 ± 2 ms
8.3 - training  | batch=10, size=512x512: 457 ± 3 ms

9/19. VGG-19 Super-Res

9.1 - inference | batch=10, size=256x256: 262.2 ± 1.0 ms
9.2 - inference | batch=1, size=1024x1024: 440 ± 4 ms
9.3 - training  | batch=10, size=224x224: 562 ± 4 ms

10/19. ResNet-SRGAN

10.1 - inference | batch=10, size=512x512: 223 ± 1 ms
10.2 - inference | batch=1, size=1536x1536: 199.2 ± 0.9 ms
10.3 - training  | batch=5, size=512x512: 301 ± 1 ms

11/19. ResNet-DPED

11.1 - inference | batch=10, size=256x256: 230.4 ± 1.0 ms
11.2 - inference | batch=1, size=1024x1024: 390 ± 1 ms
11.3 - training  | batch=15, size=128x128: 350 ± 1 ms

12/19. U-Net

12.1 - inference | batch=4, size=512x512: 459 ± 3 ms
12.2 - inference | batch=1, size=1024x1024: 454 ± 5 ms
12.3 - training  | batch=4, size=256x256: 409 ± 2 ms

13/19. Nvidia-SPADE

13.1 - inference | batch=5, size=128x128: 188 ± 1 ms
13.2 - training  | batch=1, size=128x128: 270.4 ± 0.9 ms

14/19. ICNet

14.1 - inference | batch=5, size=1024x1536: 192 ± 2 ms
14.2 - training  | batch=10, size=1024x1536: 519 ± 6 ms

15/19. PSPNet

15.1 - inference | batch=5, size=720x720: 1001 ± 23 ms
15.2 - training  | batch=1, size=512x512: 303 ± 2 ms

16/19. DeepLab

16.1 - inference | batch=2, size=512x512: 232 ± 3 ms
16.2 - training  | batch=1, size=384x384: 234 ± 1 ms

17/19. Pixel-RNN

17.1 - inference | batch=50, size=64x64: 855 ± 14 ms
17.2 - training  | batch=10, size=64x64: 3418 ± 45 ms

18/19. LSTM-Sentiment

18.1 - inference | batch=100, size=1024x300: 679 ± 13 ms
18.2 - training  | batch=10, size=1024x300: 1550 ± 58 ms

19/19. GNMT-Translation

19.1 - inference | batch=1, size=1x20: 201 ± 4 ms

Device Inference Score: 6439
Device Training Score: 7060
Device AI Score: 13499

For more information and results, please visit http://ai-benchmark.com/alpha

Результаты теста на облаке FloydHub (20.06.2020):

>>   AI-Benchmark-v.0.1.2   
>>   Let the AI Games begin..

*  TF Version: 2.1.0
*  Platform: Linux-4.15.0-1032-aws-x86_64-with-debian-buster-sid
*  CPU: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
*  CPU RAM: 60 GB
*  GPU/0: Tesla K80
*  GPU RAM: 10.5 GB
*  CUDA Version: 10.0
*  CUDA Build: V10.0.130

The benchmark is running...
The tests might take up to 20 minutes
Please don't interrupt the script

1/19. MobileNet-V2

1.1 - inference | batch=50, size=224x224: 136.5 ± 0.5 ms
1.2 - training  | batch=50, size=224x224: 552 ± 7 ms

2/19. Inception-V3

2.1 - inference | batch=20, size=346x346: 222 ± 1 ms
2.2 - training  | batch=20, size=346x346: 806 ± 2 ms

3/19. Inception-V4

3.1 - inference | batch=10, size=346x346: 238 ± 2 ms
3.2 - training  | batch=10, size=346x346: 830 ± 2 ms

4/19. Inception-ResNet-V2

4.1 - inference | batch=10, size=346x346: 314 ± 1 ms
4.2 - training  | batch=8, size=346x346: 907 ± 2 ms

5/19. ResNet-V2-50

5.1 - inference | batch=10, size=346x346: 156 ± 1 ms
5.2 - training  | batch=10, size=346x346: 485 ± 1 ms

6/19. ResNet-V2-152

6.1 - inference | batch=10, size=256x256: 218.9 ± 0.5 ms
6.2 - training  | batch=10, size=256x256: 737 ± 1 ms

7/19. VGG-16

7.1 - inference | batch=20, size=224x224: 312 ± 2 ms
7.2 - training  | batch=2, size=224x224: 415 ± 1 ms

8/19. SRCNN 9-5-5

8.1 - inference | batch=10, size=512x512: 416 ± 4 ms
8.2 - inference | batch=1, size=1536x1536: 409 ± 2 ms
8.3 - training  | batch=10, size=512x512: 1046 ± 4 ms

9/19. VGG-19 Super-Res

9.1 - inference | batch=10, size=256x256: 517.2 ± 0.7 ms
9.2 - inference | batch=1, size=1024x1024: 827 ± 1 ms
9.3 - training  | batch=10, size=224x224: 1084 ± 3 ms

10/19. ResNet-SRGAN

10.1 - inference | batch=10, size=512x512: 415.1 ± 0.7 ms
10.2 - inference | batch=1, size=1536x1536: 393 ± 1 ms
10.3 - training  | batch=5, size=512x512: 622 ± 4 ms

11/19. ResNet-DPED

11.1 - inference | batch=10, size=256x256: 475.8 ± 0.7 ms
11.2 - inference | batch=1, size=1024x1024: 924 ± 2 ms
11.3 - training  | batch=15, size=128x128: 595.2 ± 0.4 ms

12/19. U-Net

12.1 - inference | batch=4, size=512x512: 968 ± 2 ms
12.2 - inference | batch=1, size=1024x1024: 982 ± 3 ms
12.3 - training  | batch=4, size=256x256: 825 ± 1 ms

13/19. Nvidia-SPADE

13.1 - inference | batch=5, size=128x128: 450 ± 2 ms
13.2 - training  | batch=1, size=128x128: 566 ± 1 ms

14/19. ICNet

14.1 - inference | batch=5, size=1024x1536: 436 ± 2 ms
14.2 - training  | batch=10, size=1024x1536: 1161 ± 4 ms

15/19. PSPNet

15.1 - inference | batch=5, size=720x720: 1987 ± 4 ms
15.2 - training  | batch=1, size=512x512: 635 ± 2 ms

16/19. DeepLab

16.1 - inference | batch=2, size=512x512: 494 ± 1 ms
16.2 - training  | batch=1, size=384x384: 564 ± 1 ms

17/19. Pixel-RNN

17.1 - inference | batch=50, size=64x64: 1026 ± 11 ms
17.2 - training  | batch=10, size=64x64: 2129 ± 15 ms

18/19. LSTM-Sentiment

18.1 - inference | batch=100, size=1024x300: 1436 ± 7 ms
18.2 - training  | batch=10, size=1024x300: 2823 ± 13 ms

19/19. GNMT-Translation

19.1 - inference | batch=1, size=1x20: 318 ± 3 ms

Device Inference Score: 3021
Device Training Score: 3653
Device AI Score: 6674

For more information and results, please visit http://ai-benchmark.com/alpha

Результаты теста на ПК с GPU GeForce RTX™ 2080 Ti GAMING OC 11G на материнке ASUS P8P67 REV 3.1. Отмечу, что слот на матери 2.0, а не 3.0, который поддерживает GPU:

1 x PCIe 2.0 x16
1 x PCIe 2.0 x16 (x4 mode, (Black)) *1

>>   AI-Benchmark-v.0.1.2
>>   Let the AI Games begin..

*  TF Version: 2.1.0
*  Platform: Windows-10-10.0.18362-SP0
*  CPU: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz
*  CPU RAM: 16 GB
*  GPU/0: GeForce RTX 2080 Ti
*  GPU RAM: 8.5 GB
*  CUDA Version: 10.1
*  CUDA Build: V10.1.105

The benchmark is running...
The tests might take up to 20 minutes
Please don't interrupt the script

1/19. MobileNet-V2

1.1 - inference | batch=50, size=224x224: 50.9 ▒ 1.1 ms
1.2 - training  | batch=50, size=224x224: 204 ▒ 3 ms

2/19. Inception-V3

2.1 - inference | batch=20, size=346x346: 70.5 ▒ 6.2 ms
2.2 - training  | batch=20, size=346x346: 176 ▒ 3 ms

3/19. Inception-V4

3.1 - inference | batch=10, size=346x346: 57.0 ▒ 3.2 ms
3.2 - training  | batch=10, size=346x346: 176 ▒ 2 ms

4/19. Inception-ResNet-V2

4.1 - inference | batch=10, size=346x346: 69.1 ▒ 2.4 ms
4.2 - training  | batch=8, size=346x346: 191 ▒ 2 ms

5/19. ResNet-V2-50

5.1 - inference | batch=10, size=346x346: 41.4 ▒ 2.7 ms
5.2 - training  | batch=10, size=346x346: 109.9 ▒ 0.8 ms

6/19. ResNet-V2-152

6.1 - inference | batch=10, size=256x256: 49.0 ▒ 1.4 ms
6.2 - training  | batch=10, size=256x256: 163 ▒ 6 ms

7/19. VGG-16

7.1 - inference | batch=20, size=224x224: 87.3 ▒ 3.3 ms
7.2 - training  | batch=2, size=224x224: 144 ▒ 14 ms

8/19. SRCNN 9-5-5

8.1 - inference | batch=10, size=512x512: 84.3 ▒ 3.8 ms
8.2 - inference | batch=1, size=1536x1536: 72.7 ▒ 2.1 ms
8.3 - training  | batch=10, size=512x512: 216 ▒ 5 ms

9/19. VGG-19 Super-Res

9.1 - inference | batch=10, size=256x256: 90.2 ▒ 1.3 ms
9.2 - inference | batch=1, size=1024x1024: 145 ▒ 4 ms
9.3 - training  | batch=10, size=224x224: 253 ▒ 2 ms

10/19. ResNet-SRGAN

10.1 - inference | batch=10, size=512x512: 107 ▒ 6 ms
10.2 - inference | batch=1, size=1536x1536: 94.6 ▒ 2.0 ms
10.3 - training  | batch=5, size=512x512: 149 ▒ 7 ms

11/19. ResNet-DPED

11.1 - inference | batch=10, size=256x256: 93.6 ▒ 1.0 ms
11.2 - inference | batch=1, size=1024x1024: 166 ▒ 1 ms
11.3 - training  | batch=15, size=128x128: 161 ▒ 5 ms

12/19. U-Net

12.1 - inference | batch=4, size=512x512: 173 ▒ 2 ms
12.2 - inference | batch=1, size=1024x1024: 176 ▒ 8 ms
12.3 - training  | batch=4, size=256x256: 183 ▒ 3 ms

13/19. Nvidia-SPADE

13.1 - inference | batch=5, size=128x128: 77.2 ▒ 1.3 ms
13.2 - training  | batch=1, size=128x128: 127 ▒ 3 ms

14/19. ICNet

14.1 - inference | batch=5, size=1024x1536: 150 ▒ 1 ms
14.2 - training  | batch=10, size=1024x1536: 442 ▒ 8 ms

15/19. PSPNet

15.1 - inference | batch=5, size=720x720: 312 ▒ 3 ms
15.2 - training  | batch=1, size=512x512: 130 ▒ 2 ms

16/19. DeepLab

16.1 - inference | batch=2, size=512x512: 89.9 ▒ 0.8 ms
16.2 - training  | batch=1, size=384x384: 107.8 ▒ 0.4 ms

17/19. Pixel-RNN

17.1 - inference | batch=50, size=64x64: 810 ▒ 4 ms
17.2 - training  | batch=10, size=64x64: 2212 ▒ 39 ms

18/19. LSTM-Sentiment

18.1 - inference | batch=100, size=1024x300: 760 ▒ 18 ms
18.2 - training  | batch=10, size=1024x300: 1352 ▒ 56 ms

19/19. GNMT-Translation

19.1 - inference | batch=1, size=1x20: 208 ▒ 4 ms

Device Inference Score: 12060
Device Training Score: 13383
Device AI Score: 25443

For more information and results, please visit http://ai-benchmark.com/alpha

Полезные ссылки

Spread the love
Запись опубликована в рубрике IT рецепты, IT решения для бизнеса. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *