Вибір між процесором та графічним процесором для навчання нейронної мережі


29

Я бачив дискусії з приводу "накладних витрат" GPU, і що для "малих" мереж тренування на процесорі (або мережі процесорів) може бути швидше, ніж на графічному процесорі.

Що означає «малий»?

Наприклад, чи буде одношаровий MLP зі 100 прихованими одиницями "малим"?

Чи змінюється наше визначення "малої" для періодичних архітектур?

Чи є якісь інші критерії, які слід враховувати, вирішуючи, чи тренуватись на процесорі чи GPU?

EDIT 1:

Щойно я знайшов повідомлення в блозі (можливо, застарів? Це з 2014 року):

"... Більшість мережевих карт (ив) працюють лише з пам'яттю, яка зареєстрована в процесорі, і передача GPU на GPU між двома вузлами виглядатиме так: GPU 1 до CPU 1 до Network Card 1 до Network Card 2 до CPU 2 2 до GPU 2. Це означає, що якщо вибираєте повільну мережеву карту, то не може бути жодного прискорення роботи на одному комп’ютері. Навіть при швидких мережевих картах, якщо кластер великий, не можна отримати навіть прискорення з графічних процесорів у порівнянні до процесорів, оскільки графічні процесори просто працюють надто швидко, щоб мережеві карти не відставали від них.

Це причина, чому багато великих компаній, таких як Google і Microsoft, використовують CPU, а не GPU кластери для навчання своїх великих нейронних мереж. "

Тож у якийсь момент, згідно з цим повідомленням, можна було б швидше використовувати процесори. Це все-таки так?

EDIT 2: Так, ця публікація в блозі може бути застарілою, оскільки:

Зараз здається, що графічні процесори в вузлі підключені через шину PCIe, тому зв’язок може відбуватися близько 6 Гбіт / с. (Наприклад: https://www.youtube.com/watch?v=el1iSlP1uOs , близько 35 хвилин). Доповідач означає, що це швидше, ніж перехід від GPU1 до процесора до GPU2. Це означало б, що мережева карта вже не вузьке місце.


Цей хлопець зі своєю публікацією в блозі дає хороші бали. Я не зрозумів усіх його виправдань. Однак той факт, що Google, Facebook, Twitter та всі провідні групи глибокого навчання в академічних кодах керують кодами насамперед на GPU, говорить про те, що це гарна ідея. Хоча упереджено: nvidia.com/content/events/geoInt2015/LBrown_DL.pdf
JahKnows

Відповіді:


28

На відміну від деяких інших відповідей, я б дуже радив не завжди тренуватися на графічних процесорах без жодної другої думки. Це зумовлене використанням методів глибокого вивчення зображень та текстів, де дані дуже багаті (наприклад, багато пікселів = багато змінних), а модель також має багато мільйонів параметрів. Для інших доменів це може бути не так.

Що означає «малий»? Наприклад, чи буде одношаровий MLP зі 100 прихованими одиницями "малим"?

Так, це, безумовно, дуже мало за сучасними мірками. Якщо у вас не буде ідеально підходить GPU для навчання (наприклад, NVIDIA 1080 або NVIDIA Titan), я не здивуюся, коли ваш процесор був швидшим.

Зауважте, що складність вашої нейронної мережі також залежить від вашої кількості вхідних функцій, а не лише від кількості одиниць у вашому прихованому шарі. Якщо у вашому прихованому шарі є 100 одиниць і кожне спостереження у вашому наборі даних має 4 функції введення, то ваша мережа крихітна (~ 400 параметрів). Якщо кожне спостереження замість цього має 1М вхідні функції, як у деяких медичних / біотехнологічних контекстах, то ваша мережа досить велика за кількістю параметрів. У решті моєї відповіді я припускаю, що у вас є дуже мало функцій введення pr. спостереження.

Хороший приклад, який я знайшов, коли я порівнював ефективність процесора з графічним процесором, - це коли я тренував покерного бота з використанням підкріплення. Для вивчення підкріплення вам часто не потрібно стільки шарів у вашій нейронній мережі, і ми виявили, що нам потрібно лише кілька шарів з малою кількістю параметрів. Більше того, кількість вхідних функцій була досить низькою. Спочатку я навчався на графічному процесорі (NVIDIA Titan), але це зайняло багато часу, оскільки навчання для посилення вимагає багато ітерацій. На щастя, я виявив, що тренування на моєму процесорі замість цього зробило моє навчання 10 разів швидшим! Це просто означає, що процесори іноді можуть бути кращими для навчання.

Чи є якісь інші критерії, які слід враховувати, вирішуючи, чи тренуватись на процесорі чи GPU?

Важливо зауважити, що перебуваючи на GPU, ви завжди хочете заповнити всю пам'ять GPU, збільшивши розмір своєї партії, що не стосується процесора. На процесорі збільшення розміру партії збільшить час pr. партія. Тому, якщо вам важливо мати дуже великий розмір партії (наприклад, через дуже галасливий сигнал), може бути корисним використання GPU. Я цього ще не відчував на практиці, хоча і, як правило, віддається перевагу невеликим розмірам партії.


Дякую @pir! Чи є у вас конкретні посилання, де я можу прочитати більше?
StatsSorceress

Ви можете легко знайти кількість параметрів, наприклад, VGG для порівняння і побачити, що ваша мережа крихітна в порівнянні.
пір

3
Я не бачив багато порівнянь CPU / GPU у крихітних мережах, тому що великі компанії та науково-дослідні лабораторії не цим цікавляться.
pir

@StatsSorceress Якщо ви хочете перевірити його самостійно, чому б не просто встановити простий ML Keras і перевірити продуктивність на GPU проти процесора? Також дивіться мою оновлену відповідь wrt. розмір вашої мережі.
бенкет

5

Центральний процесор - менеджер філії, він може все трохи зробити, але він не дуже великий, крім делегування завдань. Однак GPU - це відданий математик, який ховається у вашій машині. Якщо ви робите якісь важкі математичні процеси, то вам слід використовувати свій графічний процес. Завжди.

Якщо ви використовуєте будь-яку популярну мову програмування для машинного навчання, наприклад, python або MATLAB, це однолінійний код, щоб повідомити вашому комп'ютеру, що ви хочете, щоб операції виконувалися на вашому графічному процесорі.

Ви також повинні обов'язково використовувати всі ядра машини. Це означає використання паралельних обчислень. Особливо для нейронних мереж, де операції можна виконувати самостійно, це значно збільшить вашу швидкість.


4
Я виявив, що іноді накладні витрати на передачу даних до та від GPU повністю знищують збільшення швидкості від паралелізму. Не завжди корисно зайти в GPU.
Адріан Кейстер

1
Це залежить від складності вашої моделі. Якщо ви тренуєте просту K-NN, можливо, це не варто. Однак, якщо ви навчаєте будь-яку модель, для якої потрібна обернена матриця або нейронна мережа, яка потребує багатьох послідовних операцій з матрицею, завжди добре обрати GPU.
JahKnows

1
@AdrianKeister Я згоден. Що я намагався отримати у своїй відповіді. Для мережі, згаданої ОП, яка, ймовірно, буде вузьким місцем.
бенкет

1
100 прихованих одиниць швидше на GPU за допомогою моєї машини. Мені потрібно дуже мала кількість прихованих одиниць, щоб процесор був швидшим. Більше того, я завжди прагну тренуватись партіями. У цьому випадку я сумніваюся, що процесор буде вузьким місцем, враховуючи досить щільні дані.
JahKnows

3

Спочатку я посилаюся на кілька цитат із подібних питань:

Що стосується матричних операцій, ви не думаєте двічі, завжди вибираєте GPU. джерело

Паралельна архітектура в GPU добре пристосована для векторних та матричних операцій. джерело

Тож якщо ви прочитаєте ці запитання, то побачите, що вони радять використовувати GPU незалежно від випадку; це завжди забезпечить певне вдосконалення.

Причина, по якій ви могли прочитати, що «малі» мережі повинні навчатися з процесором, полягає в тому, що впровадження навчання GPU лише для невеликої мережі може зайняти більше часу, ніж просто навчання з процесором - це не означає, що GPU буде повільнішим.

100-прихована одинична мережа така собі невелика , я б назвав її маленькою мережею відносно великих глибоких мереж там. Поточні архітектури (здебільшого) мають більше синапсів, що передаються вперед мережами подачі, тому 100-приховані одиниці RNN "більше", ніж 100-прихована одиниця FFN.


Чи не правда, що якщо у вас MLP з одним прихованим шаром у 100 одиниць, у вас однакова кількість параметрів, що і у стандартної RNN зі 100 прихованими одиницями через розподіл ваги? У ньому більше "синапсів" - більше "активацій" - але однакова кількість параметрів, правда?
StatsSorceress

я не знайомий з терміном обміну вагою. У нього стільки ж активацій, але більше з'єднань, так більше параметрів ...
Thomas W

Розподіл ваги означає, що матриця ваги від одного прихованого шару в RNN до наступного прихованого шару однакова; це та сама «U» матриця, що повторюється через час. Також ваги від вхідного до прихованого шару однакові протягом часу.
StatsSorceress

@StatsSorceress Я не знайомий з роботою з матрицями. Так, матриця ваги від прихованого шару до наступного однакова. Однак загалом є більше з'єднань (тому що шар також може бути підключений до попереднього шару). Я не впевнений, як це можна пояснити, але RNN завжди матиме більше параметрів, оскільки є більше з'єднаних шарів ..
Thomas W

Так, я розумію, що фізично більше параметрів, але багато з цих параметрів приймають однакове значення, а це означає, що ефективна кількість параметрів у MLP та RNN з однаковою кількістю вхідних розмірів і однаковою кількістю прихованих розмірів буде те саме.
StatsSorceress
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.