Передача пользовательских атрибутов из TF op в TFL (MLIR)

#tensorflow #llvm #tensorflow2.0 #tensorflow-lite

#tensorflow #llvm #tensorflow2.0 #tensorflow-lite

Вопрос:

Мы экспериментируем с созданием собственного стека MLIR для импорта моделей TFL и их компиляции для конкретного ускорителя. Мы также создаем нашу собственную среду выполнения / симулятор для запуска этих импортированных моделей. Наш текущий способ работы заключается в том, что мы замораживаем модель TF.keras, преобразуем в TFL, а затем используем flatbuffer_translate для получения диалекта MLIR tfl.

Однако для достижения этой цели мне нужно передать некоторые атрибуты с некоторыми операциями, характерными для нашей целевой архитектуры. Изначально я хотел передать эти атрибуты с помощью такой операции, как conv2d. Однако я не знаю способа (если это вообще возможно) расширить такие операции, которые изначально определены / поддерживаются tfl.

Затем я попытался определить и зарегистрировать пользовательскую операцию TF с ее пользовательскими атрибутами. Семантикой операции будет функция идентификации, но я просто намеревался использовать ее в качестве заполнителя для передачи моих атрибутов. Как только я попробовал это, я увидел, что результирующий TFL MLIR содержит мой пользовательский op, однако атрибуты кодируются в непрозрачный тип с потоком байтов в качестве его значения.

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

Спасибо!

Ответ №1:

Как вы кодируете его на входе? Я предполагаю, что вы видите его в кодировке как attrValue (https://github.com/tensorflow/tensorflow/blob/b1e813e2ec9634ec0e6562b836e372e393f3de43/tensorflow/core/framework/attr_value.proto #L18) и поэтому вы бы декодировали его так, как обычно декодировали бы protobuf.