Технологии

Что такое ONNX

Универсальный формат обмена нейросетями и рантайм к нему. Разбираем, почему в нём живут распознавание речи и эмбеддинги, а языковые модели чаще запускают в GGUF.

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

Проще всего понять его роль через вопрос «почему тогда языковые модели раздают не в ONNX».

#Где вы встречаете ONNX, даже не зная об этом

Формат доминирует там, где модель небольшая, задача узкая, а запускать надо на любом железе без плясок:

  • модели-эмбеддеры для векторного поиска — разбор семейств в обзоре embed-моделей;
  • распознавание речи и детекторы речевой активности;
  • распознавание текста на изображениях;
  • определение говорящего, классификаторы, детекторы объектов.

Общее у них одно: десятки-сотни мегабайт весов, стабильный граф, потребность работать на пользовательской машине без установки тяжёлого стека.

#ONNX и GGUF: разные ниши

ONNX GGUF
Типичная модель эмбеддер, ASR, OCR, классификатор языковая модель-собеседник
Квантизация целочисленная, простые схемы десятки специализированных схем
Основной движок ONNX Runtime llama.cpp и всё, что на нём
Сильная сторона переносимость между платформами агрессивное сжатие крупных моделей
Раздача модели набор файлов один файл целиком

Ключевая строка — квантизация. Экосистема GGUF выросла вокруг задачи «уместить очень большую модель в потребительскую память», и там накоплены схемы сжатия, которых в общем формате нет. Плюс однофайловая раздача: один .gguf содержит и веса, и токенизатор, и метаданные — подробности в разборе формата GGUF. Языковые модели в ONNX существуют, но новые модели сообщество публикует в GGUF, поэтому практический выбор обычно сделан за вас.

#Где путают

Заблуждение первое: ONNX — это движок. ONNX — формат, ONNX Runtime — движок. Формат сам по себе не выполняется и не имеет скорости. Утверждение «ONNX быстрее» бессмысленно без указания, на каком рантайме и на каком железе.

Заблуждение второе: конвертация в ONNX ускоряет модель. Иногда даёт выигрыш за счёт оптимизации графа, иногда наоборот — часть операций разворачивается в набор более медленных. Проверяется замером.

Заблуждение третье: ONNX безопаснее любых других весов. Формат основан на protobuf и при загрузке не выполняет произвольный код — в отличие от старых сериализаций на pickle. Это действительно преимущество, но такое же есть у современных форматов весов; сравнение — в справке про safetensors.

Заблуждение четвёртое: если модель в ONNX, она пойдёт на любом ускорителе. Переносимость обеспечивается наличием подходящего исполнителя. Если для вашего железа его нет, модель просто посчитается на процессоре.

#Частые вопросы

#Нужно ли мне вообще знать про ONNX?

Явно — редко. Косвенно вы им пользуетесь, если в вашем ассистенте есть распознавание речи, распознавание текста с экрана или векторный поиск: под капотом там с большой вероятностью ONNX Runtime.

#Можно ли конвертировать GGUF в ONNX и обратно?

Прямой конвертации между ними нет: это форматы с разной идеологией квантизации. Общий путь — от исходных весов, и обычно в одну сторону. Как это делается для GGUF, описано в разборе конвертации в GGUF и запуска в Ollama.

#ONNX Runtime использует видеокарту?

Использует, при наличии соответствующего исполнителя — для видеокарт разных вендоров они разные, и их надо ставить отдельно. По умолчанию сборка чаще всего считает на процессоре, и для маленьких моделей этого достаточно.

#Почему модель в ONNX состоит из нескольких файлов?

Крупные модели разбивают на файл графа и отдельные файлы весов из-за ограничения protobuf на размер сообщения. У эмбеддеров обычно всё лежит в одном файле. Что происходит при запуске такой модели — в справке про инференс.

Остальные термины — в глоссарии терминов ИИ.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт