Как я могу активировать XLA Tensorflow для API C? - PullRequest
0 голосов
/ 17 июня 2019

Я создал Tensorflow из исходного кода и использую его C API.Пока все работает хорошо, я также использую AVX / AVX2.Моя сборка Tensorflow из исходного кода также была построена с поддержкой XLA.Теперь я хотел бы также активировать XLA (ускоренную линейную алгебру), так как надеюсь, что это снова увеличит производительность / скорость во время логического вывода.

Если я начну свой бег прямо сейчас, я получу это сообщение:

2019-06-17 16:09:06.753737: W tensorflow/compiler/jit/mark_for_compilation_pass.cc:1541] (One-time warning): Not using XLA:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set.  If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU.  To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.

На официальной домашней странице XLA (https://www.tensorflow.org/xla/jit) я нашел эту информацию о том, как включить Jitуровень сеанса:

# Config to turn on JIT compilation
config = tf.ConfigProto()
config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1

sess = tf.Session(config=config)

Здесь (https://github.com/tensorflow/tensorflow/issues/13853) было объяснено, как установить TF_SetConfig в C API. Я смог ограничиться одним ядром перед использованием вывода этого кода Python:

config1 = tf.ConfigProto(device_count={'CPU':1})
serialized1 = config1.SerializeToString()
print(list(map(hex, serialized1)))

Я реализовал это следующим образом:

uint8_t intra_op_parallelism_threads = maxCores; // for operations that can be parallelized internally, such as matrix multiplication 
        uint8_t inter_op_parallelism_threads = maxCores; // for operations that are independent in your TensorFlow graph because there is no directed path between them in the dataflow graph
        uint8_t config[]={0x10,intra_op_parallelism_threads,0x28,inter_op_parallelism_threads};
        TF_SetConfig(sess_opts,config,sizeof(config),status);

Поэтому я подумал, что это поможет для активации XLA:

config= tf.ConfigProto()
config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1
output = config.SerializeToString()
print(list(map(hex, output)))

Реализация на этот раз:

uint8_t config[]={0x52,0x4,0x1a,0x2,0x28,0x1};
        TF_SetConfig(sess_opts,config,sizeof(config),status);

Однако XLA, похоже, все еще деактивирован. Может ли кто-нибудь помочь мне с этой проблемой? Или, если у вас снова появится лут в предупреждении:

2019-06-17 16:09:06.753737: W tensorflow/compiler/jit/mark_for_compilation_pass.cc:1541] (One-time warning): Not using XLA:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set.  If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU.  To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.

Это так?значит я должен установить XLA_FLAGS во время сборки?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

@ tre95 Я пытался
#include "c_api_experimental.h" TF_SessionOptions* options = TF_NewSessionOptions(); TF_EnableXLACompilation(options,true);
, но он скомпилирован не удалось с ошибкой collect2: error: ld вернул 1 состояние выхода . Однако он может успешно скомпилироваться и работать, если я это сделаюне делай этого.

0 голосов
/ 19 июня 2019

Хорошо, я понял, как использовать JIT XLA, он доступен только в заголовке c_api_experimental.h. Просто включите этот заголовок и затем используйте:

TF_EnableXLACompilation(sess_opts,true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...