Платформа машинного обучения — это инструмент, который позволяет разработчику создавать модели для выполнения заданной задачи, такой как классификация изображений или обработка естественного языка. Одними из наиболее известных примеров платформ машинного обучения являются PyTorch и TensorFlow.

ONNX (Open Neural Network eXchange) – это стандарт с открытым исходным кодом, определяющий общий набор операторов и формат файла, который позволяет разработчикам ИИ использовать модели с различными платформами, инструментами, средами выполнения и компиляторами. .

В этом посте я расскажу о:

Для чего был создан ONNX?

Что такое ОННКС?

Обещание ONNX

Исполнение обещания

Для чего был создан ONNX?

Появление машинного обучения/глубокого обучения привело к экспоненциальному увеличению числа фреймворков/библиотек, которые были введены для выполнения моделей глубокого обучения/машинного обучения.

Это увеличение было обусловлено, прежде всего,

(a) Поставщики оборудования, которые разработали свои собственные платформы для обеспечения вертикальной интеграции и упрощения разработки моделей для своего оборудования.

и

(b) Поставщики программного обеспечения, которые разработали свои собственные платформы для достижения наилучшей производительности для конкретных случаев использования.

Этот взрывной рост количества доступных фреймворков для разработки моделей глубокого обучения привел к фрагментации экосистемы и затруднил работу между фреймворками или аппаратными экосистемами. Необходимо было сделать выбор в отношении того, где модели будут разрабатываться и обучаться, и переход на другую структуру или другую аппаратную экосистему позже в конвейере обработки данных был практически невозможен. Это было связано с совместимостью фреймворков с компиляторами для разного железа, но мы оставим историю с компиляторами на другой раз.

ONNX был создан, чтобы устранить эту инерцию взаимодействия между платформами и между различными аппаратными экосистемами.

На протяжении оставшейся части этой статьи мы будем исследовать, является ли решение этой проблемы слишком большого количества фреймворков добавлением еще одного фреймворка?

Что такое ОННКС?

ONNX — это открытая спецификация, состоящая из определений следующего:

Формат файла для вычислительной графовой модели

Модель. Граф потока данных ациклических вычислений, который содержит информацию о версии и метаданные.

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

Вычислительный узел:каждый вычислительный узел в графе, который принимает ноль или более входных данных определенных типов, один или несколько выходных данных определенных типов и тип операции, которую конкретный узел выполняет на своих входных данных.

Стандартные типы данных

ONNX стандартно поддерживает следующий список типов данных:
Тензорный тип:

  • Int8, Int16, Int32, Int64
  • Квантованный Цел.
  • Uint8, Uint16, Uint32, Uint64
  • Float16, поплавок, двойной
  • Буль
  • Нить
  • Комплекс64, Комплекс128

Нетензорные типы:

  • Последовательность
  • карта
  • Операторы (встроенные/пользовательские)

Операторы

Каждый вычислительный узел в ONNX Graph выполняет определенную операцию и выдает один или несколько выходных данных. Стандарт ONNX определяет официальный список операторов, которые поддерживаются графами ONNX. Этот список операторов постоянно обновляется и обновляется через ONNX Opsets.

Каждый добавочный набор опций ONNX добавляет поддержку новых операторов и улучшает существующий список операторов.

Эта спецификация предназначена для использования в качестве открытого стандарта, с которым может согласиться каждый, и, следовательно, позволяет переводить любую инфраструктуру на ONNX.

Обещание ONNX

Основные принципы проектирования ONNX:

  • Совместимость
  • Портативность

ONNX намеревается стать посредником между различными фреймворками, предоставляя эффективный интерфейс для перевода моделей из одного фреймворка в другой. На рис. 4 ниже перечислены инструменты для преобразования моделей в формат ONNX из некоторых наиболее распространенных платформ.

Исполнение обещания

На самом деле преобразование моделей из любой платформы в ONNX было сложной задачей. Одним из основных препятствий является разница в площади поверхности этих каркасов.

Задача библиотек преобразования состоит в том, чтобы не отставать от меняющихся ландшафтов как ONNX, так и их исходных библиотек для каждого выпуска (~ 4–6 раз в год).

Преобразование моделей из одной среды в другую сводится к возможности представить основные математические операции из исходной модели. На рис. 5 показано количество уникальных операторов, определенных в каждой структуре. ONNX поддерживает примерно 13 % операторов, поддерживаемых PyTorch. Это значительно ограничивает количество моделей, которые можно преобразовать в ONNX.

Важно отметить, что более 1000 операторов в таких фреймворках, как PyTorch, также включают в себя некоторую степень дублирования функциональности в конкретных операциях, а также возникает вопрос, должны ли такие фреймворки, как ONNX, поддерживать глобальный расширенный набор всех операций?

Чтобы решить эту проблему с охватом операторов, ONNX приняла другую стратегию, вместо того, чтобы гоняться за бесконечным списком операторов во всех этих инфраструктурах.

Функции ONNX помогают выражать сложные операции с использованием примитивных/существующих операторов в ONNX. Каждый предстоящий выпуск ONNX будет добавлять новые функции, и проще, чем когда-либо, добавлять свои собственные функции по мере необходимости. Это помогает ограничить количество операторов, которые необходимо поддерживать, а также приносит пользу разработчикам компиляторов, уменьшая объем и усилия, необходимые для оптимизации меньшего числа операторов для их оборудования.

Операторы — это основные строительные блоки, используемые для определения моделей ONNX. Благодаря богатому набору операторов ONNX может описывать большинство моделей DNN и ML из различных фреймворков. Функции позволяют выражать сложные операторы с помощью более примитивных операторов. Спецификация ONNX включает в себя основной набор операторов, которые позволяют реализовать множество моделей. Добавление всех возможных операторов не является целью, однако по мере необходимости добавляются дополнительные операторы для удовлетворения меняющихся потребностей.

Я не могу переоценить сходство вышеизложенного с войнами CISC против RISC предыдущей эпохи. У нас есть не только места в первом ряду, чтобы увидеть, как это работает, но и возможность по-настоящему повлиять на направление этой влиятельной отрасли, которая уже формирует будущее технологий, внося свой вклад в проекты с открытым исходным кодом и раздвигая границы программного обеспечения ИИ.

Какое время жить!!!

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai