Как профилировать процесс оптимизации GPflow с использованием временной шкалы? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь профилировать GPflow с использованием временной шкалы и визуализировать его с помощью хромированной трассировки. Но трассировка не показывает процесс оптимизации (только построение модели и прогноз). Я определяю пользовательский конфиг:

custom_config = gpflow.settings.get_settings()
custom_config.profiling.output_file_name = 'gpflow_timeline'
custom_config.profiling.dump_timeline = True

И попробуйте сделать простой прогноз после оптимизации:

with gpflow.settings.temp_settings(custom_config), gpflow.session_manager.get_session().as_default():
   k = gpflow.kernels.RBF()
   m = gpflow.models.GPR(X_train, y_train, kern=k)
   run_adam(m, lr=0.1, iterations=100, callback=__PrintAction(m, 'GPR with Adam'))
   mean, var = m.predict_y(X_test)

где оптимизатор Адама определяется как:

class __PrintAction(Action):
   def __init__(self, model, text):
       self.model = model
       self.text = text

   def run(self, ctx):
       likelihood = ctx.session.run(self.model.likelihood_tensor)
       print('{}: iteration {} likelihood {:.4f}'.format(self.text, ctx.iteration, likelihood))

def run_adam(model, lr, iterations, callback=None):
   adam = gpflow.train.AdamOptimizer(lr).make_optimize_action(model)
   actions = [adam] if callback is None else [adam, callback]
   loop = Loop(actions, stop=iterations)()
   model.anchor(model.enquire_session()) 

Можно ли как-то показать трассировку оптимизации на временной шкале?

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Расширение @tadejk ответ:

Вы можете изменить gpflowrc в папке проекта GPflow / gpflow или создать ее в той же папке, где вы запускаете код и настраиваете там свои параметры профилирования.

[logging]
# possible levels: CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET
level = WARNING

[verbosity]
tf_compile_verb = False

[dtypes]
float_type = float64
int_type = int32

[numerics]
jitter_level = 1e-6
# quadrature can be set to: allow, warn, error
ekern_quadrature = warn

[profiling]
dump_timeline = False
dump_tensorboard = False
output_file_name = timeline
output_directory = ./
each_time = False

[session]
intra_op_parallelism_threads = 0
inter_op_parallelism_threads = 0

Не уверен на 100%, но объединение всего в один файл json может быть плохой идеей.Один файл, созданный файл session.run, поэтому объединение всего в один может привести к путанице.

0 голосов
/ 24 мая 2019

Я установил:

custom_config.profiling.each_time = True

, чтобы получать файлы трассировки после каждого запуска.Затем я объединил следы, используя jq:

jq -s '{traceEvents: map(.traceEvents[])}' gpflow_timeline_* >> gpflow_timeline_all.json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...