回答

2

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_runnerExperiment,您可以使用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 
+0

如果我正在使用learn_runner而不是sess.run直接运行实验,该如何修改?这是值得一个单独的问题,还是最好在这里更新答案涵盖两种情况? – reese0106

+0

另外,如果我们正在调试为什么损失会与NaN发生偏差,那么watch_fn的一个例子是tfdbg.has_inf_or_nan吗? – reese0106

+0

更新了答案。 – rhaertel80

相关问题