
Khi bạn train một mô hình AI trên GPU và deploy lên thiết bị biên (edge), bạn thường mắc kẹt giữa hàng loạt định dạng model: PyTorch, TensorFlow, ONNX, TensorRT, CoreML. Mỗi framework lại có cách biểu diễn graph riêng, khiến việc chuyển đổi trở thành cơn ác mộng cho team ML. ONNX Runtime ra đời như một giải pháp thống nhất: một engine inference duy nhất, tối ưu cho mọi nền tảng, từ máy chủ server đến Raspberry Pi.
ONNX (Open Neural Network Exchange) là định dạng trung gian mở cho mô hình học sâu. Bạn có thể train bằng PyTorch hoặc TensorFlow, export sang ONNX, rồi dùng ONNX Runtime để chạy inference. Lợi ích lớn nhất là bạn không cần lock-in vào một framework cụ thể. Thay đổi backend training hay deployment đều không ảnh hưởng đến phần inference.
Kiến trúc ONNX Runtime

ONNX Runtime chia thành 3 lớp chính: Session quản lý model graph và các operator, Execution Provider quyết định phần cứng xử lý (CPU, CUDA, CoreML, NNAPI), và Memory Arena quản lý bộ nhớ. Khi bạn gọi `ort.InferenceSession.create()`, runtime parse ONNX model graph, optimize graph (constant folding, operator fusion), rồi allocate memory cho inference.
Các Execution Provider là điểm mạnh của ONNX Runtime. CUDA EP cho NVIDIA GPU, CoreML EP cho Apple Silicon, NNAPI EP cho Android, TensorRT EP cho NVIDIA Jetson. Một model ONNX duy nhất chạy được trên mọi thiết bị chỉ bằng cách đổi EP. Không cần rewrite, không cần re-export.
Tối ưu hiệu năng inference

ONNX Runtime áp dụng nhiều kỹ thuật tối ưu graph mà framework gốc không làm được. Operator fusion gộp nhiều operator liên tiếp thành một kernel duy nhất, giảm overhead memory read/write. Constant folding tính toán các giá trị cố định tại compile time thay vì runtime. Graph optimization sắp xếp thứ tự operator để tăng cache hit rate.
Kết quả thực tế: ONNX Runtime thường cho latency thấp hơn 20-50% so với PyTorch eager mode trên cùng phần cứng. Với quantization (INT8), latency còn giảm thêm 2-4x. Với TensorRT EP trên NVIDIA Jetson, throughput có thể tăng 3-8x so với PyTorch CPU. PyTorch ONNX export dễ dàng chỉ bằng 3 dòng code: torch.onnx.export(model, dummy_input, "model.onnx").
Deployment đa nền tảng
ONNX Runtime hỗ trợ C++, Python, C#, Java, JavaScript, Objective-C, Swift. Trong GitHub repo của project, bạn tìm thấy example cho mọi nền tảng: WebAssembly cho browser, CoreML cho iOS/macOS, NNAPI cho Android, OpenVINO cho Intel CPU.
WebAssembly là use case đặc biệt thú vị. Bạn có thể chạy mô hình ONNX trực tiếp trong trình duyệt mà không cần server backend. User upload image → browser chạy ONNX Runtime WASM → nhận kết quả ngay lập tức. Latency tốt hơn server round-trip, không tốn chi phí GPU server, privacy tốt hơn vì data không rời thiết bị.
Khi nào nên dùng ONNX Runtime
- Deploy mô hình lên nhiều loại phần cứng khác nhau (server, mobile, edge)
- Cần tối ưu latency mà không muốn rewrite inference code
- Chuyển từ PyTorch/TensorFlow sang production cần performance ổn định
- Edge deployment trên thiết bị có phần cứng hạn chế (Jetson, Raspberry Pi)
- Web inference với WebAssembly không cần backend
ONNX Runtime không phải lúc nào cũng là lựa chọn tốt nhất. Nếu bạn chỉ deploy trên một nền tảng cụ thể (ví dụ chỉ NVIDIA GPU), TensorRT direct có thể nhanh hơn. Nếu bạn dùng Apple Silicon, CoreML direct có thể tối ưu hơn. ONNX Runtime là lựa chọn đa dụng, dễ bảo trì, phù hợp khi bạn cần đa nền tảng.
onnxruntime.ai — tài liệu chính thức, docs đầy đủ cho từng nền tảng.
ONNX Runtime không chỉ là công cụ convert model mà còn là ecosystem mở với khả năng tối ưu sâu. Với sự phát triển của AI và nhu cầu triển khai trên đa nền tảng, ONNX Runtime sẽ tiếp tục đóng vai trò quan trọng trong việc giảm thiểu fragmentation trong ngành AI. Các nhà phát triển được khuyến khích đánh giá ONNX Runtime cho các use case của mình, đặc biệt là khi cần deploy trên nhiều loại phần cứng khác nhau.
Ví dụ thực tế với ONNX Runtime Python API
Trong Python, sử dụng ONNX Runtime cực kỳ đơn giản. Bạn import thư viện, tạo InferenceSession với ONNX model file, chuẩn bị input tensor, gọi run trên session. ONNX Runtime tự động chọn Execution Provider phù hợp dựa trên phần cứng hiện tại: nếu có GPU NVIDIA → CUDA EP, nếu trên Apple Silicon → CoreML EP, nếu trên thiết bị arm64 → CPU EP mặc định.
Đoạn code cơ bản chỉ gồm 4 dòng: tạo session từ file .onnx, lấy danh sách input/output name từ session, chạy inference bằng session.run(), nhận kết quả output tensor. Không cần setup GPU driver-specific code, không cần đảm bảo PyTorch version compatibility, không cần cài framework training trên production server.
Đối với production environment, ONNX Runtime hỗ trợ multi-threading để inference batch trên CPU. Bạn có thể cấu hình number of threads, intra-op parallelism, inter-op parallelism thông qua SessionOptions. Smart optimization levels (ORT_ENABLE_BASIC, ORT_ENABLE_EXTENDED, ORT_ENABLE_ALL) cho phép bạn cân bằng giữa startup time và runtime performance.
Một use case thường gặp là A/B testing model version. Bạn load cả hai model ONNX version (old và new), chạy inference trên cùng input, so sánh output để quyết định model nào tốt hơn. Đây là workflow phổ biến trong recommendation system, nơi model performance thay đổi theo thời gian và cần continuously evaluate.
