Bỏ để qua phần nội dung

Hướng dẫn bắt đầu nhanh: NVIDIA Jetson với Ultralytics YOLOv8

Hướng dẫn toàn diện này cung cấp hướng dẫn chi tiết để triển khai Ultralytics YOLOv8 trên các thiết bị NVIDIA Jetson . Ngoài ra, nó giới thiệu các điểm chuẩn hiệu suất để chứng minh khả năng của YOLOv8 trên các thiết bị nhỏ và mạnh mẽ này.

Hệ sinh thái NVIDIA Jetson

Ghi

Hướng dẫn này đã được thử nghiệm với Seeed Studio reComputer J4012 dựa trên NVIDIA Jetson Orin NX 16GB chạy phiên bản JetPack ổn định mới nhất của JP5.1.3. Sử dụng hướng dẫn này cho các thiết bị Jetson cũ hơn như Jetson Nano (điều này chỉ hỗ trợ cho đến JP4.6.4) có thể không được đảm bảo hoạt động. Tuy nhiên, điều này dự kiến sẽ hoạt động trên tất cả các thiết bị Jetson Orin, Xavier NX, AGX Xavier chạy JP5.1.3.

NVIDIA Jetson là gì?

NVIDIA Jetson là một loạt các bảng tính nhúng được thiết kế để đưa điện toán AI (trí tuệ nhân tạo) tăng tốc lên các thiết bị biên. Các thiết bị nhỏ gọn và mạnh mẽ này được xây dựng xung quanh kiến trúc GPU của NVIDIA và có khả năng chạy các thuật toán AI phức tạp và các mô hình học sâu trực tiếp trên thiết bị mà không cần phải dựa vào tài nguyên điện toán đám mây. Bảng Jetson thường được sử dụng trong robot, xe tự hành, tự động hóa công nghiệp và các ứng dụng khác, nơi suy luận AI cần được thực hiện cục bộ với độ trễ thấp và hiệu quả cao. Ngoài ra, các bo mạch này dựa trên kiến trúc ARM64 và chạy với công suất thấp hơn so với các thiết bị điện toán GPU truyền thống.

So sánh dòng NVIDIA Jetson

Jetson Orin là phiên bản mới nhất của gia đình NVIDIA Jetson dựa trên kiến trúc NVIDIA Ampere, mang lại hiệu suất AI được cải thiện đáng kể khi so sánh với các thế hệ trước. Bảng dưới đây so sánh một số thiết bị Jetson trong hệ sinh thái.

Máy bay phản lực AGX Orin 64GB Máy bay phản lực Orin NX 16GB Jetson Orin Nano 8GB Máy bay phản lực AGX Xavier Máy bay phản lực Xavier NX Jetson Nano
Hiệu suất AI 275 NGỌN 100 NGỌN 40 ĐẦU 32 NGỌN 21 NGỌN 472 GFLOPS
GPU GPU kiến trúc NVIDIA Ampere 2048 lõi với 64 Tensor Lõi GPU kiến trúc NVIDIA Ampere 1024 lõi với 32 Tensor Lõi GPU kiến trúc NVIDIA Ampere 1024 lõi với 32 Tensor Lõi GPU kiến trúc NVIDIA Volta 512 lõi với 64 Tensor Lõi GPU kiến trúc NVIDIA Volta™ 384 lõi với 48 Tensor Lõi GPU kiến trúc NVIDIA Maxwell™ 128 lõi
Tần số tối đa GPU 1.3 GHz 918 MHz 625 MHz 1377 MHz 1100 MHz 921MHz
CPU 12 lõi NVIDIA Arm® Cortex A78AE v8.2 CPU 64-bit 3MB L2 + 6MB L3 8 lõi NVIDIA Arm® Cortex A78AE v8.2 CPU 64-bit 2MB L2 + 4MB L3 6 lõi Arm Cortex-A78AE®® v8.2 CPU 64-bit 1.5MB L2 + 4MB L3 8 lõi NVIDIA Carmel Arm®v8.2 CPU 64-bit 8MB L2 + 4MB L3 6 lõi NVIDIA Carmel Arm®v8.2 64-bit CPU 6MB L2 + 4MB L3 Bộ xử lý Quad-Core Arm® Cortex-A57® MPCore
Tần số tối đa của CPU 2.2 GHz 2.0 GHz 1.5 GHz 2.2 GHz 1.9 GHz 1.43GHz
Trí nhớ 64GB LPDDR5 256-bit 204.8GB/giây 16GB LPDDR5 128-bit 102.4GB/giây 8GB LPDDR5 128-bit 68 GB/giây 32GB 256-bit LPDDR4x 136.5GB/giây 8GB LPDDR128-bit4x 59.7GB/giây 4GB LPDDR4 64-bit 25.6GB/giây"

Để biết bảng so sánh chi tiết hơn, vui lòng truy cập phần Thông số kỹ thuật của trang NVIDIA Jetson chính thức.

NVIDIA JetPack là gì?

NVIDIA JetPack SDK cung cấp năng lượng cho các mô-đun Jetson là giải pháp toàn diện nhất và cung cấp môi trường phát triển đầy đủ để xây dựng các ứng dụng AI tăng tốc từ đầu đến cuối và rút ngắn thời gian đưa ra thị trường. JetPack bao gồm Jetson Linux với bộ nạp khởi động, nhân Linux, môi trường máy tính để bàn Ubuntu và một bộ thư viện hoàn chỉnh để tăng tốc điện toán GPU, đa phương tiện, đồ họa và thị giác máy tính. Nó cũng bao gồm các mẫu, tài liệu và công cụ dành cho nhà phát triển cho cả máy tính chủ và bộ công cụ dành cho nhà phát triển, đồng thời hỗ trợ các SDK cấp cao hơn như DeepStream để phân tích video trực tuyến, Isaac cho robot và Riva cho AI đàm thoại.

Flash JetPack đến NVIDIA Jetson

Bước đầu tiên sau khi chạm tay vào thiết bị NVIDIA Jetson là flash NVIDIA JetPack vào thiết bị. Có một số cách khác nhau để nhấp nháy thiết bị NVIDIA Jetson.

  1. Nếu bạn sở hữu Bộ công cụ phát triển NVIDIA chính thức như Jetson Orin Nano Developer Kit, bạn có thể truy cập liên kết này để tải xuống hình ảnh và chuẩn bị thẻ SD với JetPack để khởi động thiết bị.
  2. Nếu bạn sở hữu bất kỳ Bộ công cụ phát triển NVIDIA nào khác, bạn có thể truy cập liên kết này để flash JetPack vào thiết bị bằng Trình quản lý SDK.
  3. Nếu bạn sở hữu thiết bị Seeed Studio reComputer J4012, bạn có thể truy cập liên kết này để flash JetPack vào ổ SSD đi kèm.
  4. Nếu bạn sở hữu bất kỳ thiết bị bên thứ ba nào khác được cung cấp bởi mô-đun NVIDIA Jetson, bạn nên làm theo nhấp nháy dòng lệnh bằng cách truy cập liên kết này.

Ghi

Đối với các phương pháp 3 và 4 ở trên, sau khi flash hệ thống và khởi động thiết bị, vui lòng nhập "sudo apt update &&& sudo apt install nvidia-jetpack -y" trên thiết bị đầu cuối thiết bị để cài đặt tất cả các thành phần JetPack còn lại cần thiết.

Dựng Ultralytics

Có hai cách thiết lập Ultralytics gói trên NVIDIA Jetson để xây dựng dự án Thị giác máy tính tiếp theo của bạn. Bạn có thể sử dụng một trong số chúng.

Bắt đầu với Docker

Cách nhanh nhất để bắt đầu Ultralytics YOLOv8 trên NVIDIA Jetson là chạy với docker image dựng sẵn cho Jetson.

Thực hiện lệnh dưới đây để kéo container Docker và chạy trên Jetson. Điều này dựa trên l4t-pytorch Docker Image chứa PyTorch và Torchvision trong môi trường Python3.

t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t

Sau khi hoàn tất, hãy chuyển đến Dùng TensorRT trên phần NVIDIA Jetson.

Bắt đầu mà không cần Docker

Cài đặt Ultralytics Gói

Ở đây chúng tôi sẽ cài đặt gói ultralyics trên Jetson với các phụ thuộc tùy chọn để chúng tôi có thể xuất PyTorch mô hình sang các định dạng khác nhau. Chúng tôi sẽ chủ yếu tập trung vào NVIDIA TensorRT xuất khẩu vì TensoRT sẽ đảm bảo chúng tôi có thể đạt được hiệu suất tối đa từ các thiết bị Jetson.

  1. Cập nhật danh sách gói, cài đặt pip và nâng cấp lên mới nhất

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Cài đặt ultralytics Gói pip với các phụ thuộc tùy chọn

    pip install ultralytics[export]
    
  3. Khởi động lại thiết bị

    sudo reboot
    

Cài đặt PyTorch và Torchvision

Những điều trên ultralytics Cài đặt sẽ cài đặt Torch và Torchvision. Tuy nhiên, 2 gói này được cài đặt qua pip không tương thích để chạy trên nền tảng Jetson dựa trên kiến trúc ARM64. Do đó, chúng ta cần cài đặt thủ công dựng sẵn PyTorch bánh xe pip và biên dịch / cài đặt Torchvision từ nguồn.

  1. Gỡ cài đặt hiện đang được cài đặt PyTorch và Torchvision

    pip uninstall torch torchvision
    
  2. Cài đặt PyTorch 2.1.0 theo JP5.1.3

    sudo apt-get install -y libopenblas-base libopenmpi-dev
    wget https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl -O torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
    pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
    
  3. Cài đặt Torchvision v0.16.2 theo PyTorch v2.1.0

    sudo apt install -y libjpeg-dev zlib1g-dev
    git clone https://github.com/pytorch/vision torchvision
    cd torchvision
    git checkout v0.16.2
    python3 setup.py install --user
    

Ghé thăm PyTorch cho trang Jetson để truy cập tất cả các phiên bản khác nhau của PyTorch cho các phiên bản JetPack khác nhau. Để biết danh sách chi tiết hơn về PyTorch, khả năng tương thích Torchvision, hãy truy cập PyTorch và trang tương thích Torchvision.

Cài đặt onnxruntime-gpu

Các onnxruntime-GPU gói được lưu trữ trong PyPI không có aarch64 nhị phân cho Jetson. Vì vậy, chúng ta cần phải cài đặt thủ công gói này. Gói này là cần thiết cho một số hàng xuất khẩu.

Tất cả đều khác nhau onnxruntime-gpu các gói tương quan với các gói JetPack khác nhau và Python Các phiên bản được liệt kê Ở đây. Tuy nhiên, ở đây chúng tôi sẽ tải xuống và cài đặt onnxruntime-gpu 1.17.0 với Python3.8 hỗ trợ cho JetPack chúng tôi đang sử dụng cho hướng dẫn này.

wget https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl -O onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
pip install onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl

Ghi

onnxruntime-gpu sẽ tự động hoàn nguyên phiên bản numpy về phiên bản mới nhất. Vì vậy, chúng ta cần phải cài đặt lại numpy để 1.23.5 Để khắc phục sự cố bằng cách thực hiện:

pip install numpy==1.23.5

Dùng TensorRT trên NVIDIA Jetson

Trong số tất cả các định dạng xuất mô hình được hỗ trợ bởi Ultralytics, TensorRT mang lại hiệu suất suy luận tốt nhất khi làm việc với các thiết bị NVIDIA Jetson và khuyến nghị của chúng tôi là sử dụng TensorRT với Jetson. Chúng tôi cũng có một tài liệu chi tiết về TensorRT tại đây.

Chuyển đổi Model sang TensorRT và Chạy suy luận

Các YOLOv8n Mô hình trong PyTorch định dạng được chuyển đổi thành TensorRT để chạy suy luận với mô hình đã xuất.

Ví dụ

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')

# Export the model
model.export(format='engine')  # creates 'yolov8n.engine'

# Load the exported TensorRT model
trt_model = YOLO('yolov8n.engine')

# Run inference
results = trt_model('https://ultralytics.com/images/bus.jpg')
# Export a YOLOv8n PyTorch model to TensorRT format
yolo export model=yolov8n.pt format=engine  # creates 'yolov8n.engine'

# Run inference with the exported model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'

Ghi

Truy cập trang Xuất để truy cập các đối số bổ sung khi xuất mô hình sang các định dạng mô hình khác nhau

NVIDIA Jetson Orin YOLOv8 Điểm chuẩn

YOLOv8 Điểm chuẩn được điều hành bởi Ultralytics Nhóm trên 10 định dạng mô hình khác nhau đo tốc độ và độ chính xác: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel, TF Graphdef, TF Lite PaddlePaddle, NCNN. Điểm chuẩn được chạy trên Seeed Studio reComputer J4012 được cung cấp bởi thiết bị Jetson Orin NX 16GB ở độ chính xác FP32 với kích thước hình ảnh đầu vào mặc định là 640.

Biểu đồ so sánh

Mặc dù tất cả các mẫu xuất khẩu đều hoạt động với NVIDIA Jetson, chúng tôi chỉ bao gồm PyTorch, TorchScript, TensorRT cho biểu đồ so sánh bên dưới bởi vì, họ sử dụng GPU trên Jetson và được đảm bảo tạo ra kết quả tốt nhất. Tất cả các xuất khẩu khác chỉ sử dụng CPU và hiệu suất không tốt như ba lần trên. Bạn có thể tìm thấy điểm chuẩn cho tất cả các lần xuất khẩu trong phần sau biểu đồ này.

Hệ sinh thái NVIDIA Jetson

Bảng so sánh chi tiết

Bảng dưới đây thể hiện kết quả điểm chuẩn cho năm mô hình khác nhau (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) trên mười định dạng khác nhau (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel, TF Graphdef, TF Lite PaddlePaddle, NCNN), cho chúng tôi trạng thái, kích thước, số liệu mAP50-95 (B) và thời gian suy luận cho mỗi kết hợp.

Hiệu năng

Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (ms/im)
PyTorch 6.2 0.6381 14.3
TorchScript 12.4 0.6117 13.3
ONNX 12.2 0.6092 70.6
OpenVINO 12.3 0.6092 104.2
TensorRT 13.6 0.6117 8.9
TF SavedModel 30.6 0.6092 141.74
TF GraphDef 12.3 0.6092 199.93
TF Lite 12.3 0.6092 349.18
PaddlePaddle 24.4 0.6030 555
NCNN 12.2 0.6092 32
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (ms/im)
PyTorch 21.5 0.6967 18
TorchScript 43.0 0.7136 23.81
ONNX 42.8 0.7136 185.55
OpenVINO 42.9 0.7136 243.97
TensorRT 44.0 0.7136 14.82
TF SavedModel 107 0.7136 260.03
TF GraphDef 42.8 0.7136 423.4
TF Lite 42.8 0.7136 1046.64
PaddlePaddle 85.5 0.7140 1464
NCNN 42.7 0.7200 63
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (ms/im)
PyTorch 49.7 0.7370 36.4
TorchScript 99.2 0.7285 53.58
ONNX 99 0.7280 452.09
OpenVINO 99.1 0.7280 544.36
TensorRT 100.3 0.7285 33.21
TF SavedModel 247.5 0.7280 543.65
TF GraphDef 99 0.7280 906.63
TF Lite 99 0.7280 2758.08
PaddlePaddle 197.9 0.7280 3678
NCNN 98.9 0.7260 135
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (ms/im)
PyTorch 83.7 0.7768 61.3
TorchScript 167.2 0.7554 87.9
ONNX 166.8 0.7551 852.29
OpenVINO 167 0.7551 1012.6
TensorRT 168.4 0.7554 51.23
TF SavedModel 417.2 0.7551 990.45
TF GraphDef 166.9 0.7551 1649.86
TF Lite 166.9 0.7551 5652.37
PaddlePaddle 333.6 0.7551 7114.67
NCNN 166.8 0.7685 231.9
Định dạng Tình trạng Kích thước trên đĩa (MB) mAP50-95(B) Thời gian suy luận (ms/im)
PyTorch 130.5 0.7759 93
TorchScript 260.7 0.7472 135.1
ONNX 260.4 0.7479 1296.13
OpenVINO 260.6 0.7479 1502.15
TensorRT 261.8 0.7469 84.53
TF SavedModel 651.1 0.7479 1451.76
TF GraphDef 260.5 0.7479 4029.36
TF Lite 260.4 0.7479 8772.86
PaddlePaddle 520.8 0.7479 10619.53
NCNN 260.4 0.7646 376.38

Truy cập liên kết này để khám phá thêm các nỗ lực đo điểm chuẩn của Seeed Studio chạy trên các phiên bản khác nhau của phần cứng NVIDIA Jetson.

Tái tạo kết quả của chúng tôi

Để tái tạo những điều trên Ultralytics Điểm chuẩn trên tất cả các định dạng xuất đều chạy mã này:

Ví dụ

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data='coco8.yaml', imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

Lưu ý rằng kết quả đo điểm chuẩn có thể thay đổi dựa trên cấu hình phần cứng và phần mềm chính xác của hệ thống, cũng như khối lượng công việc hiện tại của hệ thống tại thời điểm chạy điểm chuẩn. Để có kết quả đáng tin cậy nhất, hãy sử dụng tập dữ liệu có số lượng hình ảnh lớn, tức là data='coco8.yaml' (4 val images), ordata = 'coco.yaml'' (5000 hình ảnh val).

Các phương pháp hay nhất khi sử dụng NVIDIA Jetson

Khi sử dụng NVIDIA Jetson, có một số phương pháp hay nhất cần tuân theo để cho phép hiệu suất tối đa khi NVIDIA Jetson đang chạy YOLOv8.

  1. Bật Chế độ nguồn MAX

    Bật Chế độ nguồn MAX trên Jetson sẽ đảm bảo tất cả các lõi CPU, GPU đều được bật.

    sudo nvpmodel -m 0
    
  2. Bật đồng hồ Jetson

    Kích hoạt Jetson Clocks sẽ đảm bảo tất cả các lõi CPU, GPU đều có xung nhịp ở tần số tối đa.

    sudo jetson_clocks
    
  3. Cài đặt ứng dụng Jetson Stats

    Chúng tôi có thể sử dụng ứng dụng thống kê jetson để theo dõi nhiệt độ của các thành phần hệ thống và kiểm tra các chi tiết hệ thống khác như xem CPU, GPU, RAM sử dụng, thay đổi chế độ nguồn, đặt thành xung nhịp tối đa, kiểm tra thông tin JetPack

    sudo apt update
    sudo pip install jetson-stats
    sudo reboot
    jtop
    

Thống kê Jetson

Các bước tiếp theo

Chúc mừng bạn đã thiết lập thành công YOLOv8 trên NVIDIA Jetson của bạn! Để tìm hiểu và hỗ trợ thêm, hãy truy cập thêm hướng dẫn tại Ultralytics YOLOv8 Tài liệu!



Đã tạo 2024-04-02, Cập nhật 2024-05-08
Tác giả: Burhan-Q (2), lakshanthad (2), glenn-jocher (2)

Ý kiến