onnx
Открытый формат представления моделей машинного обучения, который обеспечивает совместимость между различными фреймворками. Он позволяет разработчикам использовать модели, созданные в одной среде (PyTorch, TensorFlow, Keras и др.), в других средах без необходимости переписывания или адаптации. ONNX предоставляет унифицированную спецификацию для описания архитектуры нейронных сетей, включая слои, веса, параметры и граф вычислений, что способствует гибкости разработки и ускоряет внедрение моделей в производство.
Особенности
- унифицированный формат представления моделей, поддерживаемый множеством фреймворков;
- широкая экосистема инструментов для конвертации, оптимизации и инференса;
- высокая производительность инференса через ONNX Runtime с поддержкой различных аппаратных ускорителей;
- расширяемый набор операторов (операций), покрывающий потребности современных нейросетей;
- возможность уменьшения размера модели и ускорения вычислений с помощью квантования и оптимизации графа.
Основные компоненты
Экосистема ONNX состоит из нескольких ключевых компонентов, которые обеспечивают создание, преобразование, оптимизацию и выполнение моделей в формате ONNX (подробнее с документацией можно ознакомиться здесь).
Формат и спецификация ONNX
Основой ONNX является спецификация, определяющая структуру модели: граф вычислений, типы данных, операторы и метаданные. Модель представляется в виде протобуфера (protobuf) или сохраняется в двоичном формате .onnx.
Ключевые элементы спецификации:
- Граф (Graph): набор узлов (node), входов и выходов, описывающих поток данных;
- Узлы (Nodes): операции (свёртка, пулинг, активация и др.), применяемые к тензорам;
- Тензоры (Tensors): многомерные массивы с определённым типом данных (float, int8, uint8 и т.д.);
- Атрибуты (Attributes): параметры операций (например, размер ядра свертки);
- Метаданные: информация о версии модели, имени, документации.
Набор операторов
ONNX включает стандартизированный набор операторов (ops), которые покрывают основные строительные блоки нейронных сетей. Каждая версия ONNX расширяет или уточняет этот набор, обеспечивая совместимость моделей между различными реализациями.
Основные группы операторов:
- Тензорные операции: конкатенация, изменение формы, транспонирование, срезы;
- Нейросетевые слои: свёртка, пулинг, нормализация, рекуррентные слои (LSTM, GRU);
- Активации: ReLU, Sigmoid, Tanh, Softmax;
- Математические функции: сложение, умножение, тригонометрические, статистические;
- Квантованные операторы: для выполнения моделей с пониженной точностью (INT8, UINT8).
ONNX Runtime
ONNX Runtime — это высокопроизводительный движок для инференса моделей в формате ONNX. Он поддерживает множество аппаратных платформ (CPU, GPU, NPU) и предоставляет API для C++, Python, C#, Java и других языков.
Ключевые возможности ONNX Runtime:
- Аппаратные ускорители: CUDA, TensorRT, OpenVINO, DirectML, CoreML, ARM Compute Library;
- Оптимизация графа: слияние узлов, устранение общих подвыражений, квантование;
- Расширяемость: возможность добавления пользовательских операторов;
- Режимы выполнения: синхронный, асинхронный, многопоточный.
Инструменты конвертации и оптимизации
Для работы с моделями ONNX существует набор утилит, позволяющих преобразовывать модели из популярных фреймворков, оптимизировать их и проверять на корректность.
Основные инструменты:
- onnxmltools: конвертация моделей из CoreML, LightGBM, XGBoost, Spark ML;
- tf2onnx: преобразование TensorFlow моделей в ONNX;
- pytorch-onnx: встроенный экспорт из PyTorch через
torch.onnx.export; - skl2onnx: конвертация моделей scikit-learn;
- onnxoptimizer: оптимизация графа (удаление лишних узлов, упрощение);
- onnxsim: упрощение модели с постоянным свёртыванием (constant folding).
Валидация и проверка моделей
Чтобы гарантировать корректность и совместимость моделей, ONNX предоставляет инструменты для проверки соответствия спецификации и тестирования.
Инструменты валидации:
- onnxchecker: статическая проверка структуры модели (типы данных, формы, ссылки);
- onnxruntime validation: запуск модели с тестовыми данными и сравнение результатов с эталоном;
- backend-scoreboard: набор тестов для проверки поддержки операторов различными бэкендами.