Назад к вопросам
VK Cloud
2gis
VK
Middle — Senior
11
Что такое ONNX, TorchScript, TensorRT, OpenVINO в задачах сервинга?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Это популярные форматы и рантаймы для деплоя и ускорения инференса моделей. Обычно их используют, чтобы перенести модель из фреймворка обучения в более стабильную и производительную среду сервинга. Важно понимать, чем отличается переносимый формат от backend-оптимизатора под конкретное железо.
Определение:
- ONNX — открытый формат представления модели, который помогает переносить её между фреймворками и запускать в разных рантаймах.
- TorchScript — формат и механизм сериализации моделей PyTorch для запуска без Python-логики обучения; подходит для более автономного инференса.
- TensorRT — библиотека NVIDIA для оптимизации и ускорения инференса на GPU, особенно для моделей, развернутых на CUDA-совместимом железе.
- OpenVINO — toolkit от Intel для оптимизации и запуска моделей на CPU, iGPU и некоторых других устройствах Intel, часто с упором на low-latency inference.
Пример использования:
Допустим, модель обучили в PyTorch, а в проде нужен быстрый и стабильный инференс на разном железе. Тогда модель можно:
- Экспортировать в ONNX для межфреймворковой совместимости.
- Если деплой остается в экосистеме PyTorch, сохранить как TorchScript.
- На NVIDIA GPU прогнать через TensorRT для максимального ускорения.
- На 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, железу и совместимости.