Công cụ đo điểm chuẩn
Công cụ đo điểm chuẩn LiteRT 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:
- Thời gian khởi chạy
- Thời gian suy luận của trạng thái khởi động
- Thời gian suy luận ở 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ớ chung
Các công cụ đo điểm chuẩn được cung cấp dưới dạng ứng dụng đo điểm chuẩn cho Android và iOS cũng như tệp nhị phân dòng lệnh gốc và chúng đều có cùng hiệu suất cốt lõi logic đo lường. 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 cách sử dụng công cụ đo điểm chuẩn với Android. Một là tệp nhị phân đo điểm chuẩn gốc và một tệp nhị phân khác là Android ứng dụng điểm chuẩn, một đánh giá tốt hơn về hiệu suất của mô hình trong ứng dụng. Một trong hai thì số liệu từ công cụ đo điểm chuẩn vẫn sẽ hơi khác so với chạy suy luậ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. Cài đặt và chạy ứng dụng đó bằng cách sử dụng 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 tạo ứng dụng
Tải các ứng dụng đo điểm chuẩn Android được tạo sẵn hằng đêm xuống bằng các đường liên kết dưới đây:
Đối với các ứng dụng đo điểm chuẩn Android có hỗ trợ hoạt động TF thông qua tính năng uỷ quyền linh hoạt, hãy sử dụng các đường liên kết bên dưới:
Bạn cũng có thể tạo ứng dụng từ nguồn bằng cách làm theo các hướng dẫn.
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 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 các tham số không bắt buộc khác để chạy điểm chuẩn.
num_threads
:int
(mặc định=1)
Số luồng dùng để chạy trình phiên dịch TFLite.use_gpu
:bool
(default=false)
Sử dụng tính năng Uỷ quyền của GPU.use_xnnpack
:bool
(mặc định=false
)
Sử dụng Người được uỷ quyền XNNPACK.
Tuỳ thuộc vào thiết bị bạn đang sử dụng, một số lựa chọn sau có thể không hiện có hoặc không có tác dụng. Tham khảo tham số để biết thêm thông số hiệu suất mà bạn có thể chạy bằng ứng dụng điểm chuẩn.
Xem kết quả bằng lệnh logcat
:
adb logcat | grep "Inference timings"
Kết quả đo đ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
Điểm chuẩn gốc nhị phân
Công cụ đo đ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ừ một dòng lệnh shell trên Linux, Mac, các 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 được tạo sẵn vào ban đêm bằng cách làm theo các đường liên kết bên dưới:
Đối với các tệp nhị phân được tạo sẵn vào ban đêm có hỗ trợ hoạt động TF thông qua tính năng uỷ quyền linh hoạt, hãy sử dụng các đường liên kết bên dưới:
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 của bạn.
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
Để tạo bằng chuỗi công cụ Android NDK, bạn cần thiết lập môi trường tạo bản dựng trước tiên bằng cách làm theo hướng dẫn hoặc sử dụng hình ảnh docker như được mô tả trong hướng dẫn.
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
Chạy đ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 từ 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 nhóm tham số như đã đề cập ở trên với tệp nhị phân của dòng lệnh gốc.
Hoạt động phân tích mô hình
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 mỗi toán tử. Để thực hiện việc này, hãy chuyển cờ
--enable_op_profiling=true
đến benchmark_model
trong khi gọi. Thông tin chi tiết là
đã giải thích
tại đây.
Tệp nhị phân điểm chuẩn gốc cho nhiều lựa chọn về hiệu suất trong một lần chạy
Một 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 lựa chọn về 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
chỉ có thể đo điểm chuẩn một tuỳ chọn hiệu suất tại một thời điểm. Họ chia sẻ
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 lựa chọn về hiệu suất của TFLite được phân tách bằng dấu phẩy để đo điểm chuẩn.
Bạn có thể tải các tệp nhị phân được tạo sẵn hằng đêm cho công cụ này như trong danh sách 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 LiteRT vào
benchmark_data
thư mục của cây nguồn và sửa đổi tệp benchmark_params.json
. Những
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 đó. Truy cập/ghé qua
thời gian
Ứng dụng đo điểm chuẩn iOS
để được 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 LiteRT khi hoạt động tốt trên một số thiết bị Android và iOS.
Điểm chuẩn hiệu suất Android
Các số liệu điểm chuẩn hiệu suất này được tạo bằng tệp nhị phân đo điểm chuẩn gốc.
Đối với các điểm chuẩn của 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ị để giảm phương sai (xem chi tiết).
Công cụ này 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
hướng dẫn tại đây
và được giả định là nằm trong thư mục /data/local/tmp
.
Cách 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 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 mili giây | 9 mili giây | |
Mobilenet_1.0_224 (quant) | 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 điểm chuẩn iOS.
Để chạy phép đo điểm chuẩn iOS, ứng dụng đo điểm chuẩn đã được sửa đổi để bao gồm các biến phù hợp
mô hình và benchmark_params.json
đã được sửa đổi để đặt num_threads
thành 2. Để sử dụng
tuỳ chọn uỷ quyền GPU, "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 (quant) | 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 nội bộ LiteRT
Theo dõi bên trong LiteRT trong Android
Các sự kiện nội bộ từ trình phiên dịch LiteRT của một ứng dụng Android có thể người chụp Công cụ theo dõi trên Android. Chúng là những sự kiện tương tự với Android Trace, vì vậy Các sự kiện được thu thập từ mã Java/Kotlin sẽ được xem cùng với LiteRT sự kiện nội bộ.
Một số ví dụ về các sự kiện là:
- Lệnh gọi nhà cung cấp dịch vụ
- Sửa đổi biểu đồ theo uỷ quyền
- phân bổ Tensor
Trong số các cách khác nhau để ghi lại dấu vết, hướng dẫn này đề cập đến Android Trình phân tích CPU trong 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 để có các lựa chọn khác.
Thêm sự kiện theo dõi trong mã Java
Đây là một đoạn mã từ
Phân loại hình ảnh
ứng dụng mẫu. Trình phiên dịch LiteRT chạy trong
Phần recognizeImage/runInference
. Bước này không bắt buộc nhưng sẽ hữu ích khi
giúp chú ý vị trí mà lệnh gọi suy luận được thực hiệ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 LiteRT
Để bật tính năng theo dõi LiteRT, hãy đặt thuộc tính hệ thống Android
debug.tflite.trace
đến 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 trình thông dịch LiteRT khởi động, các sự kiện chính (ví dụ: lệnh gọi toán tử) từ trình phiên dịch sẽ được theo dõi.
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 trong Android Studio
Ghi lại dấu vết bằng Trình phân tích CPU trong Android Studio bằng cách làm theo các bước dưới đây:
Chọn Run > (Chạy >) Phân tích tài nguyên "app" trong trình đơn trên cùng.
Nhấp vào vị trí bất kỳ trong tiến trình của 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ế độ Lập hồ sơ CPU.
Nhấn 'Ghi' .
Nhấn 'Dừng' .
Kiểm tra kết quả theo dõi.
Trong ví dụ này, bạn có thể thấy hệ phân cấp sự kiện trong một chuỗi và số liệu thống kê cho từng thời gian của nhà vận hành, đồng thời xem luồng dữ liệu của toàn bộ ứng dụng giữa 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 Perfetto hoặc định dạng Systrace tuỳ thuộc vào phiên bản của thiết bị Android. Ảnh chụp tệp theo dõi có thể được mở trong giao diện người dùng Perfetto.
Theo dõi nội bộ LiteRT trong iOS
Các sự kiện nội bộ từ trình thông dịch LiteRT của một ứng dụng iOS có thể người chụp Nhạc cụ công cụ có trong Xcode. Đó là iOS signpost các sự kiện, để các sự kiện được ghi lại từ mã Swift/Mục tiêu-C sẽ được nhìn thấy cùng nhau với các sự kiện nội bộ LiteRT.
Một số ví dụ về các sự kiện là:
- Lệnh gọi nhà cung cấp dịch vụ
- Sửa đổi biểu đồ theo uỷ quyền
- phân bổ Tensor
Bật tính năng theo dõi LiteRT
Đặt biến môi trường debug.tflite.trace
bằng cách làm theo các bước dưới đây:
Chọn Sản phẩm > Lược đồ > Chỉnh sửa lược đồ... từ 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 "Use the Run action's arguments and environment variables" (Sử dụng các đối số và biến môi trường của thao tác Chạy) hộp kiểm.
Thêm
debug.tflite.trace
trong "Biến môi trường" .
Nếu bạn muốn loại trừ các sự kiện LiteRT khi phân tích tài nguyên ứng dụng iOS, tắt tính năng theo dõi bằng cách xoá 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:
Chọn Sản phẩm > Phân tích tài nguyên trên trình đơn trên cùng của Xcode.
Nhấp vào Logging (Ghi nhật ký) trong số các mẫu lập hồ sơ khi công cụ Công cụ chạy.
Nhấn "Bắt đầu" .
Nhấn 'Dừng' .
Nhấp vào 'os_signpost' để mở rộng các mục con trong hệ thống Ghi nhật ký hệ điều hành.
Nhấp vào "org.tensorflow.lite" Hệ thống phụ Ghi nhật ký hệ điều hành.
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 và số liệu thống kê cho mỗi thời gian của nhà vận hành.
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ể nhận được 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õi CPU có sẵn nhỏ hơn số lượng suy luận thì mức hao tổn lập lịch của 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ụ cần nhiều CPU khác trong ứng dụng của mình để tránh trùng với suy luận mô hình của bạn hoặc điều chỉnh số lượng trình phiên dịch luồng.
- 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 được thực thi trên CPU thay vì trình tăng tốc phần cứng dự kiến. Bạn có thể thay thế những toán tử không được hỗ trợ bằng các toán tử tương tự được hỗ trợ.