Полностью делегируйте модели BERT на GPU Mali с использованием

#tensorflow #tensorflow-lite #bert-language-model #transformer #mali

Вопрос:

Я пытаюсь развернуть модели BERT и Transformer на графическом процессоре Mali, используя TensorflowLite. Но проблема в том, что TensorflowLite не поддерживает некоторые операции в этих моделях, в том числе {ПРИВЕДЕНИЕ, СБОР, ОБЪЕДИНЕНИЕ, ИЗМЕНЕНИЕ ФОРМЫ, РАСПАКОВКА}. У кого-нибудь есть идеи, как я могу делегировать эти операции на GPU? Существуют ли какие-либо другие библиотеки TensorflowLite, которые могли бы поддерживать встроенный графический процессор и, в частности, графический процессор Mali? Я просто хочу измерить их задержку на GPU.

 STARTING!
Log parameter values verbosely: [0]
Min num runs: [1]
**Graph**: [mobilebert_float_384_gpu.tflite]
**Use gpu**: [1]
Loaded model mobilebert_float_384_gpu.tflite
**INFO**: Created TensorFlow Lite delegate for GPU.
**ERROR**: Following operations are not supported by GPU delegate:
CAST: Not supported cast case
GATHER: Operation is not supported.
MUL: MUL requires one tensor that not less than second in all dimensions.
RESHAPE: OP is supported, but tensor type isn't matched!
UNPACK: Operation is not supported.
**2661 operations will run on the GPU, and the remaining 81 operations will run on the CPU.**
INFO: Initialized OpenCL-based API.
INFO: Created 1 GPU delegate kernels.
Explicitly applied GPU delegate, and the model graph will be partially executed by the delegate w/ 1 delegate kernels.
The input model file size (MB): 100.239
Initialized session in 2491.9ms.
Running benchmark for at least 1 iterations and at least 0.5 seconds but terminate if exceeding 150 seconds.
count=2 first=434022 curr=247839 min=247839 max=434022 avg=340930 std=93091
 

Ответ №1:

Делегат GPU поддерживает не все операции, только этот список.

Вы можете попробовать делегат NNAPI, если он вам доступен. Он может делегировать разные процессоры как «лучшие», а не только графический процессор. Поддерживаемые операции находятся здесь.

В худшем случае, если ни один из них не работает для вас, вам придется либо вернуться к процессору, либо написать свой собственный делегат — но это большая часть работы.