TensorRT 11.1 mở rộng tối ưu engine bằng Global Performance Tuner
Global Performance Tuner trong TensorRT 11.1 tìm kiếm qua nhiều lộ trình build, đo hiệu năng end-to-end và chọn engine nhanh nhất vẫn đáp ứng ràng buộc độ chính xác.
Một model có thể tạo ra nhiều TensorRT engine khác nhau trên cùng phần cứng. Dù cùng giữ nguyên ngữ nghĩa tính toán, các engine này vẫn có thể cho hiệu năng inference khác biệt đáng kể.
Đó là bài toán mà NVIDIA muốn giải quyết với Global Performance Tuner, tính năng được giới thiệu trong TensorRT 11.1. Thay vì chỉ dựa vào một lộ trình build cố định, tính năng này mở rộng việc tìm kiếm sang nhiều cấu hình ứng viên và chọn phương án nhanh nhất vẫn đáp ứng yêu cầu độ chính xác.
Build engine không chỉ là đổi operator thành kernel
Khi build engine, TensorRT phải đưa ra nhiều quyết định có liên hệ với nhau, gồm:
Biến đổi đồ thị tính toán;
Fusion giữa các operator;
Chọn cách triển khai operator;
Bố trí bộ nhớ;
Quantization.
Các quyết định này không độc lập. Một kernel có kết quả tốt khi đo riêng lẻ chưa chắc giúp toàn bộ engine nhanh hơn. Tensor layout, khả năng fusion và lưu lượng bộ nhớ ở các phần khác của graph đều có thể làm thay đổi kết quả cuối cùng.
Vì vậy, NVIDIA xem quá trình tạo engine như một bài toán compiler có nhiều đáp án hợp lệ, thay vì chỉ có một đường build tối ưu cho mọi model và môi trường triển khai.
Global Performance Tuner tìm gì?
Theo bài viết của NVIDIA, tuner tiếp cận việc tối ưu theo ba nguyên tắc:
Tuning có xét độ chính xác
Engine nhanh hơn nhưng tạo sai khác số học vượt quá mức ứng dụng chấp nhận sẽ không phải lựa chọn phù hợp.
Lộ trình build có thể tùy biến
TensorRT không bị giới hạn ở một chiến lược scheduling mặc định duy nhất.
Tìm kiếm trong không gian nghiệm lớn
Hệ thống tạo các ứng viên, kiểm tra hiệu năng và độ chính xác end-to-end, rồi chọn engine nhanh nhất trong nhóm đáp ứng điều kiện.
Điểm đáng chú ý là việc đánh giá diễn ra ở cấp độ engine hoàn chỉnh. Đây là cách tính đến các tương tác mà benchmark từng kernel khó phản ánh đầy đủ.
Vì sao một heuristic chung khó mở rộng?
TensorRT trước đây tối ưu hiệu năng bằng các heuristic được đúc kết từ những workload đại diện. Cách làm này giúp nhiều người dùng hưởng lợi tự động từ kinh nghiệm tối ưu của đội phát triển.
Tuy nhiên, khi model, GPU và yêu cầu triển khai đa dạng hơn, heuristic hữu ích cho một workload có thể gây suy giảm hiệu năng ở workload khác. Việc tiếp tục thêm các ngoại lệ theo từng model cũng khiến logic scheduling khó duy trì.
NVIDIA nêu ba vấn đề chính:
Heuristic phình to: mỗi quy tắc mới có thể tương tác với các quy tắc đã có.
Hiệu năng gắn với độ chính xác: các lựa chọn như reduced precision có thể tăng tốc nhưng tạo khác biệt số học.
Nhu cầu tùy biến theo model và phần cứng: lựa chọn tốt cho một model hoặc GPU không nhất thiết phù hợp với môi trường khác.
Global Performance Tuner được định vị như một cách bổ sung cho heuristic: thay vì cố đưa mọi kinh nghiệm vào một chiến lược chung, TensorRT có thể tìm kiếm cấu hình phù hợp hơn cho từng trường hợp.
Điều đội vận hành GPU cần lưu ý
Với hệ thống inference nội bộ, thông điệp chính là không nên coi engine là kết quả hoàn toàn cố định chỉ vì model đầu vào không đổi. Hiệu năng phụ thuộc vào tổ hợp lựa chọn trong quá trình build và vào môi trường chạy.
Bài viết cũng nhấn mạnh rằng runtime chịu ảnh hưởng bởi nhiều điều kiện, như dữ liệu đầu vào, thiết bị đích, software stack, xung nhịp GPU, nhiệt độ, trạng thái điện năng và tải hệ thống. Trong thực tế, không phải mọi biến số đều được kiểm soát hoàn toàn, nên phép đo thời gian chạy có thể có nhiễu.
Vì thế, khi so sánh engine, cần hiểu kết quả như một đánh giá gắn với điều kiện đo cụ thể, thay vì một con số có thể áp dụng nguyên trạng cho mọi máy chủ hay mọi workload.
Kết luận
Global Performance Tuner trong TensorRT 11.1 chuyển trọng tâm từ một build route mặc định sang tìm kiếm nhiều cấu hình engine. Mục tiêu không chỉ là chọn thành phần nhanh hơn, mà là chọn toàn bộ engine có hiệu năng end-to-end tốt nhất trong khi vẫn đáp ứng ràng buộc độ chính xác.
Phần 1 của loạt bài NVIDIA tập trung vào cách đặt vấn đề và khung tư duy cho tối ưu compiler. Phần tiếp theo được giới thiệu sẽ đi sâu hơn vào thuật toán, kiến trúc và các thực hành liên quan.