为什么使用 Google AI-Platform 进行的本地训练在虚拟环境中不起作用?

Why does local training with Google AI-Platform not work in a virtual environment?

我正在使用来自 Google 云平台的 AI 平台,使用来自 Google 云平台 GitHub 的 this template 和 scikit-learn 训练随机森林分类器.

我已经调整了一些地方的代码以适应我自己的问题。代码是在 Python 3.5 中使用 PyCharm 并在 Ubuntu 设备上编写的。使用以下终端command(不包括附加参数)在云中训练模型非常好:

gcloud ai-platform jobs submit training

但是当我尝试在我的虚拟环境中使用 ai-platform local training functionality 时 (python 3.5):

gcloud ai-platform local train

(不包括附加参数)。它 returns 出现以下错误:

Traceback (most recent call last):
  File "/snap/google-cloud-sdk/99/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/snap/google-cloud-sdk/99/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/merijn/PycharmProjects/user-matching/trainer/task.py", line 28, in <module>
    from trainer import model
  File "trainer/model.py", line 28, in <module>
    from trainer import utils
  File "trainer/utils.py", line 23, in <module>
    from tensorflow import gfile
ImportError: No module named tensorflow

所有依赖项都已正确安装在我的虚拟环境中,包括 TensorFlow。 TensorFlow导入报错之前是sklearn导入报错,我在正常环境下安装sklearn模块解决了。这支持了我的猜测,它可能与我正常环境中 python 2.7 上的 Google SDK 运行ning 有关。因此,当 运行 在我的 venv 中使用 gcloud 命令时,它很可能 运行 在我的正常环境中而不是我的 venv 中运行我的整个程序,到目前为止我无法强制它 运行 在我的 venv 中。请注意,我已经为参数 --job-dir--package-path.

尝试了许多不同的值

在互联网上搜索了几天后,我仍然找不到在安装了 python 3.5 的虚拟环境中使用 AI 平台进行本地训练的方法。希望你能帮助我。

你是对的。这与 gcloud 无法在本地执行 Python3 程序有关。

存在一个非常简单的解决方法——不要使用 gcloud ai-platform local train。 相反,直接调用 python 解释器:

export PYTHONPATH=${PYTHONPATH}:/some/dir/package/path
python3 -m trainer.task --job-dir /tmp ...