Можно ли запустить tfdbg с учебным заданием Cloud ML Engine?

Я не могу найти примеры запуска инструмента tfdbg с облачным механизмом машинного обучения. В этом сообщении показано, как обернуть сеанс tensorflow с отладчиком, но я не встречал никакого способа для запуска пакета механизма машинного обучения в режиме отладки. Кто-нибудь нашел способ сделать это?


person reese0106    schedule 11.08.2017    source источник


Ответы (1)


CloudML Engine не поддерживает интерактивный отладчик CLI.

Однако вы должны иметь возможность использовать автономный отладчик. То, как вы заставите его работать в вашем случае, будет зависеть от того, как структурирован ваш код.

Предположим, ваш код написан так, чтобы принимать аргумент командной строки --job-dir. Когда вы отправите свою работу, у вас будет что-то вроде этого:

export JOB_NAME=my_job
export JOB_DIR=gs://my_bucket/$JOB_NAME
gcloud ml-engine jobs training submit ... --job-dir=$JOB_DIR ...

# Start with this code.
from tensorflow.python import debug as tfdbg

# job_dir is on GCS and is passed on the command-line if you specify
# it when submitting your training job.
dump_dir = os.path.join(job_dir, 'tfdbg_dumps')

Для получения дополнительной информации о watch_fn см. документы.

Core TensorFlow (сеанс, созданный пользователем)

Если вы используете «основной» TensorFlow, т. е. создаете свой собственный сеанс, то замените конструкцию любых объектов tf.Session следующим образом:

sess = tfdbg.DumpingDebugWrapperSession(sess, dump_dir)
sess.run(fetches=my_fetches, feed_dict=my_feed_dict)

Дополнительную информацию см. в DumpingDebugWrapperSession.

API оценки

Если вы используете learn_runner или Experiment, вы можете использовать DumpingDebugHook:

experiment = Experiment(
  ...,
  train_monitors =[tfdbg.DumpingDebugHook(dump_dir)],
  ...
)
learn_runner.run(experiment)

К сожалению, я не вижу способа использовать такие фильтры, как tfdbg.has_inf_or_nan, кроме как с LocalCLIDebugHook. , поэтому вам просто нужно анализировать тензоры в автономном режиме.

Офлайн-анализ

Как только данные станут доступны в GCS, вы сможете изучить дампы с помощью предоставленного исполняемого модуля offline_analyzer. Вам нужно будет выбрать один из подкаталогов запуска:

python -m tensorflow.python.debug.cli.offline_analyzer \
    --dump_dir=$JOB_DIR/tfdbg_dumps/run_XXXXXXX
person rhaertel80    schedule 12.08.2017
comment
Как бы это изменилось, если бы я проводил эксперимент с Learn_runner напрямую, а не с sess.run? Стоит ли это отдельного вопроса или было бы лучше обновить ответ здесь, чтобы охватить оба случая? - person reese0106; 03.11.2017
comment
Кроме того, будет ли примером watch_fn tfdbg.has_inf_or_nan, если мы хотим отладить, почему потери расходятся до NaN? - person reese0106; 03.11.2017
comment
Обновил ответ. - person rhaertel80; 03.11.2017
comment
Я думаю, что это работает, но хочу отметить какое-то странное поведение, которое я вижу, и понимаю, если оно предназначено. Когда я захожу в журналы заданий, он показывает потерю на шаге 1, но затем он останавливается (хотя задание по-прежнему говорит о выполнении), и в журналы заданий больше ничего не выводится. Когда я смотрю в GCS, в папке tfdbg_dumps действительно есть что-то, но когда я запускаю --dump_dir=$JOB_DIR, я получаю сообщение об ошибке Путь к файлу дампа не соответствует шаблону именования: %s % base) ValueError: Dump путь к файлу не соответствует шаблону именования: контрольная точка - person reese0106; 03.11.2017
comment
Отдельно запускал --dump_dir=$JOB_DIR/tfdbg_dumps и получил отдельную ошибку tensorflow.python.framework.errors_impl.NotFoundError: Указанный путь gs://..jobdirhere../tfdbg_dumps/gs://..jobdirhere ../tfdbg_dumps/run_1509727304147533_0/_tfdbg_core_metadata_sessionrun00000000000025_1509727305971236 не найден. который я также не очень уверен, как интерпретировать. Любая идея, что происходит не так? Нужно ли завершить задание, прежде чем tfdbg_dumps станут доступны для запуска offline_analyzer? - person reese0106; 03.11.2017
comment
Извините за задержку. Я нашел ошибку в offline_analyzer и отправил исправление. Мне нужно посмотреть, захочет ли команда TensorFlow перенести исправление. А пока, возможно, я могу отправить вам патч напрямую. Какую версию ТФ вы используете? - person rhaertel80; 07.11.2017
comment
Похоже, что offline_analyzer будет работать с абсолютными путями. Поэтому, пока инструмент не будет исправлен, скопируйте один или несколько каталогов run* на локальный компьютер /VM и укажите абсолютный путь. - person rhaertel80; 07.11.2017
comment
Я пытаюсь пройти через это снова и так и не нашел способ запустить tfdbg на модели. Как запустить в контексте tf.estimator.train_and_evaluate()? мне нужно передать train_monitor в мой tf.estimator.RunConfig? - person reese0106; 24.12.2018
comment
Вы можете добавить хуки в TrainSpec, переданные в Estimator.train_and_evaluate(). - person rhaertel80; 04.01.2019