Đo lường hiệu suất

Công cụ điểm chuẩn

Các công cụ đo điểm chuẩn TensorFlow Lite hiện đang đo lường và tính toán số liệu thống kê cho các số liệu hiệu suất quan trọng sau:

  • Thời gian khởi tạo
  • Thời gian suy luận của trạng thái khởi động
  • Thời gian suy luận của trạng thái ổn định
  • Sử dụng bộ nhớ trong thời gian khởi tạo
  • Tổng mức sử dụng bộ nhớ

Các công cụ đo điểm chuẩn có sẵn dưới dạng ứng dụng đo điểm chuẩn cho Android và iOS cũng như dưới dạng tệp nhị phân dòng lệnh gốc và tất cả chúng đều có chung logic đo lường hiệu suất cốt lõi. Lưu ý rằng các tùy chọn có sẵn và định dạng đầu ra hơi khác nhau do sự khác biệt trong môi trường thời gian chạy.

Ứng dụng điểm chuẩn Android

Có hai tùy chọn sử dụng công cụ benchmark với Android. Một là tệp nhị phân chuẩn gốc và một là ứng dụng chuẩn Android, thước đo tốt hơn về cách mô hình sẽ hoạt động trong ứng dụng. Dù bằng cách nào, các con số từ công cụ đo điểm chuẩn vẫn sẽ hơi khác so với khi chạy suy luận với mô hình trong ứng dụng thực tế.

Ứng dụng điểm chuẩn Android này không có giao diện người dùng. Cài đặt và chạy nó bằng cách sử dụng lệnh adb và truy xuất kết quả bằng cách sử dụng lệnh adb logcat .

Tải xuống hoặc xây dựng ứng dụng

Tải xuống các ứng dụng đo điểm chuẩn Android được tạo sẵn hàng đêm bằng các liên kết bên dưới:

Đối với các ứng dụng điểm chuẩn Android hỗ trợ hoạt động TF thông qua Flex delegate , hãy sử dụng các liên kết bên dưới:

Bạn cũng có thể xây dựng ứng dụng từ nguồn bằng cách làm theo các hướng dẫn sau.

Chuẩn bị điểm chuẩn

Trước khi chạy ứng dụng benchmark, hãy cài đặt ứng dụng và đẩy tệp mô hình vào thiết bị như sau:

adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp

Chạy điểm chuẩn

adb shell am start -S \
  -n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
  --es args '"--graph=/data/local/tmp/your_model.tflite \
              --num_threads=4"'

graph là một tham số bắt buộc.

  • đồ graph : string
    Đường dẫn đến tệp mô hình TFLite.

Bạn có thể chỉ định thêm các tham số tùy chọn để chạy điểm chuẩn.

  • num_threads : int (mặc định=1)
    Số lượng luồng sử dụng để chạy trình thông dịch TFLite.
  • use_gpu : bool (mặc định=false)
    Sử dụng đại biểu GPU .
  • use_nnapi : bool (mặc định=false)
    Sử dụng đại biểu NNAPI .
  • use_xnnpack : bool (mặc định= false )
    Sử dụng đại biểu XNNPACK .
  • use_hexagon : bool (mặc định= false )
    Sử dụng đại biểu lục giác .

Tùy thuộc vào thiết bị bạn đang sử dụng, một số tùy chọn này có thể không khả dụng hoặc không có tác dụng. Tham khảo các thông số để biết thêm thông số hiệu suất mà bạn có thể chạy với ứng dụng điểm chuẩn.

Xem kết quả bằng lệnh logcat :

adb logcat | grep "Inference timings"

Kết quả benchmark được báo cáo như sau:

... tflite  : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2

Điểm chuẩn nhị phân gốc

Công cụ điểm chuẩn cũng được cung cấp dưới dạng benchmark_model nhị phân gốc. Bạn có thể thực thi công cụ này từ dòng lệnh shell trên Linux, Mac, thiết bị nhúng và thiết bị Android.

Tải xuống hoặc xây dựng tệp nhị phân

Tải xuống các tệp nhị phân dòng lệnh gốc được tạo sẵn hàng đêm bằng cách nhấp vào các liên kết bên dưới:

Đối với các tệp nhị phân dựng sẵn hàng đêm hỗ trợ hoạt động TF thông qua Flex delegate , hãy sử dụng các liên kết bên dưới:

Để đo điểm chuẩn với đại biểu TensorFlow Lite Hexagon , chúng tôi cũng đã tạo sẵn các tệp libhexagon_interface.so cần thiết (xem tại đây để biết chi tiết về tệp này). Sau khi tải xuống tệp của nền tảng tương ứng từ các liên kết bên dưới, vui lòng đổi tên tệp thành libhexagon_interface.so .

Bạn cũng có thể xây dựng tệp nhị phân điểm chuẩn gốc từ nguồn trên máy tính của mình.

bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model

Để xây dựng bằng chuỗi công cụ NDK của Android, trước tiên bạn cần thiết lập môi trường xây dựng bằng cách làm theo hướng dẫn này hoặc sử dụng hình ảnh docker như được mô tả trong hướng dẫn này.

bazel build -c opt --config=android_arm64 \
  //tensorflow/lite/tools/benchmark:benchmark_model

Chạy điểm chuẩn

Để chạy điểm chuẩn trên máy tính của bạn, hãy thực thi tệp nhị phân từ trình bao.

path/to/downloaded_or_built/benchmark_model \
  --graph=your_model.tflite \
  --num_threads=4

Bạn có thể sử dụng cùng một bộ tham số như đã đề cập ở trên với tệp nhị phân dòng lệnh gốc.

Hoạt động mô hình hồ sơ

Tệp nhị phân của mô hình điểm chuẩn cũng cho phép bạn lập hồ sơ hoạt động của mô hình và nhận thời gian thực hiện của từng toán tử. Để thực hiện việc này, hãy chuyển cờ --enable_op_profiling=true cho benchmark_model trong khi gọi. Chi tiết được giải thích ở đây .

Nhị phân điểm chuẩn gốc cho nhiều tùy chọn hiệu suất trong một lần chạy

Một tệp nhị phân C++ đơn giản và thuận tiện cũng được cung cấp để đánh giá nhiều tùy chọn hiệu suất trong một lần chạy. Hệ nhị phân này được xây dựng dựa trên công cụ đo điểm chuẩn đã nói ở trên, công cụ này chỉ có thể đo điểm chuẩn cho một tùy chọn hiệu suất duy nhất tại một thời điểm. Chúng chia sẻ cùng một quy trình xây dựng/cài đặt/chạy, nhưng tên mục tiêu BUILD của tệp nhị phân này là benchmark_model_performance_options và cần có một số tham số bổ sung. Một tham số quan trọng cho nhị phân này là:

perf_options_list : string (mặc định='all')
Danh sách các tùy chọn hiệu suất TFLite được phân tách bằng dấu phẩy để đo điểm chuẩn.

Bạn có thể nhận các tệp nhị phân dựng sẵn hàng đêm cho công cụ này như được liệt kê bên dưới:

Ứng dụng điểm chuẩn iOS

Để chạy benchmark trên thiết bị iOS, bạn cần xây dựng ứng dụng từ nguồn . Đặt tệp mô hình TensorFlow Lite vào thư mục benchmark_data của cây nguồn và sửa đổi tệp benchmark_params.json . Các tệp đó được đóng gói vào ứng dụng và ứng dụng sẽ đọc dữ liệu từ thư mục. Hãy truy cập ứng dụng điểm chuẩn iOS để biết hướng dẫn chi tiết.

Điểm chuẩn hiệu suất cho các mô hình nổi tiếng

Phần này liệt kê các điểm chuẩn hiệu suất của TensorFlow Lite khi chạy các mô hình phổ biến trên một số thiết bị Android và iOS.

Điểm chuẩn hiệu suất của Android

Các số điểm chuẩn hiệu suất này được tạo bằng tệp nhị phân điểm chuẩn gốc .

Đối với điểm chuẩn của Android, ái lực CPU được đặt để sử dụng các lõi lớn trên thiết bị để giảm phương sai (xem chi tiết ).

Nó giả định rằng các mô hình đã được tải xuống và giải nén vào thư mục /data/local/tmp/tflite_models . Tệp nhị phân điểm chuẩn được xây dựng bằng cách sử dụng các hướng dẫn này và được coi là nằm trong thư mục /data/local/tmp .

Để chạy điểm chuẩn:

adb shell /data/local/tmp/benchmark_model \
  --num_threads=4 \
  --graph=/data/local/tmp/tflite_models/${GRAPH} \
  --warmup_runs=1 \
  --num_runs=50

Để chạy với đại biểu nnapi, hãy đặt --use_nnapi=true . Để chạy với đại biểu GPU, hãy đặt --use_gpu=true .

Các giá trị hiệu suất bên dưới được đo trên Android 10.

Tên mẫu Thiết bị CPU, 4 luồng GPU NNAPI
Mobilenet_1.0_224(thả nổi) Pixel 3 23,9 mili giây 6,45 mili giây 13,8 mili giây
Pixel 4 14,0 mili giây 9,0 mili giây 14,8 mili giây
Mobilenet_1.0_224 (số lượng) Pixel 3 13,4 mili giây --- 6,0 mili giây
Pixel 4 5,0 mili giây --- 3,2 mili giây
NASNet di động Pixel 3 56 mili giây --- 102 mili giây
Pixel 4 34,5 mili giây --- 99,0 mili giây
BópNet Pixel 3 35,8 mili giây 9,5 mili giây 18,5 mili giây
Pixel 4 23,9 mili giây 11,1 mili giây 19,0 mili giây
Khởi đầu_ResNet_V2 Pixel 3 422 mili giây 99,8 mili giây 201 mili giây
Pixel 4 272,6 mili giây 87,2 mili giây 171,1 mili giây
Khởi đầu_V4 Pixel 3 486 mili giây 93 mili giây 292 mili giây
Pixel 4 324,1 mili giây 97,6 mili giây 186,9 mili giây

Điểm chuẩn hiệu suất iOS

Những con số điểm chuẩn hiệu suất này được tạo bằng ứng dụng điểm chuẩn iOS .

Để chạy điểm chuẩn iOS, ứng dụng điểm chuẩn đã được sửa đổi để bao gồm mô hình phù hợp và benchmark_params.json đã được sửa đổi để đặt num_threads thành 2. Để sử dụng đại biểu GPU, các tùy chọn "use_gpu" : "1""gpu_wait_type" : "aggressive" là cũng được thêm vào benchmark_params.json .

Tên mẫu Thiết bị CPU, 2 luồng GPU
Mobilenet_1.0_224(thả nổi) iPhone XS 14,8 mili giây 3,4 mili giây
Mobilenet_1.0_224 (số lượng) iPhone XS 11 mili giây ---
NASNet di động iPhone XS 30,4 mili giây ---
BópNet iPhone XS 21,1 mili giây 15,5 mili giây
Khởi đầu_ResNet_V2 iPhone XS 261,1 mili giây 45,7 mili giây
Khởi đầu_V4 iPhone XS 309 mili giây 54,4 mili giây

Theo dõi nội bộ TensorFlow Lite

Theo dõi nội bộ TensorFlow Lite trong Android

Các sự kiện nội bộ từ trình thông dịch TensorFlow Lite của ứng dụng Android có thể được ghi lại bằng các công cụ theo dõi của Android . Chúng là những sự kiện giống nhau với API Android Trace , do đó, các sự kiện được ghi lại từ mã Java/Kotlin sẽ được xem cùng với các sự kiện nội bộ của TensorFlow Lite.

Một số ví dụ về các sự kiện là:

  • Lời gọi toán tử
  • Sửa đổi biểu đồ theo đại biểu
  • Phân bổ tensor

Trong số các tùy chọn khác nhau để ghi lại dấu vết, hướng dẫn này bao gồm Trình phân tích CPU của Android Studio và ứng dụng Theo dõi hệ thống. Tham khảo công cụ dòng lệnh Perfetto hoặc công cụ dòng lệnh Systrace để biết các tùy chọn khác.

Thêm sự kiện theo dõi trong mã Java

Đây là đoạn mã từ ứng dụng ví dụ Phân loại hình ảnh . Trình thông dịch TensorFlow Lite chạy trong phần recognizeImage/runInference . Bước này là tùy chọn nhưng rất hữu ích để giúp nhận biết nơi thực hiện lệnh gọi suy luận.

  Trace.beginSection("recognizeImage");
  ...
  // Runs the inference call.
  Trace.beginSection("runInference");
  tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
  Trace.endSection();
  ...
  Trace.endSection();

Kích hoạt tính năng theo dõi TensorFlow Lite

Để bật tính năng theo dõi TensorFlow Lite, hãy đặt thuộc tính hệ thống Android debug.tflite.trace thành 1 trước khi khởi động ứng dụng Android.

adb shell setprop debug.tflite.trace 1

Nếu thuộc tính này đã được đặt khi khởi chạy trình thông dịch TensorFlow Lite, thì các sự kiện chính (ví dụ: lệnh gọi toán tử) từ trình thông dịch sẽ được truy tìm.

Sau khi bạn đã ghi lại tất cả dấu vết, hãy tắt tính năng theo dõi bằng cách đặt giá trị thuộc tính thành 0.

adb shell setprop debug.tflite.trace 0

Trình phân tích CPU của Android Studio

Ghi lại dấu vết bằng Trình phân tích CPU của Android Studio bằng cách làm theo các bước bên dưới:

  1. Chọn Chạy > Hồ sơ 'ứng dụng' từ các menu trên cùng.

  2. Nhấp vào bất kỳ đâu trong dòng thời gian CPU khi cửa sổ Profiler xuất hiện.

  3. Chọn 'Theo dõi cuộc gọi hệ thống' trong số các chế độ Cấu hình CPU.

    Chọn 'Theo dõi cuộc gọi hệ thống'

  4. Nhấn nút 'Ghi'.

  5. Nhấn nút 'Dừng'.

  6. Điều tra kết quả dấu vết.

    Dấu vết của Android Studio

Trong ví dụ này, bạn có thể xem thứ bậc của các sự kiện trong một chuỗi và số liệu thống kê cho từng thời gian của người vận hành, đồng thời xem luồng dữ liệu của toàn bộ ứng dụng giữa các chuỗi.

Ứng dụng theo dõi hệ thống

Ghi lại dấu vết mà không cần Android Studio bằng cách làm theo các bước chi tiết trong ứng dụng Theo dõi hệ thống .

Trong ví dụ này, các sự kiện TFLite tương tự đã được ghi lại và lưu sang định dạng Perfetto hoặc Systrace tùy thuộc vào phiên bản của thiết bị Android. Các tệp dấu vết đã ghi có thể được mở trong giao diện người dùng Perfetto .

Dấu vết Perfetto

Theo dõi nội bộ TensorFlow Lite trong iOS

Các sự kiện nội bộ từ trình thông dịch TensorFlow Lite của ứng dụng iOS có thể được ghi lại bằng công cụ Instruments đi kèm với Xcode. Chúng là các sự kiện biển chỉ dẫn iOS, do đó, các sự kiện được ghi lại từ mã Swift/Objective-C sẽ được nhìn thấy cùng với các sự kiện nội bộ của TensorFlow Lite.

Một số ví dụ về các sự kiện là:

  • Lời gọi toán tử
  • Sửa đổi biểu đồ theo đại biểu
  • Phân bổ tensor

Kích hoạt tính năng theo dõi TensorFlow Lite

Đặt biến môi trường debug.tflite.trace bằng cách thực hiện theo các bước bên dưới:

  1. Chọn Sản phẩm > Lược đồ > Chỉnh sửa Lược đồ... từ menu trên cùng của Xcode.

  2. Nhấp vào 'Hồ sơ' ở khung bên trái.

  3. Bỏ chọn hộp kiểm 'Sử dụng đối số và biến môi trường của hành động Chạy'.

  4. Thêm debug.tflite.trace trong phần 'Biến môi trường'.

    Đặt biến môi trường

Nếu bạn muốn loại trừ các sự kiện TensorFlow Lite khi lập hồ sơ ứng dụng iOS, hãy tắt tính năng theo dõi bằng cách xóa biến môi trường.

Công cụ XCode

Ghi lại dấu vết bằng cách làm theo các bước dưới đây:

  1. Chọn Sản phẩm > Hồ sơ từ menu trên cùng của Xcode.

  2. Nhấp vào Ghi nhật ký giữa các mẫu hồ sơ khi công cụ Dụng cụ khởi chạy.

  3. Nhấn nút 'Bắt ​​đầu'.

  4. Nhấn nút 'Dừng'.

  5. Nhấp vào 'os_signpost' để mở rộng các mục hệ thống con Ghi nhật ký hệ điều hành.

  6. Nhấp vào hệ thống con Ghi nhật ký hệ điều hành 'org.tensorflow.lite'.

  7. Điều tra kết quả dấu vết.

    Dấu vết công cụ Xcode

Trong ví dụ này, bạn có thể thấy thứ bậc của các sự kiện và số liệu thống kê cho từng thời gian của người vận hành.

Sử dụng dữ liệu theo dõi

Dữ liệu theo dõi cho phép bạn xác định các tắc nghẽn về hiệu suất.

Dưới đây là một số ví dụ về thông tin chi tiết mà bạn có thể nhận được từ trình phân tích hồ sơ và các giải pháp tiềm năng để cải thiện hiệu suất:

  • Nếu số lõi CPU khả dụng nhỏ hơn số luồng suy luận thì chi phí lập kế hoạch CPU có thể dẫn đến hiệu suất dưới mức trung bình. Bạn có thể lên lịch lại các tác vụ đòi hỏi nhiều CPU khác trong ứng dụng của mình để tránh chồng chéo với suy luận mô hình của bạn hoặc điều chỉnh số lượng luồng trình thông dịch.
  • Nếu các toán tử không được ủy quyền đầy đủ thì một số phần của biểu đồ mô hình sẽ được thực thi trên CPU thay vì bộ tăng tốc phần cứng dự kiến. Bạn có thể thay thế các toán tử không được hỗ trợ bằng các toán tử được hỗ trợ tương tự.