Sử dụng TensorRT để suy luận nhanh hơn và giảm độ trễ cho Mô hình đào sâu

Tram Ho

TensorRT là gì ?

TensorRT là một thư viện được phát triển bởi NVIDIA nhằm cải thiện tốc độ inference, giảm độ trì truệ trên các thiết bị đồ họa NVIDIA(GPU). Nó có thể cải thiện tốc độ suy luận lên đến 2-4 lần so với các dịch vụ real-time và nhanh hơn gấp 30 lần so với hiệu suất của CPU.

Nội dung bài này chúng ta tập trung một số vấn đề sau đây:

  • Tại sao TensorRT cải thiện tốc độ inference
  • Việc tốc độ được cải thiện có cần đánh đổi cái gì không?
  • Làm sao để sử dụng TensorRT trên deep learning?

TensorRT cải thiện việc tối ưu như thế nào ?

TensorRT sẽ thực hiện 5 loại tối ưu để tăng hiệu suất inference. Chúng ta sẽ thỏa luận 5 loại này ở bên dưới.

 

1. Precision Calibration

Trong suốt quá trình training, các tham số và hàm kích hoạt activations trong độ chính xác FP32(Float Point 32) sẽ được convert về độ chính xác FP16 hoặc INT8. Việc tối ưu nó sẽ giảm độ trì truệ và tăng tốc độ suy luận nhưng phải trả một cái giá là phải giảm độ chính xác của model mặc dù không đáng kể. Trong nhận diện real-time thì đôi khi vịệt đánh đổi độ chính xác so với tốc độ suy luận là cần thiết.

2. Layer & Tensor Fusion

TensorRT nó sẽ gộp layer and tensor để tối ưu hóa bộ nhớ GPU và băng thông bởi việc gộp các nodel theo chiều dọc, chiều ngang hoặc cả hai.

  • Improve GPU utilization – less kernel launch overhead, better memory usage and bandwidth
  • Vertical fusion = Combine sequential kernel calls
  • Horizontal fusion = Combine same kernels that have common input but different weights

3. Kernel auto-tuning

Trong quá trình tối ưu model, một vài kernel riêng dành cho việc tối ưu sẽ thực thi trong suốt tiến trình.

  • There are multiple low-level algorithms/implementations for common operations
  • TensorRT selects the optimal kernels based on your parameters e.g: batch_size, filter-size, input data size.
  • TensorRT selects the optimal kernel based on your target platform.

4. Dynamic Tensor Memory

  • Allocates just the memory required for each tensor and only for the duration of its usage
  • Reduces memory footprint and improves memory re-use

5. Multiple Stream Execution

  • Allows processing multiple input streams in parallel

Workflow

Để áp dụng TensorRT trên deep learning thì chúng ta cần phải convert model tới model-TRT theo như luồng biểu đồ sao đây.

Code

1. Cài đặt môi trường TensorRT

Để cài đặt TensorRT trên hệ thống của bạn thì cần một số yêu cầu sau đây:

  • NVIDIA-GPU
  • Tensorflow-GPU >=2.0

2. Convert model ResNet-50 to TF-TRT

Các bạn có thể convert các model khác tới TensorRT, ở đây mình lấy ví dụ là ResNet-50.

3. Load lại model đã convert

Kết quả

Để so sánh kết quả của việc sử dụng TensorRT với việc inference native thì mình Inference ResNet-50 trên TF-TRT FP32, FP16, INT8 và native.

FP16FP32Native
Average step time: 2.1 msecAverage step time: 2.5 msecAverage step time: 4.1 msec
Average throughput: 244248 samples/secAverage throughput: 240145 samples/secAverage throughput: 126328 samples/sec

Qua đó ta thấy được việc khi convert model sang TensorRT sẽ tăng tốc độ inference và giảm độ trì truệ khá đáng kể so với inference truyền thống.

Tài liệu tham khảo

Toàn bộ code : https://colab.research.google.com/drive/15m95GzznIoCRn1XnMQXd9L-onpJiCWM3?usp=sharing
Link tài liệu tham khảo :

Chia sẻ bài viết ngay