MindSpore от Huawei: новий конкурент для TensorFlow і PyTorch?
Huawei оголосила, що її проміжне програмне забезпечення MindSpore Deep Learning у стилі TensorFlow і PyTorch тепер є відкритим вихідним кодом. Дізнайтеся в цій статті його найважливіші характеристики.
Зміст матеріалу
Huawei тільки що оголосила, що її середовище MindSpore для розробки додатків для штучного інтелекту стає відкритим вихідним кодом і доступна на GiHub і Gitee. MindSpore - це ще одне середовище Deep Learning для навчання моделей нейронних мереж, аналогічне TensorFlow або PyTorch, розроблене для використання від Edge до Cloud, яка підтримує як графічні процесори, так і, очевидно, процесори Huawei Ascend.
У серпні минулого року, коли Huawei оголосив про офіційний запуск свого процесора Ascend, вперше був представлений MindSpore, заявивши, що "в типовому навчальному сеансі на основі ResNet-50 комбінація Ascend 910 і MindSpore відбувається приблизно вдвічі швидше. При навчанні моделей штучного інтелекту в порівнянні з іншими основними навчальними картками з використанням TensorFlow Це правда, що в останні роки з 'явилося багато фреймворків, і, можливо, MindSpore - не більше ніж одна з груп, яка навіть віддалено може конкурувати з TensorFlow (підтримується Google) і PyTore
Архітектура системи
На веб-сайті MindSpore описується, що інфраструктура складається з трьох основних рівнів: вирази зовнішнього інтерфейсу, графічного движка і середовища виконання бекенду. На наступному малюнку показана візуальна схема:
Перший рівень MindSpore пропонує Python API для програмістів. Оскільки мовною лінгвістикою в ньому нашому співтоваристві є де-факто Python, а в іншому випадку MindSpore хоче конкурувати з PyTorch і TensorFlow. За допомогою цього API програмісти можуть керувати моделями (навчання, логічний висновок тощо) і обробляти дані. Цей перший рівень також включає підтримку проміжного представлення коду (MindSpore IR), на якому буде засновано безліч оптимізацій, які можуть бути виконані при розпаралелюванні і автоматичному диференціюванні (GHLO).
Нижче представлений шар Graph Engine, який пропонує необхідні функції для створення і виконання автоматичного диференціювання графа виконання. З MindSpore вони вибрали модель автоматичної диференціації, відмінну від PyTorch (яка створює динамічний графік виконання) або TensorFlow (хоча спочатку була обрана можливість створення більш ефективного статичного графіка виконання, в даний час вона також пропонує варіант динамічного графа виконання і дозволяє використовувати статичну версію графа з використанням декоратора @ tf.fun.
Вибір MindSpore полягає в перетворенні вихідного коду на формат проміжного коду (MindSpore IR), що дозволяє використовувати переваги двох моделей (більш детальну інформацію можна знайти в розділі "Автоматичне розмежування" на веб-сайті MindSpore).
Останній рівень складається з усіх бібліотек і середовищ виконання, необхідних для підтримки різних апаратних архітектур, в яких оброблятиметься код. Швидше за все, це буде бекенд, дуже схожий на інший фреймворки, можливо, з особливостями Huawei, наприклад, з такими бібліотеками, як HCCL (Бібліотека колективної комунікації Huawei), еквівалентними NCCL NVIDIA (Бібліотека колективу
Підтримка візуалізації тренувального процесу
Згідно з навчальним посібником MindSpore, хоча їх було неможливо встановити і використовувати, у них є MindInsight для створення візуалізацій, які дещо нагадують TensorBoard, TensorFlow. Подивіться на деякі скріншоти, які вони показують на своєму сайті:
Згідно з керівництвом, MindSpore в даний час використовує механізм зворотного виклику (нагадує про те, як це робиться з Keras) для запису (у файлі журналу) в процесі навчання всіх тих параметрів і гіперпараметрів моделі, які ми хочемо, а також графіка обчислень, коли компіляція нейронної мережі в проміжний код завершена.
Паралелізм
У своєму уроці вони говорять про два режими розпаралелювання (DATA_PARALLEL і AUTO_PARALLEL) і представляють приклад коду, який навчає ResNet-50 з набором даних CIFAR для процесора Ascend 910 (який я не зміг перевірити). DATA_PARALLEL відноситься до стратегії, широко відомої як паралелізм даних, яка складається в поділі навчальних даних на кілька підмножин, кожне з яких виконується в одній репліці моделі, але в різних одиницях обробки. Підтримка рівня Graph Engine надається для розпаралелювання кодів і, зокрема, для паралелізму AUTO_PARALLEL.
Режим AUTO_PARALLEL автоматично оптимізує розпаралелювання, комбінуючи стратегію розпаралелювання даних (обговорювану вище) зі стратегією розпаралелювання моделі, в якій модель ділиться на різні частини, і кожна частина виконується паралельно в різних блоках обробки. Цей автоматичний режим вибирає стратегію розпараллелювання, яка пропонує найкращі переваги, про що можна прочитати в розділі "Автоматична паралель" на веб-сайті MindSpore (хоча вони не описують, як приймаються оцінки та рішення). Нам доведеться почекати, щоб виділити час для технічної команди, щоб розширити документацію і зрозуміти більше деталей про стратегію автоматичного розпараллелювання. Але очевидно, що ця стратегія автоматичного розпараллелювання має вирішальне значення, і саме тут вони повинні і можуть конкурувати з TensorFlow або PyTorch, отримуючи значно вищу продуктивність з використанням процесорів Huawei
Запланована дорожня карта і як внести свій внесок
Очевидно, що належить виконати велику роботу, і на даний момент вони впорядкували ідеї, які вони мають на увазі на наступний рік, в обширній дорожній карті, представленій на цій сторінці, але вони стверджують, що пріоритети будуть скориговані відповідно до користувача.
Зворотній зв 'язок. На даний момент ми можемо знайти ці основні лінії:
- Підтримка більшої кількості моделей (очікують класичні моделі, GAN, RNN, Transformers, моделі навчання з посиленням, ймовірнісне програмування, AutoML тощо).
- Розширіть API та бібліотеки, щоб покращити зручність використання та досвід програмування (більше операторів, більше оптимізаторів, більше функцій втрат тощо)
- Комплексна підтримка процесора Huawei Ascend і оптимізація його продуктивності (оптимізація компіляції, поліпшення використання ресурсів тощо)
- Еволюція програмного стека і виконання оптимізацій обчислювального графа (поліпшення проміжного представлення IR, додавання додаткових можливостей оптимізації тощо).
- Підтримка більшої кількості мов програмування (не тільки Python).
- Поліпшення розподіленого навчання з оптимізацією автоматичного планування, розподілу даних тощо.
- Покращіть інструмент MindInsight, щоб програмісту було легше "налагоджувати" і покращувати налаштування гіперпараметрів у процесі навчання.
- Прогрес у наданні функціональних можливостей середовища логічного виведення в пристроях, що знаходяться в Edge (безпека, підтримка моделей інших платформ через стандарт ONNX тощо)
На сторінці спільноти ви можете бачити, що у MindSpore є партнери за межами Huawei і Китаю, такі як Університет Единбурга, Лондонський Імперський коледж, Університет Мюнстера (Німеччина) або Університет Париж-Сакле. Вони кажуть, що будуть слідувати відкритій моделі управління і запропонують всьому співтовариству внести свій внесок як у код, так і в документацію.
Ув 'язнення
Після швидкого першого погляду здається правильним рішення по проектуванню і реалізації (наприклад, паралелізм і автоматичне диференціювання), які можуть додати можливості для поліпшень і оптимізацій, які досягають більш високої продуктивності, ніж структури, які вони хочуть перевершити. Але попереду ще багато роботи, щоб зловити PyTorch і TensorFlow, і, перш за все, створити спільноту, а не просто! Тим не менш, всі ми вже знаємо, що за підтримки однієї великої компанії в секторі, такої як Huawei, все можливо, або це було очевидно три роки тому, коли вийшла перша версія PyTorch (Facebook), що вона може бути близька до п 'яти TensorFlow (Google)?