NRL Logo
Neural VN

Tìm hiểu về TensorRT - thư viện tối ưu thực thi mô hình AI trên phần cứng NVIDIA

1/3/20237phút đọc

TensorRT

Learning

Lý thuyết

1. TensorRT là gì?

Untitled

TensorRT là một thư viện tối ưu hóa mô hình mạng nơ-ron. Nó được phát triển bởi NVIDIA và được thiết kế để giúp tăng tốc độ xử lý mạng nơ-ron trên GPU của NVIDIA.

TensorRT hỗ trợ các kiến trúc mạng nơ-ron phổ biến như Convolutional Neural Networks (CNNs), Recurrent Neural Networks (RNNs) và mạng nơ-ron đầy đủ (fully connected neural networks). Nó cũng hỗ trợ các định dạng dữ liệu đầu vào phổ biến như TensorFlow, ONNX và Caffe.

Với TensorRT, các mô hình mạng nơ-ron có thể được tối ưu hóa để chạy nhanh hơn trên GPU của NVIDIA, làm giảm thời gian xử lý và tiêu thụ năng lượng, cho phép các ứng dụng AI và Deep Learning chạy nhanh hơn và hiệu quả hơn.

2. Các ưu điểm của TensorRT

  1. Tăng tốc model lên tới 36 lần TensorRT hoạt động nhanh hơn tới 36 lần so với việc sử dụng CPU trong quá trình suy luận, cho phép bạn tối ưu hóa các mô hình mạng thần kinh được đào tạo trên tất cả các framework, triển khai cho máy chủ dữ liệu quy mô lớn, hoặc các nền tảng thiêt bị nhúng (edge device).

  2. Tối ưu hiệu suất model TensorRT được xây dựng tính toán song song NVIDIA CUDA, cho phép bạn tối ưu hóa suy luận bằng cách tận dụng các thư viện, công cụ phát triển và công nghệ trong NVIDIA AI.

  3. Tăng tốc với mọi workload TensorRT cung cấp INT8, FP16, FP32 để tăng tốc tốc độ xử lí và đánh đổi bởi độ chính xác

  4. Triển khai với khả năng scale bằng Triton

    Các mô hình được tối ưu hóa của TensorRT có thể được triển khai và scale với NVIDIA Triton. Ưu điểm của việc sử dụng Triton là thông lượng cao với việc thiết lập lịch trình hợp lí để có thể xử lí song song các request cũng như việc xử dụng model với batching bằng việc gom các requests.

3. Cơ chế tối ưu của TensorRT

TensorRT cung cấp nhiều kỹ thuật tối ưu hóa để giảm thiểu số lượng phép tính cần thiết để tính toán kết quả và tăng tốc độ chạy mô hình. Sau đây là một số kỹ thuật tối ưu hóa của TensorRT:

  1. Lượng tử hóa (Quantization): Kỹ thuật này giảm kích thước của các tham số của mô hình bằng cách giảm số lượng bit được sử dụng để biểu diễn chúng. Việc giảm kích thước này giúp giảm lượng dữ liệu được truyền qua mạng và tăng tốc độ tính toán trên GPU.
  2. Cắt tỉa (Pruning): Kỹ thuật này loại bỏ các trọng số không cần thiết trong mô hình bằng cách đặt chúng bằng 0. Các trọng số này có thể được xác định bằng cách sử dụng các thuật toán như L1 regularization hoặc Taylor approximation. Việc loại bỏ các trọng số không cần thiết giảm số lượng phép tính cần thiết để tính toán kết quả và tăng tốc độ tính toán trên GPU.
  3. Kết hợp (Fusion): Kỹ thuật này kết hợp các phép tính nhỏ thành một phép tính lớn để giảm số lượng phép tính cần thiết để tính toán kết quả. Các phép tính này có thể là convolution, pooling, activation function hoặc element-wise operations.
  4. Tự động tối ưu nhân (Kernel auto-tuning): Kỹ thuật này tìm kiếm kernel tốt nhất để tính toán các phép tính trên GPU bằng cách thử nghiệm nhiều kernel với các thông số khác nhau và chọn kernel có tốc độ tính toán nhanh nhất.
  5. Tinh chỉnh độ chính xác (Precision calibration): Kỹ thuật này tìm kiếm các giá trị độ chính xác tốt nhất để tính toán kết quả. Việc lựa chọn giá trị độ chính xác phù hợp giúp giảm số lượng phép tính cần thiết để tính toán kết quả và tăng tốc độ tính toán trên GPU.

Untitled

Thực hành

1. Cài đặt TensorRT trên ubuntu

Khuyên bạn nên chạy trên ubuntu 20.04 hoặc 22.04. Có GPU hỗ trợ CUDA thường các dòng GPU của NVIDIA.

a) Cài đặt nvidia driver

ubuntu-drivers devices # check driver của card đồ họa
#example
#== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
#modalias : pci:v000010DEd00001F95sv00001028sd0000097Dbc03sc02i00
#vendor   : NVIDIA Corporation
#model    : TU117M [GeForce GTX 1650 Ti Mobile]
#driver   : nvidia-driver-440 - distro non-free recommended
#driver   : xserver-xorg-video-nouveau - distro free builtin

sudo apt install nvidia-driver-440 # Cài đặt driver mà được khuyến nghị

b) Cài đặt Cuda

Vào link chọn theo version ubuntu để lấy kịch bản (script) cai đặt như hình vẽ:

Untitled

Sau đó cài đặt cuda-toolkit:

#Install by apt
sudo apt install nvidia-cuda-toolkit
#Check cuda-toolkit
nvidia-smi

c) Cài đặt cuDNN

Vào link để tải đăng nhập và tải bản cuDNN phù hợp với version cuda-toolkit

Untitled

Gợi ý : Nên chọn bản Local Installer for Ubuntu20.04 x86_64 (Deb)

# Cài file deb
sudo dpkg -i cudnn-local-repo-${OS}-8.x.x.x_1.0-1_amd64.deb
# Import the CUDA GPG key.
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
# Refresh the repository metadata.
sudo apt-get update
# Install the runtime library.
sudo apt-get install libcudnn8=8.x.x.x-1+cudaX.Y

d) Cài đặt TensorRT

Hướng dẫn tại link hoặc theo các bước sau:

  • Vào link và tải tensorRT (khuyên bạn tải bản TensorRT 8, TensorRT 8.5 GA for Ubuntu 20.04 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7 and 11.8 DEB local repo Package)
  • Cài đặt file.deb và cài đặt TensorRT trên Python:
os="ubuntuxx04"
tag="8.x.x-cuda-x.x"
sudo dpkg -i nv-tensorrt-local-repo-${os}-${tag}_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-${os}-${tag}/*-keyring.gpg /usr/share/keyrings/

sudo apt-get update
sudo apt-get install tensorrt
sudo apt-get install python3-libnvinfer-dev
pip3 install tensorrt
  • Kiểm tra bằng cách import tensorrt trong python

Lỗi chưa cài đặt thành công

Lỗi chưa cài đặt thành công

Cài đặt thành công

Cài đặt thành công

2. Thực hành với mô hình đã đào tạo sẵn của Pytorch

a) Một số yêu cầu

  • Máy có GPU và cài thành công TensorRT
  • Có cài đặt jupyter-notebook để phục vụ phân tích từng đoạn code

b) Thực hành chuyển đổi mô hình Pytorch sang ONNX và TensorRT

Các bạn có thể tham khảo qua ví dụ ở notebook mà mình để ở đây :

  • Ví dụ 1 (link): Cách sử dụng Torch từ mô hình đào tạo sẵn của Torchvision.
  • Ví dụ 2 (link): Cách chuyển đổi mô hình từ Pytorch sang ONNX và sang TensorRT.

Vì để có thể hiểu từng bước chạy nên mình sử dụng jupyter-notebook để có thể mô tả cụ thể từng bước.

Chú ý : Trong trường hợp bạn nào chưa cài jupyter-notebook thì có thể sử dụng cú pháp

pip3 install jupyter-notebook # cài đặt jupyter-notebook
jupyter-notebook # chạy jupyter-notebo

c) Thực hành sử dụng Yolov8 bằng Pytorch, ONNX, TensorRT

Các bạn tham khảo tại notebook tại đây. Bài này mình chỉ hướng dẫn cách chuyển đổi mô hình và dùng YOLOv8 với 3 frameworks(Pytorch, ONNX, TensorRT) bằng mô hình đã huấn luyện sẵn theo bài viết gốc. Để hiểu kĩ hơn bạn có thể ghé qua bài gốc để đọc.

Tài liệu tham khảo

https://github.com/ultralytics/ultralytics

https://docs.nvidia.com/deeplearning/tensorrt/sample-support-guide/index.html

https://pytorch.org/TensorRT/_notebooks/Resnet50-example.html

https://learnopencv.com/how-to-convert-a-model-from-pytorch-to-tensorrt-and-speed-up-inference/