OpenAI випустила реліз Triton 1.0 — мови програмування, що може полегшити ML-розробку

Відомий стартап зі штучного інтелекту OpenAI випустив оновлену версію мови програмування Triton 1.0, інтегровану з Python. Її творці стверджують, що з новою мовою кодувати для машинного навчання стане значно легше, ніж з CUDA. Наприклад, для множення матриць.

За словами керівника проєкту та вченого OpenAI Філіппа Тілле, Triton 1.0 створений для дослідників та інженерів ML, які не знайомі з програмуванням на GPU, хоча й мають хороші навички розробки ПЗ. Той факт, що саме OpenAI розробили передбачувальну мовну модель GPT-3, може дати коду додаткову перевагу в області ШІ.

Triton 1.0 має відкритий вихідний код та зобов’язує вказувати авторські права та дозволи при будь-якому розповсюдженні значних його копій.

Вперше мову програмування Triton презентували у 2019 році в Гарвардському університеті Філіп Тілле та його радники Х. Т. Кунг та Девід Кокс.

Вони хотіли створити мову програмування, що була б виразнішою за специфічні vendor бібліотеки для AI на кшталт cuDNN від Nvidia, та могла б обробляти широкий спектр операцій з матрицями, що залучені в нейронних мережах. І при цьому, була портативною та не менш потужною від інших подібних бібліотек.

На думку Тілле та його команди, GPU-програмування в CUDA надто складне. Наприклад, написання власних ядер та функцій для GPU має безліч тонкощів, їх складно оптимізувати та паралелізувати. Крім того, це передбачає багато ручної роботи. Triton же представили як альтернативу vendor бібліотекам.

OpenAI

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

Семантика Triton розпізнає плитки як built-in types, щоб компілятор міг ефективно розподілити фрагменти серед багатьох ядер графічного процесора та супровідних реєстрів.

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

«Наприклад, дані можуть автоматично зберігатися в роздільній пам’яті, переглядаючи операнди обчислювально інтенсивних операцій на рівні блоків» — говорить Тілле.

OpenAI

Спочатку високорівневий код Triton перетворюється на його проміжне представлення, що засноване на проміжному представленні, знайденому в інфраструктурі компілятора LLVM з відкритим вихідним кодом.

«Лише декілька розширень потоку даних та керування для LLVM-IR роблять доступними різні проходи оптимізації на рівні плитки, які разом призведуть до потужності на рівні vendor бібліотек» — пише Тілле в блозі OpenAI.

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

JIT організовує потоки інструкцій всередині ядер GPU, щоб отримати ті ж значення з основної пам’яті. Це називається об’єднанням пам’яті (memory coalescing). Так само JIT розміщує дані, що представляють взаємний інтерес для таких потоків, у загальній пам’яті для ефективного управління (shared memory allocation).

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

Перевага Triton має полягати в миттєвому прискоренні розробки деяких важливих операцій нейронних мереж. Наприклад, з Triton можна написати ядра матричного множення FP16 менш ніж у 25 строках коду.

OpenAI

Важливо: наразі програмне забезпечення працює лише для графічних процесорів Nvidia.

Більше інформації про Triton 1.0
Triton 1.0 на GitHub


Дивіться також: Директор Nvidia у Києві Василь Пастернак — про роботу офісу, розвиток інженерів і чому досі пише код

👍НравитсяПонравилось4
В избранноеВ избранном1
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Подписаться на комментарии