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

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

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

  • Thời gian khởi động
  • 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
  • Mức sử dụng bộ nhớ trong thời gian khởi chạy
  • Mức sử dụng bộ nhớ tổng thể

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. Tất cả đều có cùng một logic đo lường hiệu suất cốt lõi. Xin lưu ý rằng các tuỳ chọn có sẵn và định dạng đầu ra hơi khác nhau do sự khác biệt về môi trường thời gian chạy.

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

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

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

Tải xuống hoặc tạo bản dựng ứng dụng

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

Đối với các ứng dụng đo điểm chuẩn Android hỗ trợ hoạt động TF thông qua uỷ quyền linh hoạt, hãy dùng các đường liên kết dưới đây:

Bạn cũng có thể tạo ứng dụng từ nguồn bằng cách làm theo instructions này.

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

Trước khi chạy ứng dụng đo điểm chuẩn, hãy cài đặt ứng dụng rồi đẩ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

Tiến hành đo đ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à 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 tham số không bắt buộc để chạy điểm chuẩn.

  • num_threads: int (default=1)
    Số luồng cần sử dụng để chạy trình phiên dịch TFLite.
  • use_gpu: bool (default=false)
    Sử dụng uỷ quyền GPU.
  • use_xnnpack: bool (default=false)
    Sử dụng Đại biểu XNNPACK.

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

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

adb logcat | grep "Inference timings"

Kết quả điểm chuẩn đượ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

Tệp nhị phân điểm chuẩn gốc

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

Tải xuống hoặc tạo tệp nhị phân

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

Đối với các tệp nhị phân tạo sẵn hằng đêm hỗ trợ hoạt động TF thông qua uỷ quyền linh hoạt, hãy sử dụng các đường liên kết dưới đây:

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

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

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

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

Tiến hành đo điểm chuẩn

Để chạy phép đo điểm chuẩn trên máy tính, hãy thực thi tệp nhị phân trên shell.

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 của mô hình lập 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 thi của từng toán tử. Để thực hiện việc này, hãy truyền cờ --enable_op_profiling=true đến benchmark_model trong khi gọi. Thông tin giải thích chi tiết tại đây.

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

Tệp nhị phân C++ thuận tiện và đơn giản cũng được cung cấp để đo điểm chuẩn nhiều tuỳ chọn hiệu suất trong một lần chạy. Tệp nhị phân này được tạo dựa trên công cụ đo điểm chuẩn nêu trên. Công cụ này chỉ có thể đo điểm chuẩn tại một thời điểm duy nhất. Các tệp nhị phân này có cùng một quy trình tạo/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 thêm một số tham số. Một tham số quan trọng cho tệp nhị phân này là:

perf_options_list: string (default='all')
Danh sách các tuỳ 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 tệp nhị phân được tạo sẵn hằng đêm cho công cụ này như được liệt kê dưới đây:

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

Để chạy phép đo điểm chuẩn trên thiết bị iOS, bạn cần tạo ứ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 đo đ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ẫu xe 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 nổi tiếng trên một số thiết bị Android và iOS.

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

Các số đo đ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 Android, đối tượng tương đồng của CPU được thiết lập để sử dụng các lõi lớn trên thiết bị nhằm giảm phương sai (xem thông tin chi tiết).

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 tạo bằng các hướng dẫn này và được giả định là nằm trong thư mục /data/local/tmp.

Cách chạy phép đo đ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 bằng tính năng uỷ quyền GPU, hãy đặt --use_gpu=true.

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

Tên mô hình Thiết bị CPU, 4 luồng GPU
Mobilenet_1.0_224(float) Pixel 3 23,9 mili giây 6,45 mili giây
Pixel 4 14,0 mili giây 9,0 mili giây
Mobilenet_1.0_224 (lượng tử) Pixel 3 13,4 mili giây ---
Pixel 4 5 mili giây ---
NASNet dành cho thiết bị di động Pixel 3 56 mili giây ---
Pixel 4 34,5 mili giây ---
SqueezeNet Pixel 3 35,8 mili giây 9,5 mili giây
Pixel 4 23,9 mili giây 11,1 mili giây
Inception_ResNet_V2 Pixel 3 422 mili giây 99,8 mili giây
Pixel 4 272,6 mili giây 87,2 mili giây
Inception_V4 Pixel 3 486 mili giây 93 mili giây
Pixel 4 324,1 mili giây 97,6 mili giây

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

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

Để chạy các phép đo điểm chuẩn iOS, ứng dụng đo đ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 uỷ quyền GPU, các tuỳ chọn "use_gpu" : "1""gpu_wait_type" : "aggressive" cũng được thêm vào benchmark_params.json.

Tên mô hình Thiết bị CPU, 2 luồng GPU
Mobilenet_1.0_224(float) iPhone XS 14,8 mili giây 3,4 mili giây
Mobilenet_1.0_224 (lượng tử) iPhone XS 11 mili giây ---
NASNet dành cho thiết bị di động iPhone XS 30,4 mili giây ---
SqueezeNet iPhone XS 21,1 mili giây 15,5 mili giây
Inception_ResNet_V2 iPhone XS 261,1 mili giây 45,7 mili giây
Inception_V4 iPhone XS 309 mili giây 54,4 mili giây

Theo dõi các thành phần bên trong của TensorFlow Lite

Theo dõi các thành phần bên trong của TensorFlow Lite trong Android

Các sự kiện nội bộ từ trình thông dịch TensorFlow Lite của một ứng dụng Android có thể được các công cụ theo dõi của Android ghi lại. Đây là những sự kiện tương tự như với API Trace của Android, vì vậy, các sự kiện đã thu thập được từ mã Java/Kotlin sẽ được hiển thị cùng với các sự kiện nội bộ của TensorFlow Lite.

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

  • Lệnh gọi toán tử
  • Sửa đổi biểu đồ theo người được uỷ quyền
  • Phân bổ Tensor

Trong số nhiều cách ghi lại dấu vết, hướng dẫn này đề cập đến Trình phân tích CPU của Android Studio và ứng dụng Theo dõi hệ thống. Hãy 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 tuỳ chọn khác.

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

Đây là một đoạn mã trong ứng dụng ví dụ Phân loại hình ảnh. Trình thông dịch TensorFlow Lite chạy trong mục recognizeImage/runInference. Bước này là không bắt buộc nhưng rất hữu ích để giúp thông báo vị trí thực hiện lệnh gọi dự đoán.

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

Bậ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 bạn đặt thuộc tính này khi khởi chạy trình phiên 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 vết.

Sau khi bạn thu thập 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 dưới đây:

  1. Chọn Run > Profile 'app' (Chạy > Hồ sơ 'ứng dụng') trên các trình đơn trên cùng.

  2. Nhấp vào vị trí bất kỳ trong tiến trình CPU khi cửa sổ Trình phân tích tài nguyên xuất hiện.

  3. Chọn "Theo dõi lệnh gọi hệ thống" trong số các chế độ phân tích CPU.

    Chọn "Theo dõi lệnh gọi hệ thống"

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

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

  6. Kiểm tra kết quả theo dõi.

    Dấu vết trong Android Studio

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

Ứ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 được nêu 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 vào định dạng Perfetto hoặc Systrace, tuỳ thuộc vào phiên bản của thiết bị Android. Bạn có thể mở các tệp theo dõi đã thu thập trong Giao diện người dùng Perfetto.

Dấu vết Perfetto

Theo dõi các thành phần bên trong của TensorFlow Lite trong iOS

Bạn có thể ghi lại các sự kiện nội bộ từ trình phiên dịch TensorFlow Lite của một ứng dụng iOS bằng công cụ Tools đi kèm với Xcode. Đây là các sự kiện signpost của iOS, vì vậy, các sự kiện đã ghi lại từ mã Swift/Objective-C sẽ được hiển thị cùng với các sự kiện nội bộ của TensorFlow Lite.

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

  • Lệnh gọi toán tử
  • Sửa đổi biểu đồ theo người được uỷ quyền
  • Phân bổ Tensor

Bật tính năng theo dõi TensorFlow Lite

Hãy thiết lập biến môi trường debug.tflite.trace bằng cách làm theo các bước bên dưới:

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

  2. Nhấp vào 'Hồ sơ' trong ngăn bên trái.

  3. Bỏ chọn hộp đánh dấu "Use the Run action's arguments and environment variables" (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 mục "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 phân tích tài nguyên cho ứng dụng iOS, hãy tắt tính năng theo dõi bằng cách xoá biến môi trường.

Nhạc cụ XCode

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

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

  2. Nhấp vào Ghi nhật ký trong số các mẫu lập hồ sơ khi công cụ Công cụ ra mắt.

  3. Nhấn nút "Start".

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

  5. Nhấp vào "os_signpost" để mở rộng các mục trong hệ thống phụ 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. Kiểm tra kết quả theo dõi.

    Dấu vết trong Xcode Instruments

Trong ví dụ này, bạn có thể thấy hệ thống phân cấp các sự kiện và số liệu thống kê cho mỗi thời gian của toán tử.

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

Dữ liệu theo dõi giúp bạn xác định điểm 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ể lấy từ trình phân tích tài nguyên và các giải pháp tiềm năng để cải thiện hiệu suất:

  • Nếu số lượng lõi CPU có sẵn nhỏ hơn số lượng luồng dự đoán, thì mức hao tổn lập lịch CPU có thể dẫn đến hiệu suất dưới mức. Bạn có thể lên lịch lại cho các tác vụ khác cần nhiều CPU trong ứng dụng để tránh trùng lặp với thông tin dự đoán mô hình hoặc điều chỉnh số lượng luồng phiên dịch.
  • Nếu các toán tử không được uỷ 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ì trên trình 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ử tương tự được hỗ trợ.