Ускоряем инференс ML-моделей с помощью компиляции и сессий ONNX Runtime
Стандартный выполнение предсказаний в Python-фреймворках сопровождается высоким оверхедом интерпретатора и тяжелыми зависимостями. Движок ONNX Runtime оптимизирует граф вычислений, объединяет параллельные операции и задействует аппаратные инструкции CPU/GPU. Мы запустим скомпилированную ONNX-модель с использованием слияния узлов (Graph Optimization) для максимального ускорения инференса.
Для компиляции графа и запуска инференса установим библиотеки ONNX, ONNX Runtime и PyTorch.
pip install torch onnx onnxruntime
Все необходимые библиотеки для компиляции и инференса моделей успешно установлены.
Напишем Python-скрипт, который экспортирует модель, включает максимальный уровень оптимизации графа и выполняет быстрый инференс.
import torch, torch.nn as nn, onnxruntime as ort, numpy as np
model = nn.Sequential(nn.Linear(100, 50), nn.ReLU(), nn.Linear(50, 10))
x = torch.randn(1, 100)
torch.onnx.export(model, x, "opt_model.onnx", input_names=["input"], output_names=["output"])
opts = ort.SessionOptions()
opts.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
session = ort.InferenceSession("opt_model.onnx", opts)
res = session.run(None, {"input": x.numpy()})
print("Optimized inference output shape:", res[0].shape)
Оптимизированный граф вычислений успешно скомпилирован и обработал входной вектор.
# проверка (контрольный запуск проверки работоспособности сессии ONNX Runtime)
python3 -c "import onnxruntime as ort; print('ONNX Runtime Status:', ort.get_device())"
Ожидаемый вывод: ONNX Runtime Status: CPU
# cleanup (удаление сохраненного файла модели и чистка временных артефактов)
rm -f opt_model.onnx
Включение ORT_ENABLE_ALL позволяет объединять линейные слои и функции активации в единые ядерные операции. Для еще большего ускорения продакшен-сервисов подключайте провайдеры Execution Providers под конкретное железо (CUDA, TensorRT или OpenVINO).
👉 AI Ready | #практика