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"
và "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:
Chọn Run > Profile 'app' (Chạy > Hồ sơ 'ứng dụng') trên các trình đơn trên cùng.
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.
Chọn "Theo dõi lệnh gọi hệ thống" trong số các chế độ phân tích CPU.
Nhấn nút 'Ghi'.
Nhấn nút "Dừng".
Kiểm tra kết quả theo dõi.
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.
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:
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.
Nhấp vào 'Hồ sơ' trong ngăn bên trái.
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).
Thêm
debug.tflite.trace
trong mục "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:
Chọn Sản phẩm > Hồ sơ từ các trình đơn trên cùng của Xcode.
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.
Nhấn nút "Start".
Nhấn nút "Dừng".
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.
Nhấp vào hệ thống con Ghi nhật ký hệ điều hành 'org.tensorflow.lite'.
Kiểm tra kết quả theo dõi.
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ợ.