分段错误:将 TensorFlow 脚本从 Python 3 反向移植到 Python 2 后出现 11
Segmentation fault: 11 after back-porting TensorFlow script from Python 3 to Python 2
在为 Python 3 创建 TensorFlow 1.4 模型后,我发现 Google Cloud ML Engine 目前仅支持 Python 2.7。
向后移植我的 Python 3 代码起初看起来很简单:当我用 #!/usr/bin/env python
替换它们的 shebang #!/usr/bin/env python3
时,一些脚本仍然按预期工作。 python -V
在我的 (macOS) 环境中报告 2.7.10
。
然而,有一个脚本并没有如此优雅地做出反应。当我现在 运行 它时,它会产生一个 Segmentation fault: 11
,没有任何先前的警告或其他诊断输出。
我怎样才能找出根本原因,以便我知道还需要更改哪些内容才能使该脚本也适合 Python 2?
UPDATE 分段错误显然是在调用 session.run(get_next)
期间发生的,其中 get_next
是从 tf.data.Iterator
中获取的,如下所示:
iterator = dataset.make_initializable_iterator()
get_next = iterator.get_next()
这里有两个问题:一个是关于Python 3 支持,另一个是关于段错误。
Python 3 支持
CloudML Engine 现在支持 Python 3,在提交作业时通过 'pythonVersion' 字段(参见 API reference docs)。
如果您使用的是 gcloud
,您将需要像这样创建一个配置文件(我们将其命名为 config.yaml
):
trainingInput:
pythonVersion: "3.5"
提交作业时,将 gcloud
指向该文件,例如
gcloud ml-engine jobs submit training --config=config.yaml ...
段错误
这可能是 运行 内存不足造成的。请在控制台中检查该作业的内存使用情况。也就是说,如果作业突然终止,则可能无法准确反映该作业在失败时的内存使用情况。
在为 Python 3 创建 TensorFlow 1.4 模型后,我发现 Google Cloud ML Engine 目前仅支持 Python 2.7。
向后移植我的 Python 3 代码起初看起来很简单:当我用 #!/usr/bin/env python
替换它们的 shebang #!/usr/bin/env python3
时,一些脚本仍然按预期工作。 python -V
在我的 (macOS) 环境中报告 2.7.10
。
然而,有一个脚本并没有如此优雅地做出反应。当我现在 运行 它时,它会产生一个 Segmentation fault: 11
,没有任何先前的警告或其他诊断输出。
我怎样才能找出根本原因,以便我知道还需要更改哪些内容才能使该脚本也适合 Python 2?
UPDATE 分段错误显然是在调用 session.run(get_next)
期间发生的,其中 get_next
是从 tf.data.Iterator
中获取的,如下所示:
iterator = dataset.make_initializable_iterator()
get_next = iterator.get_next()
这里有两个问题:一个是关于Python 3 支持,另一个是关于段错误。
Python 3 支持 CloudML Engine 现在支持 Python 3,在提交作业时通过 'pythonVersion' 字段(参见 API reference docs)。
如果您使用的是 gcloud
,您将需要像这样创建一个配置文件(我们将其命名为 config.yaml
):
trainingInput:
pythonVersion: "3.5"
提交作业时,将 gcloud
指向该文件,例如
gcloud ml-engine jobs submit training --config=config.yaml ...
段错误 这可能是 运行 内存不足造成的。请在控制台中检查该作业的内存使用情况。也就是说,如果作业突然终止,则可能无法准确反映该作业在失败时的内存使用情况。