Sobes.tech
Back to questions
Middle — Senior
12

Что такое ONNX, TorchScript, TensorRT, OpenVINO в задачах сервинга?

Companies where asked
VK CloudVK Cloud
2gis2gis
VKVK

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

  • ONNX — открытый формат представления модели, который помогает переносить её между фреймворками и запускать в разных рантаймах.
  • TorchScript — формат и механизм сериализации моделей PyTorch для запуска без Python-логики обучения; подходит для более автономного инференса.
  • TensorRT — библиотека NVIDIA для оптимизации и ускорения инференса на GPU, особенно для моделей, развернутых на CUDA-совместимом железе.
  • OpenVINO — toolkit от Intel для оптимизации и запуска моделей на CPU, iGPU и некоторых других устройствах Intel, часто с упором на low-latency inference.

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

Допустим, модель обучили в PyTorch, а в проде нужен быстрый и стабильный инференс на разном железе. Тогда модель можно:

  1. Экспортировать в ONNX для межфреймворковой совместимости.
  2. Если деплой остается в экосистеме PyTorch, сохранить как TorchScript.
  3. На NVIDIA GPU прогнать через TensorRT для максимального ускорения.
  4. На Intel CPU/edge-устройстве оптимизировать через OpenVINO.
# PyTorch -> ONNX
import torch

dummy_input = torch.randn(1, 3, 224, 224)
model.eval()

torch.onnx.export(
    model,
    dummy_input,
    "model.onnx",
    input_names=["input"],
    output_names=["output"],
    opset_version=17
)

# PyTorch -> TorchScript
scripted = torch.jit.trace(model, dummy_input)
scripted.save("model.pt")

Пояснение кода:

  • torch.onnx.export(...) сохраняет модель в формате ONNX, чтобы её можно было загрузить в ONNX Runtime или другой совместимый движок.
  • torch.jit.trace(...) создаёт TorchScript-модель по примеру входа; это удобно, если граф модели в основном статичен.
  • model.eval() переводит модель в режим инференса, чтобы отключить поведение обучения вроде dropout и использовать running statistics в batch norm.
  • В обоих случаях идея одна: отделить обучающий код от продового сервинга и получить артефакт, который легче оптимизировать и запускать.

Ключевые моменты:

  • ONNX — это прежде всего переносимый формат, а не ускоритель сам по себе.
  • TorchScript удобен, когда нужно остаться в мире PyTorch, но убрать зависимость от Python-рантайма.
  • TensorRT даёт сильный буст на NVIDIA GPU, но привязан к этому стеку и обычно требует дополнительной подготовки модели.
  • OpenVINO особенно полезен для оптимизации под Intel-экосистему и CPU-based inference.
  • В production часто используют цепочку: train in framework → export to ONNX/TorchScript → optimize под конкретное железо.
  • Выбор инструмента зависит от требований к латентности, throughput, железу и совместимости.