Що купувати для глибокого навчання: особистий досвід і поради використання GPU

Alex Alex 26 жовтня 2020
Що купувати для глибокого навчання: особистий досвід і поради використання GPU

Переклад статті Тіма Деттмерса, кандидата наук з Вашингтонського університету, фахівця по глибокому навчанню і обробці природної мови "Which GPU(s) to Get for Deep Learning: My Experience and Advice for Using GPUs in Deep Learning"

Глибоке навчання (ГН) - область з підвищеними запитами до обчислювальних потужностей, тому ваш вибір GPU фундаментально визначить ваш досвід в цій області. Але які властивості важливо врахувати, якщо ви купуєте новий GPU? Пам'ять, ядра, тензорні ядра? Як зробити кращий вибір по співвідношенню ціни і якості? У даній статті я детально розберу всі ці питання, поширені помилки, дам вам інтуїтивне уявлення про GPU а також кілька порад, які допоможуть вам зробити правильний вибір.

Стаття написана так, щоб дати вам кілька різних рівнів розуміння GPU, в т.ч. нової серії Ampere від NVIDIA. У вас є вибір:

  1. Якщо вам не цікаві деталі роботи GPU, що саме робить GPU швидким, чого унікального є в нових GPU серії NVIDIA RTX 30 Ampere - можете пропустити початок статті, аж до графіків за швидкодією і швидкодії на $1 вартості, а також розділу рекомендацій. Це ядро ​​даної статті з найціннішим вмістом.
  2. Якщо вас цікавлять конкретні питання, то найчастіші з них я висвітлив в останній частині статті.
  3. Якщо вам потрібно глибоке розуміння того, як працюють GPU і тензорні ядра, найкраще буде прочитати статтю від початку і до кінця. Залежно від ваших знань з конкретних предметів ви можете пропустити одну-дві глави.

Кожна секція передує невеликим резюме, яке допоможе вам вирішити, читати її цілком чи ні.

Зміст

Огляд
Як працюють GPU?
Найважливіші характеристики GPU, що впливають на швидкість обробки
Тензорні ядра
Перемноження матриць без тензорних ядер
Перемноження матриць з тензорними ядрами
Пропускна здатність пам'яті
Спільна пам'ять / Кеш L1 / Регістри
Оцінка ефективності Ampere в ГН
Теоретичні оцінки швидкості Ampere
Практичні оцінки швидкості Ampere
Можливі неточності оцінок
Що ще слід врахувати у випадку з Ampere / RTX 30
Розріджене навчання
Обчислення з низькою точністю
Новий дизайн вентилятора і проблеми з тепловідводом
Карти на три слота та проблеми живлення
Ефективність GPU при глибокому навчанні
Швидкість глибокого навчання GPU в перерахунку на вартість
Рекомендації по вибору GPU
Коли мені знадобиться більше 11 ГБ пам'яті?
Коли можна обійтися пам'яттю менше 11 ГБ?
Загальні рекомендації
Рекомендації для GPU-кластерів
Які GPU краще не купувати
Коли краще не купувати нових GPU?
Відповіді на питання і помилки
Чи потрібна мені PCIe 4.0?
Чи потрібні мені лінії PCIe 8x / 16x?
Як впихнути чотири RTX 3090, якщо кожна з них займає по 3 слота PCIe?
Як охолоджувати 4 RTX 3090 або 4 RTX 3080?
Чи можна використовувати GPU кількох різних типів?
Що таке NVLink, і чи потрібно воно мені?
У мене немає грошей навіть на найдешевші ваші рекомендації. Що робити?
Що потрібно для паралелізації проекту між двома машинами?
Чи підходять алгоритми множення розріджених матриць для будь-яких розріджених матриць?
Чи потрібен мені процесор від Intel для роботи з декількома GPU?
Чи має значення для охолодження форма корпусу?
Чи наздоженуть AMD GPU + ROCm коли-небудь NVIDIA GPU + CUDA?
Коли краще використовувати хмарні сервіси, а коли - спеціальний комп'ютер з GPU?
Поради для тих, кому ліньки читати

Огляд

Дана стаття структурована таким чином. Спочатку я пояснюю, що робить GPU швидким. Я опишу різницю між процесорами і GPU, тензорні ядра, пропускну здатність пам'яті, ієрархію пам'яті GPU, і як це все пов'язано з швидкодією в задачах ГН. Ці пояснення, можливо, допоможуть вам краще зрозуміти, які параметри GPU вам потрібні. Потім я дам теоретичні оцінки швидкодії GPU і їх відповідність з деякими тестами на швидкість від NVIDIA, щоб отримати надійні дані по швидкодії без упередженості. Я опишу унікальні особливості GPU серії NVIDIA RTX 30 Ampere, які варто розглянути при покупці. Потім я дам рекомендації по GPU для варіантів з 1-2 чіпами, 4, 8, і GPU-кластерів. Потім піде розділ відповідей на найчастіші запитання, які мені задавали в твіттері.

Як працюють GPU?

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

Це загальне пояснення, добре розкриває питання про те, чому для ГН GPU підходять краще, ніж процесори. Якщо ми вивчимо деталі, ми зможемо зрозуміти, чим GPU відрізняються один від одного.

Найважливіші характеристики GPU, що впливають на швидкість обробки

Цей розділ може вам допомогти краще інтуїтивно розуміти як мислити на тему швидкодії в області ГН. Це розуміння допоможе вам оцінювати майбутні GPU самостійно.

Тензорні ядра

Резюме:

  • Тензорні ядра зменшують кількість тактів, необхідних для підрахунку множень і додавань в 16 разів - в моєму прикладі для матриці 32×32 зі 128 до 8 тактів.
  • Тензорні ядра зменшують залежність від повторюваного доступу в загальну пам'ять, економлячи такти доступу в пам'ять.
  • Тензорні ядра працюють так швидко, що обчислення перестають бути вузьким місцем. Єдиним вузьким місцем залишається передача їм даних.

Сьогодні існує настільки багато недорогих GPU, що майже кожен може дозволити собі GPU з тензорними ядрами. Тому я завжди рекомендую GPU з тензорними ядрами. Корисно розібратися в принципах їх роботи, щоб оцінити важливість цих обчислювальних модулів, що спеціалізуються на перемножуванні матриць. На простому прикладі перемноження матриць A × B = C, де розмір всіх матриць дорівнює 32×32, я покажу вам, як виглядає перемноження з тензорними ядрами і без них.

Щоб розібратися в цьому, спочатку вам потрібно зрозуміти концепцію тактів. Якщо процесор працює з частотою 1 ГГц, він проробляє 109 тактів в секунду. Кожен такт - це можливість для обчислень. Але здебільшого операції йдуть довше, ніж один такт. Виходить конвеєру - щоб почати виконання однієї операції, потрібно спочатку почекати стільки тактів, скільки потрібно на виконання попередньої операції. Це також називається затримкою операції.

Ось деякі важливі інтервали, або затримки операції в тактах:

  • Доступ до глобальної пам'яті до 48 Гб: ~200 тактів.
  • Доступ до загальної пам'яті (до 164 КБ на потоковий мультипроцесор): ~20 тактів.
  • Поєднане множення-складання (СВР): 4 такти.
  • Перемноження матриць в тензорних ядрах: 1 такт.

Також вам потрібно знати, що найменша одиниця ниток в GPU - пакет з 32 ниток - називається варп [warp]. Варпи зазвичай працюють синхронно - всім ниткам всередині варпа потрібно дочекатися один одного. Всі операції в пам'яті GPU оптимізовані під варпи. Наприклад, завантаження з глобальної пам'яті йде по 32×4 байта - по 32 числа з плаваючою комою, по одному такому числу на кожну нитку в варпа. У потоковому мультипроцесорі (еквівалент ядра процесора для GPU) може бути до 32 варпа = 1024 нитки. Ресурси мультипроцесора діляться між усіма активними варпами. Тому іноді нам потрібно, щоб працювало менше варпів, щоб на один варп доводилося більше регістрів, спільної пам'яті і ресурсів тензорних ядер.

В обох прикладах припустимо, що у нас є однакові обчислювальні ресурси. У цьому невеликому прикладі перемноження матриць 32×32 ми використовуємо 8 мультипроцесорів (~10% від RTX 3090) і по 8 варпів на мультипроцесорі.

Перемноження матриць без тензорних ядер

Якщо нам потрібно перемножити матриці A × B = C, кожна з яких має розмір 32×32, тоді нам потрібно завантажити дані з пам'яті, до якої ми постійно звертаємося, в загальну пам'ять, оскільки затримки доступу до неї приблизно в 10 разів менше (НЕ 200 тактів, а 20 тактів). Блок пам'яті в загальній пам'яті часто називають плиткою пам'яті [memory tile], або просто плиткою. Завантаження двох 32×32 чисел з плаваючою комою в плитку загальної пам'яті можна провести паралельно, використовуючи 2×32 варпа. У нас є 8 мультипроцесорів по 8 варп кожен, тому завдяки паралелізації нам потрібно провести одне послідовне завантаження з глобальної в загальну пам'ять, на що піде 200 тактів.

Для множення матриць нам потрібно завантажити вектор з 32 чисел із загальної пам'яті А і загальної пам'яті В, і провести множення і накопичення (multiply-and-accumulate), а потім зберегти вихід в регістрах С. Ми розділяємо цю роботу так, щоб кожен мультипроцесор займався 8-ми скалярними добутками (32×32) для обчислення 8 вихідних даних для С. Чому їх рівно 8 (в старих алгоритмах - 4), це вже чисто технічна особливість. Щоб розібратися з цим, рекомендую прочитати статтю Скотта Грея. Це означає, що у нас пройде 8 доступів до загальної пам'яті вартістю в 20 тактів кожен, і 8 операцій множення і накопичення (32 паралельних), вартістю 4 такти кожна. В сумі вартість вийде: 200 тактів (глобальна пам'ять) + 8 * 20 тактів (загальна пам'ять) + 8 * 4 такту (СВР) = 392 такту

Тепер подивимося на цю вартість для тензорних ядер.

Перемноження матриць з тензорними ядрами

За допомогою тензорних ядер можна перемножити матриці 4×4 за один цикл. Для цього нам потрібно скопіювати пам'ять в тензорні ядра. Як і вище, нам потрібно прочитати дані з глобальної пам'яті (200 тактів) і зберегти їх в загальній. Для множення матриць 32×32 нам потрібно зробити 8 × 8 = 64 операцій в тензорних ядрах. В одному мультипроцесорі знаходиться 8 тензорних ядер. З 8 мультіпроцесорами у нас буде 64 тензорних ядра - якраз стільки, скільки треба! Ми можемо передати дані із загальної пам'яті в тензорні ядра за 1 передачу (20 тактів), а потім провести всі ці 64 операції паралельно (1 такт). Це означає, що загальна вартість перемноження матриць в тензорних ядрах буде: 200 тактів (глобальна пам'ять) + 20 тактів (загальна пам'ять) + 1 такт (тензорні ядра) = 221 такт

Таким чином, використовуючи тензорні ядра, ми значно зменшуємо вартість перемноження матриць, з 392 до 221 такту. У нашому спрощеному прикладі тензорні ядра зменшили вартість як доступу до спільної пам'яті, так і операцій множення і накопичення.

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

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

Пропускна здатність пам'яті

У попередньому розділі ми побачили, наскільки швидкі тензорні ядра. Настільки швидкі, що більшу частину часу вони простоюють, чекаючи, поки до них надійдуть дані з глобальної пам'яті. Наприклад, під час навчання за проектом BERT Large, де використовувалися дуже великі матриці - чим більше, тим для тензорних ядер краще - утилізація тензорних ядер в TFLOPS склала близько 30%, що означає, що 70% часу тензорні ядра простоювали.

Це означає, що при порівнянні двох GPU з тензорними ядрами одним з кращих індикаторів швидкодії кожного з них буде служити пропускна здатність пам'яті. Наприклад, у A100 GPU пропускна здатність становить 1,555 ГБ/с, а у V100 - 900 ГБ/с. Найпростіший підрахунок говорить, що A100 буде швидше V100 в 1555/900 = 1,73 рази.

Спільна пам'ять / Кеш L1 / Регістри

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

Для множення матриць ми користуємося ієрархією пам'яті, що йде від повільної глобальної пам'яті до швидкої локальної загальної пам'яті, і потім до надшвидких регістрів. Однак чим швидша пам'ять, тим її менше. Тому нам потрібно ділити матриці на менші, а потім виконувати множення цих менших плиток в місцевій загальній пам'яті. Тоді воно буде відбуватися швидко і ближче до потокових мультипроцесорів (ПМ) - еквіваленту ядра процесора. Тензорні ядра дозволяють нам зробити ще один крок: ми беремо всі плитки і завантажуємо їх частину в тензорні ядра. Спільна пам'ять обробляє матричні плитки в 10-50 разів швидше, ніж глобальна пам'ять GPU, а регістри тензорних ядер обробляють її в 200 разів швидше, ніж глобальна пам'ять GPU.

Збільшення розміру плиток дозволяє нам повторно використовувати більше пам'яті. Детально я писав про це в моїй статті TPU vs GPU. У TPU на кожне тензорне ядро виділено по дуже, дуже великий плитці. TPU можуть повторно використовувати набагато більше пам'яті з кожною новою передачею даних з глобальної пам'яті, через що вони трохи ефективніше справляються з перемножением матриць в порівнянні з GPU.

Розміри плитки визначаються обсягами пам'яті на кожен з ПМ - еквівалент ядра процесора на GPU. Залежно від архітектур ці обсяги становлять:

  • Volta: 96 кБ загальної пам'яті / 32 кБ L1
  • Turing: 64 кБ загальної пам'яті / 32 кБ L1
  • Ampere: 164 кБ загальної пам'яті / 32 кБ L1

Видно, що у Ampere спільної пам'яті набагато більше, що дозволяє використовувати плитки більшого розміру, що зменшує кількість звернень до глобальної пам'яті. Тому Ampere ефективніше користується пропускною спроможністю пам'яті GPU. Це збільшує швидкодію на 2-5%. Особливо збільшення помітно на величезних матрицях.

У тензорних ядер Ampere є ще одна перевага - обсяг загальних для декількох ниток даних у них більше. Це зменшує кількість звернень до регістрів. Обсяг регістрів обмежений 64 до на ПМ або 255 на нитку. Якщо порівняти з Volta, тензорні ядра Ampere використовують в 3 рази менше регістрів, завдяки чому на кожну плитку в загальній пам'яті є більше активних тензорних ядер. Інакше кажучи, ми можемо завантажити в 3 рази більше тензорних ядер тією ж кількістю регістрів. Однак оскільки пропускна здатність залишається вузьким місцем, збільшення TFLOPS на практиці буде мізерним, в порівнянні з теоретичним. Нові тензорні ядра поліпшили швидкодію приблизно на 1-3%.

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

Оцінка ефективності Ampere в ГН

Резюме:

  • Теоретичні оцінки на основі пропускної здатності пам'яті і поліпшеної ієрархії пам'яті у Ampere GPU пророкують прискорення в 1,78 - 1,87 разів.
  • NVIDIA опублікувала дані по вимірах швидкості для Tesla A100 і V100 GPU. Вони більше маркетингові, але на їх основі можна побудувати неупереджену модель.
  • Неупереджена модель говорить про те, що в порівнянні з V100 на Tesla A100 в 1,7 разів швидше на обробці природної мови і в 1,45 разів швидше для комп'ютерного зору.

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

Теоретичні оцінки швидкості Ampere

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

Пропускна здатність Tesla A100 GPU у порівнянні з Tesla V100 збільшується в 1555/900 = 1,73 раз. Також розумно очікувати збільшення швидкості на 2-5% через більшу спільну пам'ятт, і на 1-3% через поліпшення тензорних ядер. Виходить, що прискорення повинно скласти від 1,78 до 1,87 рази.

Практичні оцінки швидкості Ampere

Припустимо, у нас є оцінка одного GPU для такої архітектури, як Ampere, Turing або Volta. Легко екстраполювати ці результати на інші GPU тої ж архітектури або серії. На щастя, NVIDIA вже провела тести порівняння A100 і V100 на різних завданнях, пов'язаних з комп'ютерним зором і розумінням природної мови. На жаль, NVIDIA зробила все можливе, щоб ці числа не можна було порівнювати безпосередньо - в тестах використовували різні розміри пакетів даних і різну кількість GPU, щоб A100 не могла виграти. Так що, в якомусь сенсі, отримані показники швидкодії частково чесні, частково рекламні. В цілому можна стверджувати, що збільшення розміру пакетів даних обгрунтовано, оскільки у A100 більше пам'яті - однак, щоб отримати неупереджені оцінки, можна масштабувати результати вимірювань V100 і A100 двома способами: враховувати різницю в розмірі пакета даних, або враховувати різницю в кількості GPU - 1 проти 8. Нам пощастило, і ми можемо знайти подібні оцінки для обох випадків в представлених NVIDIA даних.

Подвоєння розміру пакета збільшує пропускну здатність на 13,6% в зображеннях в секунду (для згортальних нейромереж). Я виміряв швидкість того ж завдання з архітектурою Transformer на моєму RTX Titan, і, як не дивно, отримав такий же результат - 13,5%. Судячи з усього, це надійна оцінка.

Збільшуючи паралізацію мереж та збільшуючи кількість GPU, ми втрачаємо в швидкодії через накладні витрати, пов'язані з мережами. Але система A100 8x GPU краще працює з мережами (NVLink 3.0) в порівнянні з V100 8x GPU (NVLink 2.0) - і це ще один заплутуючий фактор. Якщо подивитися на дані від NVIDIA, можна побачити, що для обробки згорткових нейромереж у системи з 8-ма A100 накладні витрати на 5% нижче, ніж у системи з 8-ма V10000. Це означає, що якщо перехід від 1-го A10000 до 8-и A10000 дає вам прискорення, припустимо, в 7,0 раз, то перехід від 1-го V10000 до 8-и V10000 дає вам прискорення тільки в 6,67 раз. Для трансформерів ця цифра становить 7%.

Використовуючи цю інформацію, ми можемо оцінити прискорення деяких певних архітектур ГН безпосередньо на основі наданих NVIDIA даних. Tesla A100 має такі переваги в швидкості в порівнянні з Tesla V100:

  • SE-ResNeXt101: 1,43 раз.
  • Masked-R-CNN: 1,47 раз.
  • Transformer (12 шарів, машинний переклад, WMT14 en-de): 1,70 раз.

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

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

Можливі неточності оцінок

Вище дано порівняльні оцінки A100 і V100. У минулому NVIDIA потайки погіршила роботу «ігрових» RTX GPU: зменшила утилізацію тензорних ядер, додала ігрові вентилятори для охолодження, заборонила передачу даних між GPU. Можливо, що в серії RT 30 також внесли невідомі погіршення в порівнянні з Ampere A100.

Що ще слід врахувати у випадку з Ampere / RTX 30

Резюме:

  • Ampere дозволяє проводити навчання мереж на основі розріджених матриць, що прискорює процес навчання максимум в два рази.
  • Розріджене навчання мереж до цих пір рідко використовується, проте завдяки йому Ampere не скоро застаріє.
  • У Ampere є нові типи даних з малою точністю, завдяки чому використовувати малу точність набагато простіше, проте це не обов'язково дасть приріст в швидкості в порівнянні з попередніми GPU.
  • Новий дизайн вентиляторів хороший, якщо між GPU у вас є вільне місце - проте незрозуміло, чи ефективно будуть охолоджуватися GPU якщо вони стоять впритул.
  • 3-слотовий дизайн RTX 3090 буде проблемою для збірок по 4 GPU. Можливі рішення - використовувати 2-слотові варіанти або розширювачі для PCIe.
  • Чотирьом RTX 3090 буде потрібно більше живлення, ніж може запропонувати будь-який стандартний блок живлення на ринку.

У нових NVIDIA Ampere RTX 30 є додаткові переваги перед NVIDIA Turing RTX 20 - розріджене навчання і поліпшена обробка даних нейромережею. Решта властивостей, типу нових типів даних, можна вважати простим підвищенням зручності - вони прискорюють роботу так само, як і серія Turing, не вимагаючи при цьому додаткового програмування.

Навчання розрідженої мережі

Ampere дозволяє з великою швидкістю  автоматично перемножувати розріджені матриці. Це працює так - ви берете матрицю, ріжете її на шматочки по 4 елементи. Тепер уявіть що 2   елементи з цих чотирьох нульові. Це призводить до прискорення роботи в 2 рази, оскільки вимоги до пропускної спроможності під час перемноження матриць в два рази зменшуються.Що купувати для глибокого навчання: особистий досвід і поради використання GPU

У своїх дослідженнях я працював з навчанням розріджених мереж. Роботу критикували, зокрема, за те, що я «зменшую необхідні для мережі FLOPS, але не збільшую через це швидкість, тому що GPU не вміють швидко перемножувати розріджені матриці». Ну що ж - підтримка перемноження розріджених матриць з'явилася в тензорних ядрах, і мій алгоритм, або будь-який інший алгоритм (123, 4), що працює з розрідженим матрицями, тепер реально може працювати під час навчання в два рази швидше.Хоча ця властивість поки вважається експериментальною, а навчання розріджених мереж не застосовується повсюдно, якщо у вашого GPU є підтримка цієї технології, то ви готові до майбутнього розрідженого навчання.

Обчислення з низькою точністю

Я вже демонстрував , як нові типи даних можуть покращувати стабільність зворотного поширення з низькою точністю в моїй роботі. Поки що проблемою стабільного зворотного поширення з 16-бітними числами з плаваючою комою є те, що звичайні типи даних підтримують тільки проміжок [-65,504, 65,504]. Якщо ваш градієнт вийде за цей проміжок, то вибухне, видавши значення NaN. Для запобігання цьому ми зазвичай масштабуємо значення, множачи їх на невелике число перед зворотним поширенням, щоб уникнути вибуху градієнта.

Формат Brain Float 16 (BF16) використовує більше бітів для експоненти, завдяки чому проміжок можливих значень виходить таким же, як у FP32: [3 × 1038, 3 × 1038]. У BF16 менша точність, тобто менше значущих розрядів, але точність градієнта при навчанні мереж не так вже й важлива. Тому BF16 гарантує, що вам вже не потрібно буде займатися масштабуванням або хвилюватися про вибух градієнта. З цим форматом ми повинні побачити збільшення стабільності навчання за рахунок невеликої втрати точності.

Що це означає для вас: з точністю BF16 навчання може бути більш стабільним, ніж з точністю FP16, а швидкість у них однакова. З точністю TF32 ви отримаєте стабільність майже як у FP32, а прискорення - майже як у FP16. Плюс в тому, що при використанні цих типів даних можна змінювати FP32 на TF32, а FP16 на BF16, нічого не змінюючи в коді!

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

Новий дизайн вентилятора і проблеми з тепловідводом

За новою схемою вентиляторів для серії RTX 30 є вентилятор який видуває повітря  і вентилятор який втягує  повітря. Сам дизайн продумано геніально, і буде дуже ефективно працювати при наявності вільного простору між GPU. Однак незрозуміло, як поведуть себе GPU, якщо їх понаставити один до іншого. Вентилятор що  видуває  зможе видувати повітря геть від інших GPU, але неможливо сказати, як це буде працювати, оскільки його форма відрізняється від тієї, що була раніше. Якщо ви плануєте поставити 1 або 2 GPU туди, де є 4 слота, тоді у вас не повинно бути проблем. Але якщо ви захочете використовувати 3-4 RTX 30 GPU поряд, я б спочатку почекав звітів про температурний режим, а потім вже вирішив, чи знадобляться ще вентилятори, розширювачі PCIe або інші рішення.

У будь-якому випадку, вирішити проблему з тепловідводом може допомогти водяне охолодження. Багато виробників пропонують такі рішення для карток RTX 3080 / RTX 3090, і тоді вони не будуть грітися, навіть якщо їх буде 4. Однак не купуйте готових рішень для GPU, якщо ви захочете зібрати комп'ютер з 4 GPU, оскільки в більшості корпусів буде дуже важко розподілити радіатори.

Ще одне рішення проблеми охолодження - купити розширювачі PCIe і розподілити карти всередині корпусу. Це дуже ефективно - я і інші аспіранти з Ванінгтонского університету з великим успіхом використовуємо цей варіант. Виглядає не дуже акуратно, зате GPU не гріють! Також цей варіант допоможе у випадку, якщо вам не вистачає простору для розміщення GPU. Якщо у вашому корпусі є місце, можна, допустимо, купити стандартні RTX 3090 на три слота, і розподілити їх за допомогою розширювачів по всьому корпусу. Таким чином можна вирішити одночасно проблему з місцем і охолодженням 4-х RTX 3090.

Що купувати для глибокого навчання: особистий досвід і поради використання GPU
Рис. 1: 4 GPU з розширювачами PCIe

Карти на 3 слоти і проблеми живлення

RTX 3090 займає 3 слота, тому їх неможливо використовувати 4 штуки з вентиляторами від NVIDIA за замовчуванням. І це не дивно, оскільки вона вимагає 350 Вт TDP. RTX 3080 лише трохи поступається їй, вимагаючи 320 Вт TDP, і охолоджувати систему з чотирма RTX 3080 буде дуже складно.

Також складно живити систему з 4-х карт по 350 Вт = Потужність 1400 Вт. Блоки живлення (БП) на 1600 Вт бувають, проте 200 Вт на процесор і материнку може не вистачити. Максимальне енергоспоживання відбувається тільки при повному завантаженні, і під час ГН процесор зазвичай слабо навантажений. Тому БП на 1600 Вт може підійти для 4-х RTX 3080, але для 4-х RTX 3090 краще пошукати БП на 1700 Вт і більше. На сьогодні на ринку таких БП не спостерігається. Можуть підійти серверні БП або спеціальні блоки для крипто майнерів, але у них може виявитися незвичайний форм-фактор.

Ефективність GPU при глибокому навчанні

До наступного тесту увійшли не тільки порівняння Tesla A100 і Tesla V100 - я побудував модель яка вкладається в ці дані і чотири різних тести, де випробовували Titan V, Titan RTX, RTX 2080 Ti і RTX 2080 (123, 4).

Крім того я масштабував результати тестів таких карт середнього рівня, як RTX 2070, RTX 2060 або Quadro RTX, шляхом інтерполяції точок даних тестів. Зазвичай в архітектурі GPU такі дані масштабуються лінійно по відношенню до перемножування матриць і пропускної здатності пам'яті.Я збирав тільки дані тестів з навчання FP16 зі змішаною точністю, оскільки не бачу причин, за якими потрібно було б використовувати навчання з числами FP32.

Що купувати для глибокого навчання: особистий досвід і поради використання GPU
Швидкодія, нормалізована за результатами RTX 2080 Ti

У порівнянні з RTX 2080 Ti, RTX 3090 працює з згортковими мережами в 1,57 разів швидше, а з трансформерами - в 1,5 разів швидше, при цьому коштує на 15% дорожче. Виходить, що Ampere RTX 30 демонструє значне поліпшення з часів серії Turing RTX 20.

Швидкість глибокого навчання GPU в перерахунку на вартість

Який GPU буде найвигіднішим вкладенням грошей? Все залежить від загальної вартості системи. Якщо вона дорога, має сенс вкластися в дорощі GPU.

Нижче наводжу дані по трьом збіркам на PCIe 3.0, які я використовую в якості базових орієнтирів вартості систем з 2 або 4 GPU. Я беру цю базову вартість і додаю до неї вартість GPU. Останню я вираховуюю як середню ціну між пропозиціями з Amazon і eBay. Для нових Ampere я використовую тільки одну ціну. У сукупності з наведеними вище даними по швидкодії це дає значення швидкодії в перерахунку на долар. Для системи з 8 GPU за основу я беру Supermicro barebone - промисловий стандарт для RTX-серверів. Наведені графіки не враховують вимоги до пам'яті. Вам спочатку потрібно задуматися про те, яка вам потрібна пам'ять, а потім пошукати найкращі варіанти на графіках. 

Ось деякі приблизні вказівки щодо пам’яті:

  • Використання попередньо навчених трансформерів, або навчання невеликого трансформера з нуля> = 11 ГБ.
  • Навчання великого трансформера або згорткової мережі в дослідженні або продакшені: >= 24 ГБ.
  • Прототипування нейромереж (трансформера або згорткової мережі) >= 10 ГБ.
  • Участь в конкурсах Kaggle > = 8 ГБ.
  • Комп'ютерний зір >= 10 ГБ.

Що купувати для глибокого навчання: особистий досвід і поради використання GPUНормалізована швидкодія в перерахунку на долари по відношенню до RTX 3080.Що купувати для глибокого навчання: особистий досвід і поради використання GPU
Нормалізована швидкодія в перерахунку на долари по відношенню до RTX 3080.Що купувати для глибокого навчання: особистий досвід і поради використання GPU
Нормалізована швидкодія в перерахунку на долари по відношенню до RTX 3080.

Рекомендації по вибору GPU

Ще раз хочеться підкреслити: при виборі GPU спочатку переконайтеся, що у нього вистачає пам'яті для ваших завдань. Кроки при виборі GPU повинні бути наступні:

  • Зрозуміти, чого я хочу досягти за допомогою GPU: участь в змаганнях Kaggle, глибоке навчання, дослідження дрібних проєктів, дослідження в області комп'ютерного зору або обробки природної мови, в якихось інших галузях знань.
  • Визначити, скільки пам'яті потрібно для моїх цілей.
  • За допомогою наведених вище графіків по співвідношенню швидкодії до долара вибрати відповідний під вимоги GPU, що має потрібний обсяг пам'яті.
  • Чи є у вибраного GPU якісь каверзи? Наприклад, якщо це RTX 3090, чи влізе він в мій комп'ютер? Чи вистачить у мого БП потужності для підтримки цього GPU? Чи буде проблемою тепловідвід, або чи зможу я  ефективно охолоджувати GPU?

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

Коли мені знадобиться більше 11 ГБ пам'яті?

Я вже згадував, що при роботі з трансформерами вам буде потрібно не менше 11 ГБ, а при проведенні досліджень в цій області - не менше 24 ГБ. У більшості  попередньо навчених моделей дуже великі вимоги до пам'яті, і їх навчали на GPU класом не нижче RTX 2080 Ti з об'ємом пам'яті не менше 11 ГБ. Тому, якщо у вас менше 11 ГБ пам'яті, запуск деяких моделей може стати важкою або зовсім неможливим справою.

Інші області, що вимагають великих обсягів пам'яті - обробка медичних знімків, передові моделі комп'ютерного зору, і все з зображеннями великого розміру.

В цілому, якщо ви прагнете розробити моделі, здатні випередити конкурентів - будь то дослідження, промислове застосування або змагання Kaggle - додаткова пам'ять, можливо, дасть вам конкурентну перевагу.

Коли можна обійтися пам'яттю менше 11 ГБ?

Карти RTX 3070 і RTX 3080 - потужні, але пам'яті їм не вистачає. Однак для багатьох завдань такої кількості пам'яті може і не знадобитися.

RTX 3070 ідеально підходить для глибокого навчання. Базові навички навчання мереж більшості архітектур можна придбати, зменшуючи масштаб мереж або використовуючи зображення меншого розміру. Якби мені довелося вчитися ГН, я б вибрав собі RTX 3070, або навіть декілька штук, якби міг собі їх дозволити.

RTX 3080 на сьогодні - найефективніша карта по відношенню ціни до швидкодії, і тому ідеально підходить для прототипування. Для прототипування потрібні великі обсяги пам'яті, а пам'ять коштує недорого. Під прототипуванням я розумію прототипування в будь-якій області - дослідження, змагання Kaggle, проба ідей для стартапу, експерименти з дослідним кодом. Для всіх подібних застосувань RTX 3080 підійде найкраще.

Якби я, припустимо, керував дослідницькою лабораторією або стартапом, 66-80% всього бюджету я пустив би на машини RTX 3080, і 20-33% - на RTX 3090 з надійним водяним охолодженням. RTX 3080 ефективніша в перерахунку на вартість, і доступ до неї можна організувати через Slurm. Оскільки прототипуванням треба займатися в еджайл-режимі, його потрібно вести з моделями і наборами даних меншого розміру. І RTX 3080 ідеально для цього підходить. Коли учні/колеги створять відмінну модель-прототип, вони зможуть викочувати її на RTX 3090, масштабуючи до більших моделей.

Загальні рекомендації

В цілому моделі серії RTX 30 дуже потужні, і я  рекомендую саме їх. Врахуйте вимоги до пам'яті, як зазначено раніше, а також вимоги до живлення та охолодження. Якщо у вас між GPU буде вільний слот, з охолодженням проблем не буде. Інакше забезпечте карткам RTX 30 водяне охолодження, розширювачі PCIe або ефективні карти з вентиляторами.

В цілому я б рекомендував RTX 3090 всім, хто може собі її дозволити. Вона не тільки підійде вам зараз, але і залишиться дуже ефективною в наступні 3-7 років. Малоймовірно, що в найближчі три роки HBM-пам'ять сильно подешевшає, тому наступний GPU буде всього на 25% краще, ніж RTX 3090. Років через 5-7, напевно, ми побачимо дешеву HBM-пам'ять, після чого вам дійсно потрібно буде оновлювати парк.

Якщо ви збираєте систему з кількох RTX 3090, забезпечте їм достатнє охолодження та живлення.

Якщо у вас немає жорстких вимог до конкурентних переваг, я б порекомендував вам RTX 3080. Це ефективніше рішення в перерахунку на вартість, і воно забезпечить швидке навчання більшості мереж. Якщо ви застосуєте потрібні трюки з пам'яттю і не проти написання додаткового коду, тобто багато трюків, що дозволяють впихнути мережу на 24 ГБ в GPU з 10 ГБ.

RTX 3070 теж відмінна карта для глибокого навчання і прототипування, і вона на $200 дешевше, ніж RTX 3080. Якщо ви не можете дозволити собі RTX 3080, тоді ваш вибір - це RTX 3070.

Якщо ваш бюджет обмежений, і RTX 3070 для вас занадто дорога, то на eBay можна знайти використану RTX 2070 за ціною близько $260. Поки неясно, чи вийде RTX 3060, але якщо ваш бюджет невеликий, можливо, варто почекати її виходу. Якщо її ціноутворення буде відповідати RTX 2060 і GTX 1060, тоді вона повинна буде коштувати близько $250 $300, і видавати непогані результати.

Рекомендації для GPU-кластерів

Схема GPU-кластера сильно залежить від його використання. Для системи з 1024 GPU першорядним буде мережа, але якщо ви використовуєте не більше 32 GPU за раз, то вкладатися в побудову потужної мережі сенсу немає.

Взагалі, картки RTX заборонені в центрах обробки даних через ліцензійну угоду CUDA. Однак часто університети можуть стати винятком із цього правила. Якщо ви хочете отримати подібний дозвіл, варто зв'язатися з представником NVIDIA. Якщо вам можна використовувати карти RTX, то я б порекомендував стандартну систему Supermicro на 8 GPU RTX 3080 або RTX 3090 (якщо ви можете забезпечити їм охолодження). Невеликий набір з 8 вузлів A10000 гарантує ефективне використання моделей після прототипування, особливо якщо забезпечити охолодженням сервери на 8 RTX 3090 не виходить. В даному випадку я б порекомендував A10000 замість RTX 6000 / RTX 8000, оскільки A10000 досить ефективні в перерахунку на вартість, і не втратять актуальності так швидко.

Якщо вам потрібно навчати дуже великі мережі на кластері GPU (256 GPU і більше), я б порекомендував систему NVIDIA DGX SuperPOD з A10000. При масштабуванні +256 GPU мережа стає першорядною. Якщо ви хочете розширитися, і вийти за межі 256 GPU, вам знадобиться дуже оптимізована система, для якої стандартні рішення вже не підійдуть.

Особливо на масштабах +1024 GPU і більш єдиними конкурентоспроможними рішеннями на ринку залишаються Google TPU Pod і NVIDIA DGX SuperPod. На таких масштабах я б вважав за краще Google TPU Pod, оскільки їх спеціальна мережева інфраструктура виглядає краще, ніж NVIDIA DGX SuperPod - хоча в принципі, ці системи досить близькі. У прикладних програмах і ГН система з GPU буває більш гнучкою, ніж TPU, при цьому системи з TPU підтримують моделі більшого розміру і краще масштабуються. Тому у обох систем є свої переваги та недоліки.

Які GPU краще не купувати

Не рекомендую купувати по кілька RTX Founders Edition або RTX Titan, якщо тільки у вас немає розширювачів PCIe для вирішення проблеми з охолодженням. Вони просто розігріються і їх швидкість сильно впаде в порівнянні з тією, що вказана в графіках. Чотири RTX 2080 Ti Founders Edition швидко розігріються до 90° C, знизять тактову частоту і будуть працювати повільніше, ніж RTX 2070 з нормальним охолодженням.

Рекомендую купувати Tesla V100 або A100 тільки в крайніх випадках, оскільки їх заборонено використовувати в дата-центрах компаній. Або купувати їх, якщо вам потрібно навчати дуже великі мережі на величезних GPU-кластерах - їх співвідношення ціни і швидкодії не ідеальна.

Якщо ви можете дозволити собі щось краще, не беріть карти GTX 16-ї серії. У них немає тензорних ядер, тому швидкодія в ГН у них погана. Я б взяв замість них б/в RTX 2070 / RTX 2060 / RTX 2060 Super. Їх можна брати, якщо ваш бюджет дуже обмежений.

Коли краще не купувати нових GPU?

Якщо у вас вже є RTX 2080 Ti або краща, оновлюватися до RTX 3090 практично безглуздо. Ваші GPU і так хороша, а переваги в швидкості будуть незначними в порівнянні з новими проблемами з живлення і охолодженням - воно того не варто.

Єдина причина, по якій я захотів би оновитися з чотирьох RTX 2080 Ti до чотирьох RTX 3090 - якби я займався дослідженнями дуже великих трансформерів або інших мереж, сильно залежать від обчислювальних потужностей. Однак якщо у вас проблеми з пам'яттю, спочатку варто розглянути різні трюки, для того, щоб впихнути великі моделі в існуючу пам'ять.

Якщо у вас є одна або кілька RTX 2070, я б на вашому місці двічі подумав, перш ніж оновлюватися. Це досить непогані GPU. Можливо, буде мати сенс продати їх на eBay і купити RTX 3090, якщо вам не вистачає 8 ГБ - як і у випадку з багатьма іншими GPU. Якщо пам'яті не вистачає, оновлення назріває.

Відповіді на питання і помилки

Резюме:

  • PCIe-лінії і PCIe 4.0 не мають значення для систем з двома GPU. Для систем з 4-ма GPU - практично не мають.
  • Охолоджувати RTX 3090 і RTX 3080 буде важко. Використовуйте водяне охолодження або розширювачі PCIe.
  • NVLink потрібен тільки для GPU-кластерів.
  • В одному комп'ютері можна використовувати різні GPU (наприклад, GTX 1080 + RTX 2080 + RTX 3090), але ефективної паралелізації не вийде.
  • Для паралельної роботи більш ніж двох машин потрібно Infiniband і мережу на 50 Гбіт/с.
  • Процесори від AMD дешевше, ніж від Intel, і в останніх майже немає переваг.
  • Незважаючи на героїчні зусилля інженерів, AMD GPU + ROCm навряд чи зможуть конкурувати з NVIDIA через відсутність спільноти і еквівалента тензорних ядер в найближчі 1-2 роки.
  • Хмарні GPU вигідні, якщо використовувати їх не більше року. Після цього настільний варіант стає дешевшим.

Чи потрібна мені PCIe 4.0?

Зазвичай - ні. PCIe 4.0 відмінно підходить для GPU-кластера. Корисна, якщо у вас машина на 8 GPU. В інших випадках переваг у неї майже немає. Вона покращує паралелізацію і трохи швидше передає дані. Але передача даних не є вузьким місцем. У комп'ютерному зорі вузьким місцем може бути зберігання даних, але не передача даних по PCIe від GPU до GPU. Тому для більшості людей причин використовувати PCIe 4.0 немає. Вона, можливо, поліпшить паралелізацію чотирьох GPU на 1-7%.

Чи потрібні мені лінії PCIe 8x / 16x?

Як і у випадку з PCIe 4.0 - зазвичай ні. Лінії PCIe потрібні для паралелізації і швидкої передачі даних, що майже ніколи не є вузьким місцем. Якщо у вас 2 GPU, для них вистачить 4-х ліній. Для 4-х GPU я б вважав за краще 8 ліній на GPU, однак якщо ліній буде 4, це зменшить продуктивність всього на 5-10%.

Як впихнути чотири RTX 3090, якщо кожна з них займає по 3 слота PCIe?

Можна купити один з двох варіантів, розрахованих на один слот, або розподілити їх за допомогою розширювачів PCIe. Крім простору потрібно відразу ж задуматися про охолодження та живлення. Судячи з усього, найпростішим рішенням буде покупка 4-х RTX 3090 EVGA Hydro Copper зі спеціальною петлею водяного охолодження. EVGA багато років випускає версії карт з мідним водяним охолодженням, і якості їх GPU можна довіряти. Можливо, є і дешевші варіанти.

Розширювачі PCIe можуть вирішити проблеми з простором і охолодженням, проте в вашому корпусі повинно бути достатньо місця для всіх карт. І переконайтеся, що розширювачі досить довгі!

Як охолоджувати 4 RTX 3090 або 4 RTX 3080?

Див. Попередній розділ.

Чи можна використовувати GPU кількох різних типів?

Так, але ефективно розпаралелити роботу не вийде. Можу уявити систему, де працює 3 RTX 3070 + 1 RTX 3090. З іншого боку, паралелізація між чотирма RTX 3070 буде працювати дуже швидко, якщо ви впихнете на них свою модель. І ще одна причина, по якій вам може це знадобитися - використання старих GPU. Працювати це буде, але паралелізацяю буде неефективною, оскільки найшвидші GPU чекатимуть найповільніших GPU в точках синхронізації (зазвичай при оновленні градієнта).

Що таке NVLink, і чи потрібно воно мені?

Зазвичай NVLink вам не потрібен. Це високошвидкісний зв'язок між декількома GPU. Він потрібна, якщо у вас є кластер з 128 і більше GPU. В інших випадках у нього майже немає переваг перед стандартною передачею даних по PCIe.

У мене немає грошей навіть на найдешевші ваші рекомендації. Що робити?

Безумовно купувати б/в GPU. Відмінно спрацюють використані RTX 2070 ($400) і RTX 2060 ($300). Якщо не зможете їх собі дозволити, наступним найкращим варіантом будуть використані GTX 1070 ($220) або GTX 1070 Ti ($230). Якщо і це занадто дорого, знайдіть використані GTX 980 Ti (6GB $150) або GTX 1650 Super ($190). Якщо це теж дорого, вам краще користуватися хмарними сервісами. Вони зазвичай надають GPU з обмеженням за часом або потужності, після чого доведеться платити. Міняйте сервіси по колу, поки не зможете дозволити собі власний GPU.

Що потрібно для паралелізації проєкту між двома машинами?

Для прискорення роботи за допомогою паралелізації між двома машинами потрібні мережеві карти на 50 Гбіт/с або більше. Рекомендую поставити хоча б EDR Infiniband - тобто, мережеву карту зі швидкістю не менше 50 Гбіт/с. Дві EDR карти з кабелем на eBay обійдуться вам в $500.

У деяких випадках ви обійдетеся і Ethernet на 10 Гбіт/с, але це зазвичай спрацьовує тільки для певних типів нейромереж (певних згорткових мереж) або для певних алгоритмів (Microsoft DeepSpeed).

Чи підходять алгоритми множення розріджених матриць для будь-яких розріджених матриць?

Мабуть ні. Оскільки від матриці потрібно, щоб на кожні 4 елементи у неї було 2 нульових, розріджені матриці повинні бути добре структурованими. Ймовірно, можна трохи підправити алгоритм, обробляючи 4 значення в вигляді стислої репрезентації двох значень, але це буде означати, що точне множення розріджених матриць на Ampere буде недоступно.

Чи потрібен мені процесор від Intel для роботи з декількома GPU?

Я не рекомендую використовувати процесор від Intel, якщо тільки ви не навантажуєте процесор досить сильно в змаганнях Kaggle (де процесор завантажений підрахунками лінійної алгебри). І навіть для таких змагань процесори від AMD відмінно підходять. Процесори від AMD в середньому дешевші та кращі для ГН. Для збірки з 4-х GPU моїм однозначним вибором буде Threadripper. У нашому університеті ми зібрали десятки систем на таких процесорах, і всі вони працюють відмінно, без нарікань. Для систем з 8-ми GPU я б взяв той процесор, досвід використання якого є у вашого виробника. Надійність процесора і PCIe в системах з 8-ми карт важливіше, ніж просто швидкодія або ефективність в перерахунку на вартість.

Чи має значення для охолодження форма корпусу?

Ні. Зазвичай GPU прекрасно охолоджуються, якщо між GPU є хоча б невеликі проміжки. Різні види корпусів можуть дати вам різницю в 1-3° C, а різну відстань між картами - різницю в 10-30° C. Загалом, якщо між вашими картами є проміжки, з охолодженням проблем немає. Якщо проміжків немає, вам потрібні правильні вентилятори (видувний вентилятор) або інше рішення (водяне охолодження, розширювачі PCIe). У будь-якому випадку, вид корпусу і його вентилятори значення не мають.

Чи наздоженуть  AMD GPU + ROCm коли-небудь NVIDIA GPU + CUDA?

Не в найближчі декілька років. Проблем там три: тензорні ядра, ПЗ і спільнота.

Самі кристали GPU від AMD хороші: відмінна швидкодія на FP16, відмінна пропускна здатність пам'яті. Але відсутність тензорних ядер або їх еквівалента призводить до того, що їх швидкодія страждає в порівнянні з GPU від NVIDIA. А без реалізації тензорних ядер GPU від AMD ніколи не будуть конкурентоспроможними. З чуток, на 2020 й рік запланована якась картка для датацентрів з аналогом тензорних ядер, однак точних даних поки немає. Якщо у них буде тільки карта з еквівалентом тензорних ядер для серверів, це буде означати, що мало хто зможе дозволити собі GPU від AMD, що дасть NVIDIA конкурентну перевагу.

Припустимо, AMD представить в майбутньому залізо з чимось на зразок тензорних ядер. Тоді багато хто скаже: «Але програм, що працюють з GPU від AMD, немає! Як мені їх використовувати?» Це, в основному, помилкове уявлення. ПО для AMD, що працює з ROCm, вже непогано розвинене, а підтримка в PyTorch прекрасно організована. І хоча я не бачив багато звітів про роботу AMD GPU + PyTorch, всі функції ПО туди інтегровані. Судячи з усього, можна вибрати будь-яку мережу і запустити її на GPU від AMD. Тому в даній області AMD вже непогано розвинена, і ця проблема практично вирішена.

Однак, вирішивши проблеми з ПО і відсутністю тензорних ядер, AMD зіткнеться ще з однією: з відсутністю спільноти. Натрапивши на проблему з GPU від NVIDIA, ви можете пошукати рішення в Google і знайти його. Це викликає довіру до GPU від NVIDIA. З'являється інфраструктура, яка полегшує використання GPU від NVIDIA (будь-яка платформа для ГН працює, будь-яка наукова задача підтримується). Є купа хаків і трюків які сильно полегшують використання GPU від NVIDIA (наприклад, apex). Експертів і програмістів для GPU від NVIDIA можна знайти під кожним кущем, а ось експертів по AMD GPU я знаю набагато менше.

У плані спільноти, ситуація з AMD нагадує ситуацію Julia vs Python. У Julia великий потенціал, і багато справедливо вкажуть, що ця мова програмування краще підходить для наукових робіт. Однак Julia в порівнянні з Python використовується вкрай рідко. Просто  Python спільнота дуже велике. Навколо таких потужних пакетів, як Numpy, SciPy і Pandas, збирається купа народу. Ця ситуація нагадує ситуацію NVIDIA vs AMD.

Тому з великою ймовірністю AMD не зможе наздогнати NVIDIA, поки не створить еквівалент тензорних ядер і міцну спільноту, побудовану навколо ROCm. AMD завжди матиме свою частку ринку в особливих підгрупах (Майнінг криптовалют, дата-центри). Але в ГН NVIDIA, швидше за все, ще років зо два буде утримувати монополію.

Коли краще використовувати хмарні сервіси, а коли - спеціальний комп'ютер з GPU?

Просте правило: якщо ви розраховуєте займатися ГН довше року, дешевше купити комп'ютер з GPU. Інакше краще користуватися хмарними сервісами - якщо тільки у вас немає великого досвіду по хмарному програмування, і ви хочете скористатися перевагами масштабування кількості GPU за бажанням.

Точний переломний момент, в який хмарні GPU стають дорожче, ніж власний комп'ютер, сильно залежить від використовуваних сервісів. Це краще підраховувати самому. Нижче наводжу приблизний розрахунок для сервера AWS V100 з одним V100, і порівнюю його з вартістю настільного комп'ютера з одним RTX 3090, близького за швидкодією. Комп'ютер з RTX 3090 вартістю $2200. (2-GPU barebone + RTX 3090). Якщо ви в США, то додайте до цього $0,12 за кВт * год за електрику. Порівняємо це з $2,14 на годину за сервер в AWS.

При 15% утилізації в рік комп'ютер використовує(350 Вт (GPU) + 100 Вт (CPU)) * 0.15 (утилізація) * 24 години * 365 днів = 591 кВт * год на рік.

591 кВт * год на рік дають додаткові $71.

Переломний момент, коли комп'ютер і хмара порівнюються в ціні при 15% утилізації, настає десь на 300-й день ($2,311 проти $ 2,270): $2.14/г * 0.15 (утилізація) * 24 години * 300 днів = $ 2,311

Якщо ви розраховуєте, що ваші моделі ГН працюватимуть понад 300 днів, краще купити комп'ютер, ніж використовувати AWS.С

хожі розрахунки можна провести для будь-якого хмарного сервісу, щоб прийняти рішення про те, використовувати свій комп'ютер або хмару.

Поширені цифри по утилізації обчислювальних потужностей наступні:

  • Комп'ютер кандидата наук: <15%;
  • Кластер GPU на Slurm кандидата наук:> 35%;
  • Корпоративний дослідний кластер на Slurm:> 60%.

В цілому, відсоток утилізації нижче в тих областях, де важливіше думати про передові ідеї, ніж розробляти практичні рішення. У деяких областях відсоток утилізації менше (дослідження інтерпретується), а в інших - набагато вище (машинний переклад, моделювання мови). В цілому утилізацію особистих машин зазвичай завжди переоцінюють. Зазвичай більшість особистих систем утилізовані на 5-10%. Тому я настійно рекомендую дослідницьким групам і компаніям організовувати GPU-кластери на Slurm замість окремих настільних комп'ютерів.

Поради для тих, кому ліньки читати

Кращі GPU в загальному: RTX 3080 і RTX 3090.

Яких GPU варто уникати (вам як досліднику): карток Tesla, Quadro, Founders Edition, Titan RTX, Titan V, Titan XP.

Гарне співвідношення швидкодії до ціни, але дорога: RTX 3080.

Гарне співвідношення швидкодії до ціни, дешевше: RTX 3070, RTX 2060 Super.

У мене мало грошей: Купуйте використані карти. Ієрархія: RTX 2070 ($ 400), RTX 2060 ($ 300), GTX 1070 ($ 220), GTX 1070 Ti ($ 230), GTX 1650 Super ($ 190), GTX 980 Ti (6GB $ 150).

У мене майже немає грошей: багато стартапів рекламують свої хмарні послуги. Використовуйте безкоштовні кредити в хмарах, міняйте їх по колу, поки не зможете купити GPU.

Я беру участь в змаганнях Kaggle: RTX 3070.

Я намагаюся виграти в конкурентній боротьбі в області комп'ютерного зору, попереднього навчання або машинного перекладу: 4 штуки RTX 3090. Але почекайте, поки фахівці не підтвердять наявність збірок з хорошим охолодженням і достатнім живленням.

Я вивчаю обробку природної мови: якщо ви не працюєте з машинним перекладом, моделюванням мови або попереднім навчанням, RTX 3080 буде достатньо.

Я почав займатися ГН і серйозно цим захопився: почніть з RTX 3070. Якщо через 6-9 місяців не набридне, продайте і купіть чотири RTX 3080. В залежності від того, що виберете далі (стартап, Kaggle, дослідження, прикладне ГН), року через три продайте свої GPU, і купіть щось більш підходяще (RTX GPU наступного покоління).

Хочу спробувати ГН, але серйозних намірів немає: RTX 2060 Super буде прекрасним вибором, проте, можливо, доведеться заміни БП. Якщо у вас на материнській платі є слот PCIe x16, а БП видає близько 300 Вт, то прекрасним варіантом стане GTX 1050 Ti, оскільки не потребують інших вкладень.

GPU кластер для паралельного моделювання об'ємом менше 128 GPU: якщо вам дозволено купувати RTX для кластера: 66% 8x RTX 3080 і 33% 8x RTX 3090 (тільки при можливості добре охолоджувати збірку). Якщо охолодження не вистачає, купуйте 33% RTX 6000 GPU або 8x Tesla A100. Якщо не можете купувати RTX GPU, я б вибрав 8 вузлів A100 Supermicro або 8 вузлів RTX 6000.

GPU кластер для паралельного моделювання об'ємом понад 128 GPU: Задумайтесь про машини з 8-ма Tesla A100. Якщо вам потрібно більше 512 GPU, задумайтеся про систему DGX A100 SuperPOD.

Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Війти / Зареєструватися