Платформа машинного обучения — это инструмент, который позволяет разработчику создавать модели для выполнения заданной задачи, такой как классификация изображений или обработка естественного языка. Одними из наиболее известных примеров платформ машинного обучения являются 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 предыдущей эпохи. У нас есть не только места в первом ряду, чтобы увидеть, как это работает, но и возможность по-настоящему повлиять на направление этой влиятельной отрасли, которая уже формирует будущее технологий, внося свой вклад в проекты с открытым исходным кодом и раздвигая границы программного обеспечения ИИ.
Какое время жить!!!