Việc sử dụng bộ xử lý chuyên dụng như GPU, NPU hoặc DSP cho phần cứng có thể cải thiện đáng kể hiệu suất suy luận (nhanh hơn tới 10 lần suy luận trong một số trường hợp) và trải nghiệm người dùng trên thiết bị Android hỗ trợ công nghệ học máy . Tuy nhiên, do người dùng có thể có đa dạng phần cứng và trình điều khiển chọn cấu hình tăng tốc phần cứng tối ưu cho thiết bị có thể là thách thức. Ngoài ra, việc bật sai cấu hình trên thiết bị có thể mang lại trải nghiệm người dùng kém do độ trễ cao hoặc trong một số ít trường hợp các trường hợp, lỗi thời gian chạy hoặc sự cố về độ chính xác do tính không tương thích với phần cứng gây ra.
Tăng tốc dịch vụ dành cho Android là một API giúp bạn chọn
tăng tốc phần cứng tối ưu cho một thiết bị cụ thể của người dùng và
.tflite
, đồng thời giảm thiểu rủi ro xảy ra lỗi thời gian chạy hoặc các vấn đề về độ chính xác.
Dịch vụ tăng tốc đánh giá nhiều cấu hình tăng tốc trên người dùng bằng cách chạy điểm chuẩn suy luận nội bộ với LiteRT mô hình. Các quá trình chạy kiểm thử này thường hoàn tất sau vài giây, tuỳ thuộc vào mô hình. Bạn có thể chạy phép đo điểm chuẩn một lần trên mọi thiết bị của người dùng trước khi suy luận hãy lưu kết quả vào bộ nhớ đệm và sử dụng trong quá trình suy luận. Các điểm chuẩn này được chạy ngoài quy trình; giúp giảm thiểu nguy cơ sự cố cho ứng dụng của bạn.
Cung cấp mô hình, mẫu dữ liệu và kết quả dự kiến của bạn (dữ liệu đầu vào "vàng" và kết quả đầu ra) và Accelerated Service (Dịch vụ tăng tốc) sẽ chạy phép dự đoán TFLite nội bộ điểm chuẩn để cung cấp cho bạn các đề xuất về phần cứng.
Dịch vụ tăng tốc là một phần trong ngăn xếp học máy tuỳ chỉnh của Android và hoạt động với LiteRT trong Dịch vụ Google Play.
Thêm phần phụ thuộc vào dự án
Thêm các phần phụ thuộc sau vào tệp build.gradle của ứng dụng:
implementation "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"
Accelerated Service API hoạt động với LiteRT trong Google Play Dịch vụ. Nếu bạn hiện chưa sử dụng thời gian chạy LiteRT được cung cấp qua Dịch vụ Play, bạn sẽ cần cập nhật dependencies của mình.
Cách sử dụng Accelerated Service API
Để sử dụng Dịch vụ tăng tốc, hãy bắt đầu bằng cách tạo cấu hình tăng tốc
mà bạn muốn đánh giá cho mô hình của mình (ví dụ: GPU có OpenGL). Sau đó, hãy tạo một
cấu hình xác thực với mô hình của bạn, một số dữ liệu mẫu và dữ liệu
đầu ra của mô hình. Cuối cùng, hãy gọi validateConfig()
bằng cách truyền cả
cấu hình tăng tốc và cấu hình xác thực.
Tạo cấu hình tăng tốc
Cấu hình tăng tốc là đại diện của các cấu hình phần cứng được chuyển thành đại biểu trong thời gian thực thi. Sau đó, Accelerated Service sẽ sử dụng các cấu hình này trong nội bộ để tiến hành suy luận kiểm thử.
Hiện tại, dịch vụ tăng tốc cho phép bạn đánh giá GPU cấu hình (được chuyển đổi thành uỷ quyền GPU trong thời gian thực thi) với GpuAccelerationConfig và suy luận của CPU (với CpuAccelerationConfig). Chúng tôi đang nỗ lực hỗ trợ nhiều người được uỷ quyền truy cập vào các phần cứng khác trong tương lai.
Cấu hình tăng tốc GPU
Tạo một cấu hình tăng tốc GPU như sau:
AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
.setEnableQuantizedInference(false)
.build();
Bạn phải chỉ định xem mô hình của mình có đang sử dụng lượng tử hoá với
setEnableQuantizedInference()
.
Cấu hình tăng tốc CPU
Tạo chế độ tăng tốc CPU như sau:
AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
.setNumThreads(2)
.build();
Sử dụng
setNumThreads()
phương thức xác định số lượng luồng mà bạn muốn dùng để đánh giá CPU
suy luận.
Tạo cấu hình xác thực
Cấu hình xác thực cho phép bạn xác định cách bạn muốn API Dịch vụ để đánh giá suy luận. Bạn sẽ sử dụng chúng để truyền:
- mẫu đầu vào,
- kết quả đầu ra dự kiến,
- logic xác thực độ chính xác.
Đảm bảo cung cấp mẫu đầu vào mà bạn mong đợi có hiệu suất tốt mô hình của bạn (còn được gọi là mẫu "vàng").
Tạo một
ValidationConfig
thông qua tính năng
CustomValidationConfig.Builder
như sau:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenOutputs(outputBuffer)
.setAccuracyValidator(new MyCustomAccuracyValidator())
.build();
Chỉ định số lượng mẫu vàng bằng
setBatchSize()
.
Truyền dữ liệu đầu vào của các mẫu vàng bằng cách sử dụng
setGoldenInputs()
.
Cung cấp kết quả dự kiến cho dữ liệu đầu vào được truyền bằng
setGoldenOutputs()
.
Bạn có thể xác định thời gian suy luận tối đa bằng setInferenceTimeoutMillis()
(theo mặc định là 5000 mili giây). Nếu suy luận mất nhiều thời gian hơn thời gian bạn đã xác định,
cấu hình đó sẽ bị từ chối.
Nếu muốn, bạn cũng có thể tạo một AccuracyValidator
tuỳ chỉnh.
như sau:
class MyCustomAccuracyValidator implements AccuracyValidator {
boolean validate(
BenchmarkResult benchmarkResult,
ByteBuffer[] goldenOutput) {
for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
if (!goldenOutputs[i]
.equals(benchmarkResult.actualOutput().get(i).getValue())) {
return false;
}
}
return true;
}
}
Hãy nhớ xác định logic xác thực phù hợp với trường hợp sử dụng của bạn.
Lưu ý rằng nếu dữ liệu xác thực đã được nhúng vào mô hình của mình, bạn có thể sử dụng
EmbeddedValidationConfig
.
Tạo kết quả xác thực
Đầu ra vàng là không bắt buộc và miễn là bạn cung cấp đầu vào vàng,
Dịch vụ tăng tốc có thể tạo ra các kết quả đầu ra màu vàng trong nội bộ. Bạn cũng có thể
xác định cấu hình tăng tốc dùng để tạo các kết quả đầu ra vàng này bằng cách
đang gọi setGoldenConfig()
:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenConfig(customCpuAccelerationConfig)
[...]
.build();
Xác thực cấu hình Accelerated
Sau khi tạo cấu hình tăng tốc và cấu hình xác thực, bạn có thể đánh giá chúng cho mô hình của bạn.
Đảm bảo rằng thời gian chạy LiteRT với Dịch vụ Play diễn ra đúng cách đã khởi chạy và bộ uỷ quyền GPU có sẵn cho thiết bị bằng cách chạy:
TfLiteGpu.isGpuDelegateAvailable(context)
.onSuccessTask(gpuAvailable -> TfLite.initialize(context,
TfLiteInitializationOptions.builder()
.setEnableGpuDelegateSupport(gpuAvailable)
.build()
)
);
Tạo thực thể cho AccelerationService
bằng cách gọi AccelerationService.create()
.
Sau đó, bạn có thể xác thực cấu hình tăng tốc cho mô hình của mình bằng cách gọi
validateConfig()
:
InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
.validateConfig(model, accelerationConfig, validationConfig)
.addOnSuccessListener(validatedConfig -> {
if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
interpreterOptions.setAccelerationConfig(validatedConfig);
interpreter = InterpreterApi.create(model, interpreterOptions);
});
Bạn cũng có thể xác thực nhiều cấu hình bằng cách gọi
validateConfigs()
và truyền một đối tượng Iterable<AccelerationConfig>
dưới dạng tham số.
validateConfig()
sẽ trả về a
Task<
ValidatedAccelerationConfigResult
>
qua Dịch vụ Google Play
Task Api cho phép
các tác vụ không đồng bộ.
Để nhận kết quả từ lệnh gọi xác thực, hãy thêm một
addOnSuccessListener()
.
Sử dụng cấu hình đã xác thực trong trình phiên dịch
Sau khi kiểm tra xem ValidatedAccelerationConfigResult
có được trả về trong
lệnh gọi lại hợp lệ, bạn có thể đặt cấu hình đã xác thực làm cấu hình tăng tốc
để thông dịch viên gọi interpreterOptions.setAccelerationConfig()
.
Lưu cấu hình vào bộ nhớ đệm
Cấu hình tăng tốc tối ưu cho mô hình của bạn có khả năng không thay đổi vào
thiết bị. Vì vậy, khi nhận được cấu hình tăng tốc đáp ứng, bạn
sẽ lưu trữ mật khẩu đó trên thiết bị và cho phép ứng dụng của bạn truy xuất và sử dụng mật khẩu đó để
tạo InterpreterOptions
của bạn trong các phiên sau đây thay vì
chạy một quy trình xác thực khác. Các phương thức serialize()
và deserialize()
trong
ValidatedAccelerationConfigResult
thực hiện quá trình lưu trữ và truy xuất
dễ dàng hơn.
Ứng dụng mẫu
Để xem xét quy trình tích hợp tại chỗ của Dịch vụ tăng tốc, hãy xem ứng dụng mẫu.
Các điểm hạn chế
Hiện tại, Accelerated Service có các hạn chế như sau:
- Hiện chỉ hỗ trợ cấu hình tăng tốc CPU và GPU.
- Phiên bản này chỉ hỗ trợ LiteRT trong các dịch vụ của Google Play và bạn không thể hãy sử dụng phương thức này nếu bạn đang dùng phiên bản LiteRT đi kèm.
- SDK dịch vụ tăng tốc chỉ hỗ trợ API cấp 22 trở lên.
Chú ý
Vui lòng xem xét cẩn thận các lưu ý sau đây, đặc biệt nếu bạn đang lập kế hoạch để sử dụng SDK này trong phiên bản chính thức:
Trước khi thoát khỏi giai đoạn Beta và phát hành phiên bản ổn định cho Accelerated Service API (API Dịch vụ tăng tốc), chúng tôi sẽ xuất bản một SDK mới có thể có một số khác với phiên bản Beta hiện tại. Để tiếp tục sử dụng Accelerated Service (Dịch vụ tăng tốc), bạn sẽ cần chuyển sang SDK mới này và đẩy một cập nhật ứng dụng của mình kịp thời. Nếu không làm như vậy, quảng cáo có thể bị hỏng SDK thử nghiệm có thể không còn tương thích với Dịch vụ Google Play sau vào một thời điểm nào đó.
Không có gì đảm bảo rằng một tính năng cụ thể trong Accelerated Service API hoặc API nói chung sẽ được cung cấp rộng rãi. Nó có thể vẫn ở giai đoạn thử nghiệm beta vô thời hạn, bị tắt hoặc được kết hợp với các các tính năng này thành các gói được thiết kế cho đối tượng nhà phát triển cụ thể. Hơi nhiều các tính năng thông qua Accelerated Service API hoặc toàn bộ API cuối cùng sẽ được phát hành rộng rãi, nhưng không có lịch trình cố định cho này.
Điều khoản và chính sách về quyền riêng tư
Điều khoản dịch vụ
Việc sử dụng Accelerated Service API (API Dịch vụ tăng tốc) phải tuân thủ Điều khoản về các API của Google
Dịch vụ.
Ngoài ra, Accelerated Service API (API Dịch vụ tăng tốc) hiện đang ở giai đoạn thử nghiệm
và như vậy, bằng cách sử dụng báo cáo này, bạn thừa nhận các vấn đề tiềm ẩn được nêu trong
Phần Lưu ý ở trên và xác nhận rằng Dịch vụ tăng tốc có thể không
luôn hoạt động như được chỉ định.
Quyền riêng tư
Khi bạn sử dụng Accelerated Service API (API Dịch vụ tăng tốc), việc xử lý dữ liệu đầu vào (ví dụ:
hình ảnh, video, văn bản) hoàn toàn diễn ra trên thiết bị và dịch vụ Accelerated Services
không gửi dữ liệu đó đến máy chủ của Google. Do đó, bạn có thể sử dụng các API của chúng tôi
để xử lý dữ liệu đầu vào lưu chuyển ra khỏi thiết bị.
Accelerated Service API có thể kết nối với máy chủ của Google tuỳ từng thời điểm
để nhận những email như bản sửa lỗi, kiểu máy cập nhật và trình tăng tốc phần cứng
thông tin về khả năng tương thích. Accelerated Service API (API Dịch vụ tăng tốc) cũng gửi các chỉ số về
hiệu suất và việc sử dụng API trong ứng dụng của bạn tới Google. Google sử dụng
dữ liệu chỉ số này để đo lường hiệu suất, gỡ lỗi, duy trì và cải thiện API,
và phát hiện việc lạm dụng hoặc lạm dụng, như được mô tả thêm trong Chính sách quyền riêng tư
Chính sách.
Bạn có trách nhiệm thông báo cho người dùng ứng dụng của mình về quá trình xử lý của Google
dữ liệu các chỉ số của Dịch vụ Tăng tốc theo yêu cầu của luật hiện hành.
Dữ liệu chúng tôi thu thập bao gồm:
- Thông tin thiết bị (chẳng hạn như nhà sản xuất, kiểu máy, phiên bản hệ điều hành và bản dựng) và các trình tăng tốc phần cứng học máy (GPU và DSP) hiện có. Dùng để chẩn đoán và số liệu phân tích mức sử dụng.
- Thông tin ứng dụng (tên gói / mã gói, phiên bản ứng dụng). Dùng cho chẩn đoán và phân tích sử dụng.
- Cấu hình API (chẳng hạn như định dạng và độ phân giải của hình ảnh). Dùng cho chẩn đoán và phân tích sử dụng.
- Loại sự kiện (chẳng hạn như khởi chạy, tải xuống mô hình, cập nhật, chạy, phát hiện). Dùng để chẩn đoán và phân tích mức sử dụng.
- Mã lỗi. Dùng để chẩn đoán.
- Chỉ số hiệu suất. Dùng để chẩn đoán.
- Giá trị nhận dạng cho mỗi lần cài đặt không nhận dạng duy nhất người dùng hoặc thiết bị thực. Dùng để định cấu hình và sử dụng từ xa số liệu phân tích.
- Địa chỉ IP của người gửi yêu cầu mạng. Dùng cho cấu hình từ xa chẩn đoán. Những địa chỉ IP đã thu thập sẽ tạm thời được giữ lại.
Hỗ trợ và phản hồi
Bạn có thể gửi ý kiến phản hồi và nhận hỗ trợ thông qua Công cụ theo dõi lỗi của TensorFlow. Vui lòng báo cáo sự cố và yêu cầu hỗ trợ bằng mẫu vấn đề cho LiteRT trong Dịch vụ Google Play.