Việc sử dụng các bộ xử lý chuyên dụng như GPU, NPU hoặc DSP để tăng tốc phần cứng có thể cải thiện đáng kể hiệu suất suy luận (suy luận nhanh hơn tới 10 lần trong một số trường hợp) và trải nghiệm người dùng của ứng dụng Android hỗ trợ ML của bạn. Tuy nhiên, với sự đa dạng của phần cứng và trình điều khiển mà người dùng của bạn có thể có, việc chọn cấu hình tăng tốc phần cứng tối ưu cho từng thiết bị của người dùng có thể là một thách thức. Ngoài ra, việc bật sai cấu hình trên thiết bị có thể tạo ra trải nghiệm người dùng kém do độ trễ cao hoặc trong một số trường hợp hiếm gặp là lỗi thời gian chạy hoặc các vấn đề về độ chính xác do tính không tương thích của phần cứng.
Dịch vụ tăng tốc dành cho Android là một API giúp bạn chọn cấu hình tăng tốc phần cứng tối ưu cho một thiết bị người dùng nhất định và kiểu .tflite
của bạn, đồng thời giảm thiểu rủi ro về 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á các cấu hình tăng tốc khác nhau trên thiết bị người dùng bằng cách chạy các tiêu chuẩn suy luận nội bộ với mẫu TensorFlow Lite của bạn. Các lần chạy thử nghiệm này thường hoàn thành sau vài giây, tùy thuộc vào kiểu máy của bạn. Bạn có thể chạy điểm chuẩn một lần trên mọi thiết bị người dùng trước thời gian suy luận, lưu kết quả vào bộ đệm và sử dụng nó trong quá trình suy luận. Các điểm chuẩn này đã hết quy trình; giúp giảm thiểu rủi ro xảy ra 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 (đầu vào và đầu ra "vàng") và Dịch vụ Tăng tốc sẽ chạy điểm chuẩn suy luận TFLite nội bộ để cung cấp cho bạn các đề xuất phần cứng.
Dịch vụ tăng tốc là một phần của ngăn xếp ML tùy chỉnh của Android và hoạt động với TensorFlow Lite trong các dịch vụ của Google Play .
Thêm các phụ thuộc vào dự án của bạn
Thêm các phụ thuộc sau vào tệp build.gradle của ứng dụng của bạn:
implementation "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"
API Dịch vụ Tăng tốc hoạt động với TensorFlow Lite trong Google Play Services . Nếu bạn hiện chưa sử dụng thời gian chạy TensorFlow Lite được cung cấp qua Dịch vụ của Play, thì bạn sẽ cần cập nhật các phần phụ thuộc của mình .
Cách sử dụng API dịch vụ tăng tốc
Để 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 kiểu máy của mình (ví dụ: GPU với OpenGL). Sau đó, tạo 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à đầu ra mô hình dự kiến. Cuối cùng, gọi validateConfig()
để chuyển cả cấu hình tăng tốc và cấu hình xác thực của bạn.
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ấu hình phần cứng được dịch thành đại biểu trong thời gian thực hiện. Sau đó, Dịch vụ tăng tốc sẽ sử dụng các cấu hình này trong nội bộ để thực hiện các suy luận thử nghiệm.
Hiện tại, dịch vụ tăng tốc cho phép bạn đánh giá cấu hình GPU (được chuyển đổi thành đại biểu GPU trong thời gian thực thi) bằng GpuAccelerationConfig và suy luận CPU (với CpuAccelerationConfig ). Chúng tôi đang làm việc để hỗ trợ nhiều đại biểu hơn truy cập phần cứng khác trong tương lai.
Cấu hình tăng tốc GPU
Tạo 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 bạn có đang sử dụng lượng tử hóa với setEnableQuantizedInference()
hay không.
Cấu hình tăng tốc CPU
Tạo tăng tốc CPU như sau:
AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
.setNumThreads(2)
.build();
Sử dụng phương thức setNumThreads()
để xác định số luồng bạn muốn sử dụng để đánh giá khả năng suy luận của CPU.
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 Dịch vụ tăng tốc đánh giá các kết luận. Bạn sẽ sử dụng chúng để vượt qua:
- mẫu đầu vào,
- kết quả dự kiến,
- logic xác nhận độ chính xác.
Đảm bảo cung cấp các mẫu đầu vào mà bạn mong đợi hiệu suất tốt của mô hình của mình (còn được gọi là mẫu “vàng”).
Tạo một ValidationConfig
với 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 với setBatchSize()
. Chuyển đầu vào của các mẫu vàng của bạn bằng cách sử dụng setGoldenInputs()
. Cung cấp đầu ra dự kiến cho đầu vào được truyền với setGoldenOutputs()
.
Bạn có thể xác định thời gian suy luận tối đa với setInferenceTimeoutMillis()
(5000 mili giây theo mặc định). 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.
Theo tùy chọn, bạn cũng có thể tạo AccuracyValidator
tùy 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;
}
}
Đảm bảo 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 trong mô hình của bạn, thì bạn có thể sử dụng EmbeddedValidationConfig
.
Tạo đầu ra xác thực
Đầu ra vàng là tùy chọn 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 đầu ra vàng từ bên trong. Bạn cũng có thể xác định cấu hình tăng tốc được sử dụng để tạo các đầu ra vàng này bằng cách gọi setGoldenConfig()
:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenConfig(customCpuAccelerationConfig)
[...]
.build();
Xác thực cấu hình Tăng tốc
Khi bạn đã 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 mình.
Đảm bảo rằng thời gian chạy TensorFlow Lite với Play Services được khởi tạo đúng cách và trình ủy quyền GPU khả dụng cho thiết bị bằng cách chạy:
TfLiteGpu.isGpuDelegateAvailable(context)
.onSuccessTask(gpuAvailable -> TfLite.initialize(context,
TfLiteInitializationOptions.builder()
.setEnableGpuDelegateSupport(gpuAvailable)
.build()
)
);
Khởi tạo 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à chuyển một đối tượng Iterable<AccelerationConfig>
làm tham số.
validateConfig()
sẽ trả về một Task<
ValidatedAccelerationConfigResult
từ Api tác vụ của dịch >
Google Play, tác vụ này 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 lệnh gọi lại addOnSuccessListener()
.
Sử dụng cấu hình đã được xác thực trong trình thông dịch của bạn
Sau khi kiểm tra xem ValidatedAccelerationConfigResult
được trả về trong lệnh gọi lại có hợp lệ hay không, bạn có thể đặt cấu hình đã xác thực làm cấu hình tăng tốc cho trình thông dịch của mình khi gọi interpreterOptions.setAccelerationConfig()
.
Bộ nhớ đệm cấu hình
Cấu hình tăng tốc tối ưu cho kiểu máy của bạn khó có thể thay đổi trên thiết bị. Vì vậy, sau khi bạn nhận được cấu hình tăng tốc thỏa mãn, bạn nên lưu trữ cấu hình đó trên thiết bị và để ứng dụng của bạn truy xuất cấu hình đó cũng như sử dụng cấu hình đó để tạo InterpreterOptions
của bạn trong các phiên tiếp theo thay vì chạy một xác thực khác. Các phương thức serialize()
và deserialize()
trong ValidatedAccelerationConfigResult
giúp quá trình lưu trữ và truy xuất dễ dàng hơn.
Ứng dụng mẫu
Để xem xét tích hợp tại chỗ của Dịch vụ tăng tốc, hãy xem ứng dụng mẫu .
Hạn chế
Dịch vụ tăng tốc có các hạn chế hiện tại sau:
- Hiện tại chỉ hỗ trợ các cấu hình tăng tốc CPU và GPU,
- Nó chỉ hỗ trợ TensorFlow Lite trong các dịch vụ của Google Play và bạn không thể sử dụng nó nếu bạn đang sử dụng phiên bản TensorFlow Lite đi kèm,
- Nó không hỗ trợ Thư viện tác vụ TensorFlow Lite vì bạn không thể trực tiếp khởi tạo
BaseOptions
với đối tượngValidatedAccelerationConfigResult
. - SDK dịch vụ tăng tốc chỉ hỗ trợ API cấp 22 trở lên.
Hãy cẩn thận
Vui lòng xem kỹ các cảnh báo sau, đặc biệt nếu bạn định sử dụng SDK này trong sản xuất:
Trước khi thoát khỏi Beta và phát hành phiên bản ổn định cho API dịch vụ tăng tốc, chúng tôi sẽ xuất bản SDK mới có thể có một số khác biệt so với SDK Beta hiện tại. Để tiếp tục sử dụng Dịch vụ tăng tốc, bạn cần chuyển sang SDK mới này và đẩy bản cập nhật cho ứng dụng của mình kịp thời. Không làm như vậy có thể gây ra sự cố vì SDK Beta có thể không còn tương thích với các dịch vụ của Google Play sau một thời gian.
Không có gì đảm bảo rằng một tính năng cụ thể trong API Dịch vụ Tăng tốc hoặc toàn bộ API sẽ trở nên khả dụng rộng rãi. Nó có thể duy trì ở dạng Beta vô thời hạn, bị tắt hoặc được kết hợp với các tính năng khác thành các gói được thiết kế cho các đối tượng nhà phát triển cụ thể. Một số tính năng với API dịch vụ tăng tốc hoặc toàn bộ API cuối cùng có thể trở nên khả dụng rộng rãi, nhưng không có lịch trình cố định cho việc này.
Điều khoản và quyền riêng tư
Điều khoản dịch vụ
Việc sử dụng API dịch vụ tăng tốc phải tuân theo Điều khoản dịch vụ của Google API .
Ngoài ra, API Dịch vụ tăng tốc hiện đang ở giai đoạn thử nghiệm và do đó, bằng cách sử dụng API này, bạn thừa nhận các sự cố tiềm ẩn được nêu trong phần Cảnh báo ở trên và thừa nhận rằng Dịch vụ tăng tốc có thể không phải lúc nào cũng hoạt động như được chỉ định.
Sự riêng tư
Khi bạn sử dụng API Dịch vụ tăng tốc, quá trình 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ụ tăng tốc không gửi dữ liệu đó đến máy chủ 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 không được rời khỏi thiết bị.
Đôi khi, API dịch vụ tăng tốc có thể liên hệ với máy chủ của Google để nhận những thứ như bản sửa lỗi, mô hình cập nhật và thông tin về khả năng tương thích của bộ tăng tốc phần cứng. Các API dịch vụ tăng tốc cũng gửi các số liệu về hiệu suất và việc sử dụng các 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 cũng như phát hiện việc sử dụng sai mục đích hoặc lạm dụng, như được mô tả thêm trong Chính sách quyền riêng tư của chúng tôi.
Bạn chịu trách nhiệm thông báo cho người dùng ứng dụng của mình về việc Google xử lý dữ liệu chỉ số 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 bộ tăng tốc phần cứng ML có sẵn (GPU và DSP). Được sử dụng để chẩn đoán và phân tích sử dụng.
- Thông tin ứng dụng (tên gói / id gói, phiên bản ứng dụng). Được sử dụng để 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 hình ảnh). Được sử dụng để chẩn đoán và phân tích sử dụng.
- Loại sự kiện (chẳng hạn như khởi tạo, tải xuống mô hình, cập nhật, chạy, phát hiện). Được sử dụng để chẩn đoán và phân tích sử dụng.
- Các mã lỗi. Được sử dụng để chẩn đoán.
- Chỉ số hiệu suất. Được sử dụng để chẩn đoán.
- Số nhận dạng mỗi lần cài đặt không xác định duy nhất người dùng hoặc thiết bị vật lý. Được sử dụng để vận hành cấu hình từ xa và phân tích sử dụng.
- Địa chỉ IP của người gửi yêu cầu mạng. Được sử dụng để chẩn đoán cấu hình từ xa. Các địa chỉ IP đã thu thập được tạm thời giữ lại.
Hỗ trợ và phản hồi
Bạn có thể cung cấp phản hồi và nhận hỗ trợ thông qua Trình theo dõi vấn đề của TensorFlow. Vui lòng báo cáo sự cố và yêu cầu hỗ trợ bằng cách sử dụng mẫu sự cố cho TensorFlow Lite trong các dịch vụ của Google Play.