Инструменты для просмотра и отладки моделей: Netron и onnx Python API

Netron

Netron представляет собой визуализатор моделей машинного обучения и нейронных сетей, поддерживающий множество форматов, включая ONNX, TensorFlow, Keras, PyTorch и другие. Основная задача Netron — предоставление наглядного графического представления структуры модели, что облегчает анализ её архитектуры и отладку.

Основные возможности Netron:

  • Визуализация графа вычислений: Netron отображает слои модели, их соединения, размеры тензоров и параметры каждого слоя. Это позволяет быстро оценить архитектуру и выявить потенциальные ошибки конфигурации.
  • Поддержка атрибутов слоев: Для каждого слоя можно просмотреть тип операции, используемые параметры (например, фильтры свёртки, размеры ядра, шаг свёртки) и формы входных и выходных тензоров.
  • Интерактивность: Модель можно масштабировать, перемещать узлы, разворачивать и сворачивать блоки слоев, что удобно для сложных архитектур.
  • Интеграция с браузером и десктопными приложениями: Netron может работать как локально (десктопная версия), так и в веб-браузере, загружая модели через drag-and-drop.

Пример использования Netron для анализа ONNX-модели:

# Установка Netron через pip
pip install netron

# Запуск визуализации модели
netron my_model.onnx

После выполнения команды откроется локальный веб-интерфейс, где можно просматривать все слои модели и их параметры.

onnx Python API

Библиотека onnx предоставляет программный интерфейс для работы с моделями в формате ONNX. Основное применение — чтение, проверка корректности, модификация и отладка моделей на уровне кода.

Основные функции и возможности:

  • Загрузка и проверка модели:
import onnx

# Загрузка модели
model = onnx.load("my_model.onnx")

# Проверка корректности модели
onnx.checker.check_model(model)

Функция checker.check_model проводит статический анализ структуры модели, выявляет несоответствия и нарушения спецификации ONNX.

  • Просмотр структуры модели:
# Вывод информации о модели
print(onnx.helper.printable_graph(model.graph))

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

  • Доступ к узлам и параметрам:
for node in model.graph.node:
    print(f"Имя операции: {node.op_type}")
    print(f"Входы: {node.input}")
    print(f"Выходы: {node.output}")
    print(f"Атрибуты: {[attr.name for attr in node.attribute]}")

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

  • Работа с тензорными значениями (инициализация параметров):
for initializer in model.graph.initializer:
    print(f"Тензор: {initializer.name}, Размеры: {initializer.dims}")

Инициализаторы содержат веса и смещения слоев. Можно извлекать значения в массивы NumPy для анализа или изменения параметров.

Комбинированное использование

Для полноценного анализа модели ONNX часто используют комбинацию Netron и onnx Python API:

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

Такой подход обеспечивает комплексную отладку моделей: визуальный контроль с помощью Netron и программный контроль с помощью onnx API.

Практические рекомендации

  • Начальная проверка: Всегда проверять модель через onnx.checker перед запуском в ONNX Runtime. Это предотвращает ошибки на этапе инференса.
  • Интерактивный анализ: Для сложных моделей удобно использовать Netron для изучения связей между слоями и проверки размеров тензоров.
  • Автоматизация тестов: Использование onnx API позволяет создавать скрипты, которые автоматически проверяют модели после конвертации из других форматов, что особенно важно при интеграции в CI/CD-пайплайны.
  • Совмещение с ONNX Runtime: После проверки и анализа модель можно загружать в ONNX Runtime Web для инференса в браузере, обеспечивая полную цепочку от отладки до выполнения.

Netron и onnx Python API являются незаменимыми инструментами для анализа и отладки ONNX-моделей, обеспечивая прозрачность архитектуры и возможность глубокой проверки на всех этапах работы с нейронными сетями.