Методи навчання великих нейронних мереж PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Методи навчання великих нейронних мереж

Методи навчання великих нейронних мереж

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

Паралелізм даних

Методи навчання великих нейронних мереж

Паралелізм трубопроводу

Методи навчання великих нейронних мереж

Тензорний паралелізм

Методи навчання великих нейронних мереж

Експертний паралелізм

Методи навчання великих нейронних мереж

Паралелізм даних

Методи навчання великих нейронних мереж

Паралелізм трубопроводу

Методи навчання великих нейронних мереж

Тензорний паралелізм

Методи навчання великих нейронних мереж

Експертний паралелізм

Методи навчання великих нейронних мереж

Ілюстрація різних стратегій паралелізму на тришаровій моделі. Кожен колір відноситься до одного шару, а пунктирні лінії відокремлюють різні графічні процесори.

Без паралелізму

Навчання нейронної мережі є ітеративним процесом. У кожній ітерації ми виконуємо перехід вперед через модель шарів для обчислення результату для кожного навчального прикладу в пакеті даних. Потім продовжується ще один прохід назад через шари, поширюючи, наскільки кожен параметр впливає на кінцевий результат шляхом обчислення a градієнт щодо кожного параметра. Середній градієнт для пакету, параметри та деякий стан оптимізації для кожного параметра передається в алгоритм оптимізації, наприклад Адам, який обчислює параметри наступної ітерації (які повинні мати трохи кращу продуктивність для ваших даних) і новий стан оптимізації для кожного параметра. У міру того як навчання повторює пакети даних, модель розвивається, щоб видавати точніші результати.

Різні методи паралелізму поділяють цей навчальний процес на різні виміри, зокрема:

  • Паралелізм даних — запускати різні підмножини пакету на різних графічних процесорах;
  • Паралелізм конвеєра — запускати різні рівні моделі на різних графічних процесорах;
  • Тензорний паралелізм — розбивка математики на одну операцію, наприклад, множення матриці для розподілу між графічними процесорами;
  • Суміш експертів — обробляйте кожен приклад лише частиною кожного шару.

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

Паралелізм даних

Паралель даних навчання означає копіювання одних і тих самих параметрів на кілька графічних процесорів (часто званих «робочими») і призначення різних прикладів кожному з них для одночасної обробки. Сам по собі паралелізм даних все ще вимагає, щоб ваша модель містилася в пам’яті одного графічного процесора, але дозволяє використовувати обчислення багатьох графічних процесорів ціною збереження багатьох дублікатів ваших параметрів. Зважаючи на це, існують стратегії збільшення ефективної оперативної пам’яті, доступної для вашого GPU, наприклад, тимчасове розвантаження параметрів у пам’ять CPU між використаннями.

Оскільки кожен працівник, який працює паралельно з даними, оновлює свою копію параметрів, їм потрібно координувати роботу, щоб гарантувати, що кожен працівник продовжує мати подібні параметри. Найпростіший підхід — запровадити блокуючу комунікацію між працівниками: (1) незалежно обчислити градієнт для кожного працівника; (2) усереднення градієнтів між працівниками; і (3) незалежно обчислювати ті самі нові параметри для кожного працівника. Крок (2) є блокуючим середнім, який вимагає передачі досить великої кількості даних (пропорційно кількості працівників, помноженій на розмір ваших параметрів), що може вплинути на продуктивність навчання. Є різні схеми асинхронної синхронізації щоб усунути ці накладні витрати, але вони погіршують ефективність навчання; на практиці люди зазвичай дотримуються синхронного підходу.

Паралелізм трубопроводу

з Паралельний трубопровод навчання, ми розподіляємо послідовні фрагменти моделі між графічними процесорами. Кожен графічний процесор містить лише частину параметрів, і, отже, одна й та ж модель споживає пропорційно менше пам’яті на GPU.

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

Методи навчання великих нейронних мереж Вперед
Методи навчання великих нейронних мереж Назад
Методи навчання великих нейронних мереж Оновлення градієнта
Методи навчання великих нейронних мереж Idle
Методи навчання великих нейронних мереж

Ілюстрація наївної установки паралельності конвеєра, де модель вертикально розбита на 4 розділи за шаром. Робочий 1 розміщує параметри моделі першого рівня мережі (найближчий до входу), а працівник 4 — шар 4 (найближчий до виходу). «F», «B» і «U» представляють операції вперед, назад і оновлення відповідно. Індекси вказують, на якому працівникі виконується операція. Дані обробляються одним працівником за раз через послідовну залежність, що призводить до великих «бульбашок» часу простою.

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

Кількість працівників, на яку розбивається модель, відома як глибина трубопроводу.

Під час прямого проходу працівникам потрібно лише надіслати вихід (так звані активації) свого шматка шарів наступному працівнику; під час зворотного проходу він надсилає лише градієнти цих активацій попередньому робочому. Існує великий простір для розробки того, як планувати ці проходи та як об’єднувати градієнти між мікропакетами. GPipe має кожен робочий процес вперед і назад послідовно, а потім синхронно агрегує градієнти з кількох мікропакетів в кінці. PipeDream замість цього планує кожному працівнику почергово обробляти прямі та зворотні проходи.

Методи навчання великих нейронних мереж Вперед
Методи навчання великих нейронних мереж Назад
Методи навчання великих нейронних мереж Оновити
Методи навчання великих нейронних мереж Idle
GPipe

Методи навчання великих нейронних мереж

PipeDream

Методи навчання великих нейронних мереж

Порівняння схем конвеєрства GPipe і PipeDream з використанням 4 мікропакетів на партію. Мікропартії 1-8 відповідають двом послідовним пакетам даних. На зображенні «(число)» вказує на який мікропакет виконується операція, а нижній індекс позначає ідентифікатор працівника. Зауважте, що PipeDream отримує більшу ефективність, виконуючи деякі обчислення із застарілими параметрами.

Тензорний паралелізм

Паралельність конвеєра розбиває модель «по вертикалі» на шари. Також можна «горизонтально» розділити певні операції всередині шару, що зазвичай називається Тензор Паралель навчання. Для багатьох сучасних моделей (наприклад, Трансформатор), вузьким місцем обчислення є множення пакетної матриці активації на матрицю великої ваги. Матричне множення можна розглядати як скалярний добуток між парами рядків і стовпців; можна обчислювати незалежні скалярні добутки на різних графічних процесорах або обчислювати частини кожного скалярного добутку на різних графічних процесорах і підсумовувати результати. За допомогою будь-якої стратегії ми можемо розділити вагову матрицю на фрагменти рівного розміру, розмістити кожен сегмент на іншому графічному процесорі та використовувати цей шард для обчислення відповідної частини загального продукту матриці перед тим, як пізніше обмінюватися даними для об’єднання результатів.

Одним із прикладів є Мегатрон-ЛМ, який розпаралелює множення матриці в межах рівня самоуважності та MLP Transformer. ПТД-П використовує тензор, дані та паралельність конвеєра; його графік конвеєра призначає кілька непослідовних рівнів кожному пристрою, зменшуючи накладні витрати за рахунок збільшення мережевого зв’язку.

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

Суміш експертів (МЗ)

З Суміш експертів (МЗ) Підхід, лише частина мережі використовується для обчислення вихідних даних для будь-якого одного входу. Один із прикладів підходу — мати багато наборів ваг, і мережа може вибрати, який набір використовувати за допомогою механізму стробування під час висновку. Це дозволяє отримати набагато більше параметрів без збільшення витрат на обчислення. Кожен набір ваг іменується «експертами» в надії, що мережа навчиться призначати спеціалізовані обчислення та навички кожному експерту. Різних експертів можна розміщувати на різних графічних процесорах, що забезпечує чіткий спосіб збільшення кількості графічних процесорів, які використовуються для моделі.

Методи навчання великих нейронних мереж

Ілюстрація шару суміші експертів (MoE). Тільки 2 з n Експерти відбираються шлюзовою мережею. (Зображення адаптовано з: Шазір та ін., 2017)

GShard масштабує MoE Transformer до 600 мільярдів параметрів за схемою, де тільки рівні MoE розділяються між кількома пристроями TPU, а інші рівні повністю дублюються. Перемикач трансформатор масштабує розмір моделі до трильйонів параметрів із ще більшою розрідженістю, направляючи один вхід до одного експерта.

Інші конструкції для збереження пам'яті

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

  • Щоб обчислити градієнт, вам потрібно зберегти оригінальні активації, які можуть споживати багато оперативної пам’яті пристрою. Контрольно-пропускний пункт (також відомий як переобчислення активації) зберігає будь-яку підмножину активацій і повторно обчислює проміжні вчасно під час зворотного проходу. Це економить багато пам’яті за рахунок обчислювальної вартості щонайбільше одного додаткового повного проходу вперед. Також можна постійно компромісувати між вартістю обчислень і пам’яті перерахунок вибіркової активації, що є контрольними підмножинами активацій, які відносно дорожчі для зберігання, але дешевші для обчислення.

  • Змішане тренування точності полягає у навчанні моделей з використанням чисел меншої точності (найчастіше FP16). Сучасні прискорювачі можуть досягати набагато більшого числа FLOP з меншою точністю, і ви також економите на ОЗП пристрою. При правильному догляді отримана модель може практично не втратити точність.

  • Розвантаження полягає в тому, щоб тимчасово вивантажити невикористані дані в центральний процесор або між різними пристроями, а потім зчитувати їх, коли це необхідно. Наївні реалізації значно уповільнюють навчання, але складні реалізації будуть попередньо вибирати дані, тому пристрою ніколи не доведеться чекати на них. Однією з реалізацій цієї ідеї є ZeRO який розподіляє параметри, градієнти та стани оптимізатора на все доступне обладнання та матеріалізує їх за потреби.

  • Ефективні оптимізатори пам'яті було запропоновано зменшити відбиток пам’яті під час роботи, що підтримується оптимізатором, Такі, як Адафактор.

  • компресія також може використовуватися для зберігання проміжних результатів у мережі. Наприклад, Сутність стискає активації, збережені для зворотного проходу; ДАЛЛ Е стискає градієнти перед їх синхронізацією.


У OpenAI ми навчаємо та вдосконалюємо великі моделі від базової інфраструктури до розгортання їх для вирішення реальних проблем. Якщо ви хочете втілити ідеї з цієї публікації на практиці — особливо актуальні для наших команд масштабування та прикладних досліджень — ми наймання!


Подяки
Дякуємо Ніколасу Тезаку, Сему Альтману, Даніелю Ґаклу, Іллі Суцкеверу та Стівену Адлеру за відгуки про чернетки. Дякуємо Джастіну Джею Вангу, Б’янці Мартін і Стіву Доулінгу за комунікацію та дизайн.

Часова мітка:

Більше від OpenAI