Великі нейронні мережі є основою багатьох останніх досягнень штучного інтелекту, але навчання їх є складним інженерним і дослідницьким завданням, яке вимагає оркестрування кластера GPU для виконання єдиного синхронізованого обчислення. У міру зростання розмірів кластерів і моделей спеціалісти з машинного навчання розробили все більше різноманітних методів для розпаралелювання навчання моделі на багатьох графічних процесорах. На перший погляд, розуміння цих методів паралелізму може здатися складним, але лише з кількома припущеннями щодо структури обчислень ці методи стають набагато зрозумілішими — на цьому етапі ви просто пересуваєтеся непрозорими бітами від A до B, як мережа. перемикання човників навколо пакетів.
Без паралелізму
Навчання нейронної мережі є ітеративним процесом. У кожній ітерації ми виконуємо перехід вперед через модель шарів для обчислення результату для кожного навчального прикладу в пакеті даних. Потім продовжується ще один прохід назад через шари, поширюючи, наскільки кожен параметр впливає на кінцевий результат шляхом обчислення a градієнт щодо кожного параметра. Середній градієнт для пакету, параметри та деякий стан оптимізації для кожного параметра передається в алгоритм оптимізації, наприклад Адам, який обчислює параметри наступної ітерації (які повинні мати трохи кращу продуктивність для ваших даних) і новий стан оптимізації для кожного параметра. У міру того як навчання повторює пакети даних, модель розвивається, щоб видавати точніші результати.
Різні методи паралелізму поділяють цей навчальний процес на різні виміри, зокрема:
- Паралелізм даних — запускати різні підмножини пакету на різних графічних процесорах;
- Паралелізм конвеєра — запускати різні рівні моделі на різних графічних процесорах;
- Тензорний паралелізм — розбивка математики на одну операцію, наприклад, множення матриці для розподілу між графічними процесорами;
- Суміш експертів — обробляйте кожен приклад лише частиною кожного шару.
(У цій публікації ми припустимо, що ви використовуєте графічні процесори для навчання своїх нейронних мереж, але ті ж ідеї стосуються тих, хто використовує будь-які інші прискорювач нейронної мережі.)
Паралелізм даних
Паралель даних навчання означає копіювання одних і тих самих параметрів на кілька графічних процесорів (часто званих «робочими») і призначення різних прикладів кожному з них для одночасної обробки. Сам по собі паралелізм даних все ще вимагає, щоб ваша модель містилася в пам’яті одного графічного процесора, але дозволяє використовувати обчислення багатьох графічних процесорів ціною збереження багатьох дублікатів ваших параметрів. Зважаючи на це, існують стратегії збільшення ефективної оперативної пам’яті, доступної для вашого GPU, наприклад, тимчасове розвантаження параметрів у пам’ять CPU між використаннями.
Оскільки кожен працівник, який працює паралельно з даними, оновлює свою копію параметрів, їм потрібно координувати роботу, щоб гарантувати, що кожен працівник продовжує мати подібні параметри. Найпростіший підхід — запровадити блокуючу комунікацію між працівниками: (1) незалежно обчислити градієнт для кожного працівника; (2) усереднення градієнтів між працівниками; і (3) незалежно обчислювати ті самі нові параметри для кожного працівника. Крок (2) є блокуючим середнім, який вимагає передачі досить великої кількості даних (пропорційно кількості працівників, помноженій на розмір ваших параметрів), що може вплинути на продуктивність навчання. Є різні схеми асинхронної синхронізації щоб усунути ці накладні витрати, але вони погіршують ефективність навчання; на практиці люди зазвичай дотримуються синхронного підходу.
Паралелізм трубопроводу
з Паралельний трубопровод навчання, ми розподіляємо послідовні фрагменти моделі між графічними процесорами. Кожен графічний процесор містить лише частину параметрів, і, отже, одна й та ж модель споживає пропорційно менше пам’яті на GPU.
Розбити велику модель на шматки послідовних шарів просто. Однак існує послідовна залежність між входами та виходами шарів, тому наївна реалізація може призвести до великої кількості часу простою, поки працівник чекає, поки вихідні дані з попередньої машини будуть використані як його вхідні дані. Ці фрагменти часу очікування відомі як «бульбашки», які витрачають даремно обчислення, які можуть бути виконані машинами на холостому ходу.
Ми можемо повторно використовувати ідеї паралельності даних, щоб знизити вартість бульбашки, якщо кожен працівник одночасно обробляє лише підмножину елементів даних, що дозволяє нам розумно перекривати нове обчислення з часом очікування. Основна ідея полягає в тому, щоб розділити одну партію на кілька мікропартій; кожна мікропартія повинна бути пропорційно швидшою для обробки, і кожен працівник починає працювати над наступною мікропартією, як тільки вона стане доступною, таким чином прискорюючи конвеєрне виконання. За наявності достатньої кількості мікросерій робітників можна використовувати більшу частину часу з мінімальною кількістю бульбашок на початку та в кінці етапу. Градієнти усереднюються для мікропакетів, а оновлення параметрів відбуваються лише після завершення всіх мікропакетів.
Кількість працівників, на яку розбивається модель, відома як глибина трубопроводу.
Під час прямого проходу працівникам потрібно лише надіслати вихід (так звані активації) свого шматка шарів наступному працівнику; під час зворотного проходу він надсилає лише градієнти цих активацій попередньому робочому. Існує великий простір для розробки того, як планувати ці проходи та як об’єднувати градієнти між мікропакетами. GPipe має кожен робочий процес вперед і назад послідовно, а потім синхронно агрегує градієнти з кількох мікропакетів в кінці. PipeDream замість цього планує кожному працівнику почергово обробляти прямі та зворотні проходи.
Тензорний паралелізм
Паралельність конвеєра розбиває модель «по вертикалі» на шари. Також можна «горизонтально» розділити певні операції всередині шару, що зазвичай називається Тензор Паралель навчання. Для багатьох сучасних моделей (наприклад, Трансформатор), вузьким місцем обчислення є множення пакетної матриці активації на матрицю великої ваги. Матричне множення можна розглядати як скалярний добуток між парами рядків і стовпців; можна обчислювати незалежні скалярні добутки на різних графічних процесорах або обчислювати частини кожного скалярного добутку на різних графічних процесорах і підсумовувати результати. За допомогою будь-якої стратегії ми можемо розділити вагову матрицю на фрагменти рівного розміру, розмістити кожен сегмент на іншому графічному процесорі та використовувати цей шард для обчислення відповідної частини загального продукту матриці перед тим, як пізніше обмінюватися даними для об’єднання результатів.
Одним із прикладів є Мегатрон-ЛМ, який розпаралелює множення матриці в межах рівня самоуважності та MLP Transformer. ПТД-П використовує тензор, дані та паралельність конвеєра; його графік конвеєра призначає кілька непослідовних рівнів кожному пристрою, зменшуючи накладні витрати за рахунок збільшення мережевого зв’язку.
Іноді вхідні дані в мережу можна розпаралелювати у вимірі з високим ступенем паралельних обчислень щодо перехресного зв’язку. Паралелізм послідовності є однією з таких ідей, де вхідна послідовність розбивається в часі на кілька підприкладів, пропорційно зменшуючи пікове споживання пам’яті, дозволяючи обчисленню продовжити з більш детальними прикладами.
Суміш експертів (МЗ)
З Суміш експертів (МЗ) Підхід, лише частина мережі використовується для обчислення вихідних даних для будь-якого одного входу. Один із прикладів підходу — мати багато наборів ваг, і мережа може вибрати, який набір використовувати за допомогою механізму стробування під час висновку. Це дозволяє отримати набагато більше параметрів без збільшення витрат на обчислення. Кожен набір ваг іменується «експертами» в надії, що мережа навчиться призначати спеціалізовані обчислення та навички кожному експерту. Різних експертів можна розміщувати на різних графічних процесорах, що забезпечує чіткий спосіб збільшення кількості графічних процесорів, які використовуються для моделі.
GShard масштабує MoE Transformer до 600 мільярдів параметрів за схемою, де тільки рівні MoE розділяються між кількома пристроями TPU, а інші рівні повністю дублюються. Перемикач трансформатор масштабує розмір моделі до трильйонів параметрів із ще більшою розрідженістю, направляючи один вхід до одного експерта.
Інші конструкції для збереження пам'яті
Існує багато інших обчислювальних стратегій, щоб зробити навчання дедалі більших нейронних мереж більш зручним. Наприклад:
-
Щоб обчислити градієнт, вам потрібно зберегти оригінальні активації, які можуть споживати багато оперативної пам’яті пристрою. Контрольно-пропускний пункт (також відомий як переобчислення активації) зберігає будь-яку підмножину активацій і повторно обчислює проміжні вчасно під час зворотного проходу. Це економить багато пам’яті за рахунок обчислювальної вартості щонайбільше одного додаткового повного проходу вперед. Також можна постійно компромісувати між вартістю обчислень і пам’яті перерахунок вибіркової активації, що є контрольними підмножинами активацій, які відносно дорожчі для зберігання, але дешевші для обчислення.
-
Змішане тренування точності полягає у навчанні моделей з використанням чисел меншої точності (найчастіше FP16). Сучасні прискорювачі можуть досягати набагато більшого числа FLOP з меншою точністю, і ви також економите на ОЗП пристрою. При правильному догляді отримана модель може практично не втратити точність.
-
Розвантаження полягає в тому, щоб тимчасово вивантажити невикористані дані в центральний процесор або між різними пристроями, а потім зчитувати їх, коли це необхідно. Наївні реалізації значно уповільнюють навчання, але складні реалізації будуть попередньо вибирати дані, тому пристрою ніколи не доведеться чекати на них. Однією з реалізацій цієї ідеї є ZeRO який розподіляє параметри, градієнти та стани оптимізатора на все доступне обладнання та матеріалізує їх за потреби.
-
Ефективні оптимізатори пам'яті було запропоновано зменшити відбиток пам’яті під час роботи, що підтримується оптимізатором, Такі, як Адафактор.
-
компресія також може використовуватися для зберігання проміжних результатів у мережі. Наприклад, Сутність стискає активації, збережені для зворотного проходу; ДАЛЛ Е стискає градієнти перед їх синхронізацією.
У OpenAI ми навчаємо та вдосконалюємо великі моделі від базової інфраструктури до розгортання їх для вирішення реальних проблем. Якщо ви хочете втілити ідеї з цієї публікації на практиці — особливо актуальні для наших команд масштабування та прикладних досліджень — ми наймання!
- a
- МЕНЮ
- прискорювачі
- точний
- через
- Додатковий
- аванси
- AI
- алгоритм
- ВСІ
- Дозволити
- серед
- кількість
- Інший
- прикладної
- Застосовувати
- підхід
- навколо
- доступний
- середній
- Базова лінія
- ставати
- перед тим
- початок
- буття
- між
- Білий
- Мільярд
- міхур
- який
- певний
- виклик
- більш дешевий
- Вибирати
- спілкування
- Комунікація
- зв'язку
- обчислення
- обчислення
- обчислення
- обчислення
- поспіль
- споживати
- споживання
- безперестанку
- триває
- координувати
- копіювання
- Core
- може
- дані
- розгортання
- дизайн
- розвиненою
- пристрій
- прилади
- різний
- важкий
- Розмір
- розміри
- вниз
- під час
- Ефективний
- ефективність
- ефективний
- елементи
- дозволяє
- Машинобудування
- особливо
- приклад
- Приклади
- виконання
- експерт
- experts
- швидше
- зворотний зв'язок
- Перший
- Слід
- Вперед
- від
- Повний
- в цілому
- GitHub
- Погляд
- GPU
- Графічні процесори
- траплятися
- апаратні засоби
- має
- Високий
- вище
- тримає
- відбувся
- Як
- How To
- Однак
- HTTPS
- ідея
- ідеї
- зображення
- реалізація
- поліпшення
- У тому числі
- Augmenter
- збільшений
- зростаючий
- все більше і більше
- самостійно
- вказувати
- Інфраструктура
- вхід
- IT
- відомий
- великий
- шар
- вести
- провідний
- УЧИТЬСЯ
- вивчення
- ліній
- машина
- навчання за допомогою машини
- Машинки для перманенту
- зробити
- математики
- Матриця
- засоби
- пам'ять
- Microsoft
- модель
- Моделі
- більше
- найбільш
- множинний
- множення
- потреби
- мережу
- мереж
- номер
- номера
- Nvidia
- операція
- операції
- оптимізація
- Інше
- загальний
- частина
- Люди
- продуктивність
- виконанні
- точка
- це можливо
- практика
- попередній
- проблеми
- надходження
- процес
- виробляти
- Product
- Продукти
- запропонований
- забезпечення
- Оперативна пам'ять
- RE
- досягати
- останній
- зменшити
- зниження
- відноситься
- доречний
- представляти
- Вимагається
- дослідження
- в результаті
- результати
- прогін
- біг
- Зазначений
- то ж
- економія
- шкала
- Масштабування
- схема
- схеми
- обраний
- комплект
- установка
- аналогічний
- один
- Розмір
- навички
- So
- деякі
- складний
- Простір
- спеціалізований
- розкол
- Розколи
- стан
- Штати
- Як і раніше
- зберігати
- магазинів
- стратегії
- Стратегія
- перемикач
- методи
- Команда
- через
- пропускна здатність
- час
- times
- торгувати
- Навчання
- Передача
- трильйони
- розуміння
- Оновити
- Updates
- us
- використання
- зазвичай
- використовувати
- різноманітність
- різний
- чекати
- в той час як
- Вікіпедія
- в
- без
- робочий
- робочі
- робочий
- вашу