Как уменьшить размер двоичного файла TensorFlow Lite только с необходимыми операторами - PullRequest
0 голосов
/ 21 мая 2018

Размер двоичного файла TensorFlow Lite составляет около 900 КБ, и он все еще для меня большой.Я хочу знать, как уменьшить размер только с помощью операторов, необходимых для поддержки модели?

1 Ответ

0 голосов
/ 21 мая 2018

Tensorflow Lite

Если вы используете Tensorflow Lite, единственное решение, которое я нашел , - это работать на уровне Interpreter и настраивать библиотеку ядра (OpResolver).Я не думаю, что есть автоматический способ сделать это, и единственный доступный пример (здесь заголовок) не так легко понять, ИМХО.Я думаю, что дополнительные улучшения по этой теме будут включены в следующие выпуски.Кроме того, Я не уверен, что это уменьшит размер конечной библиотеки .В примечаниях API этот подход считается эквивалентным выборочной регистрации , что объясняется в следующей части ответа для Tensorflow Mobile.

Tensorflow Mobile

Какответ на вопрос «Как включить только операции, используемые моей моделью», ответ в Мобильная документация Tensorflow (в подразделе Binary Size).

Обычный размер для TensorflowМобильный, кажется, 12 МБ, но его можно уменьшить, включив только требуемые модели.Очевидно, что для этого требуется построить Tensorflow Lite в качестве платформы с использованием Bazel.

Вы можете создать заголовок требуемых операций (ops_to_register.h), используя инструмент print_selective_registration_header.py, который доступен здесь .Сгенерированный заголовок должен быть помещен в корень директории с исходным кодом Tensorflow.Теперь вы готовы скомпилировать библиотеку, передав компилятору определение SELECTIVE_REGISTRATION (при сборке с Bazel вы должны добавить опцию: --copts=”-DSELECTIVE_REGISTRATION”).

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

Параметры компиляции

Я на самом деле не знаю, как вы компилируете свой код (статическая или динамическая библиотека), которые вам нужны с точки зрения производительности, и которые являются параметрами по умолчанию в Tensorflow bazelfile, но вы можете попробовать:

  • , чтобы уменьшить оптимизацию до -O1 или -Os (иногда помогаетразмер двоичного файла, и я думаю, что по умолчанию для Tensorflow -O2 для платформы и -O3 для отдельных ядер, хотя я не знаю, для облегченной версии).
  • использовать флаги -fdata-section и --gc-sections: цитирование gcc документации: «[-fdata-sections] Вместе со сборщиком мусора (опция линкера --gc-sections) эти опции могут привести к уменьшению статически связанных исполняемых файлов (после удаления)."(Похоже, что по крайней мере --gc-sections используется в опциях компоновщика для Raspberry Pi )
  • -fvisibility-inlines-hidden должно влиять на производительность встроенных функций, но уменьшает размер таблицы экспортаобщий объект.Эта опция может сломать библиотеку.Некоторые объяснения можно прочитать здесь .
  • Еще более опасно -fvisibility=hidden.Посмотрите на это здесь .
...