可以使用Cloud ML Engine培训工作运行tfdbg吗?
问题描述:
我找不到任何使用云ML引擎运行的tfdbg工具的示例。这个post展示了如何用调试器打包张量流会话,但我还没遇到任何以调试模式运行ML引擎包的方法。有没有人找到一种方法来做到这一点?可以使用Cloud ML Engine培训工作运行tfdbg吗?
答
CloudML引擎不支持交互式CLI调试器。但是,您应该可以使用offline debugger。如何让它在您的案例中发挥作用将取决于您的代码的结构。
假设您的代码被写入以接受--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
,看到docs。
核心TensorFlow(用户创建的会话)
如果你使用的“核心” TensorFlow,即创建自己的会话,然后将取代像这样的任何tf.Session对象的构造:
sess = tfdbg.DumpingDebugWrapperSession(sess, dump_dir)
sess.run(fetches=my_fetches, feed_dict=my_feed_dict)
有关更多信息,请参阅DumpingDebugWrapperSession docs。
估计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
如果我正在使用learn_runner而不是sess.run直接运行实验,该如何修改?这是值得一个单独的问题,还是最好在这里更新答案涵盖两种情况? – reese0106
另外,如果我们正在调试为什么损失会与NaN发生偏差,那么watch_fn的一个例子是tfdbg.has_inf_or_nan吗? – reese0106
更新了答案。 – rhaertel80