0

我正在尝试遵循本教程: https ://medium.com/@natu.neeraj/training-a-keras-model-on-google-cloud-ml-cb831341c196

在 Google Cloud Platform 上上传和训练 Keras 模型,但我无法让它工作。

现在我已经从 GitHub 下载了这个包,我已经创建了一个带有 AI-Platform 和一个存储桶的云环境。

我正在将文件(具有建议的文件夹结构)上传到我的 Cloud Storage 存储桶(基本上到我的存储的根目录),然后在云终端中尝试以下命令:

gcloud ai-platform jobs submit training JOB1 
 --module-name=trainer.cnn_with_keras 
 --package-path=./trainer 
 --job-dir=gs://mykerasstorage      
 --region=europe-north1         
 --config=gs://mykerasstorage/trainer/cloudml-gpu.yaml

但是我收到错误,首先找不到 cloudml-gpu.yaml文件,它说“没有这样的文件夹或文件”,然后试图删除它,我收到错误,因为它说--init--.py文件丢失,但它不是,即使它是空的(当我从教程 GitHub 下载时)。我猜我没有以正确的方式上传它。

关于我应该如何做到这一点的任何建议?教程本身中确实没有这方面的信息。

我在另一个指南中读到可以让 gcloud 打包并直接上传作业,但我不确定如何执行此操作或在我的终端中使用命令在哪里编写gcloud命令?还是在浏览器的 Cloud Shell 中?以及如何定义我的 python 文件所在的路径?

应该提到我正在使用 Mac,并且对使用 Keras 和 Python 非常陌生。

4

3 回答 3

3

我能够成功地按照您提到的教程进行操作,并在此过程中进行了一些修改。

我会提到所有的步骤,尽管你提到了一半。

首先为作业创建一个云存储桶:

gsutil mb -l europe-north1 gs://keras-cloud-tutorial

要回答您应该在哪里编写这些命令的问题,取决于您想要存储将从 GitHub 下载的文件的位置。在您发布的教程中,作者使用自己的计算机运行命令,这就是他使用gcloud init. 但是,如果您在那里下载所需的文件,您也可以从 Cloud Shell 提交作业。我们需要从存储库中获取的唯一文件是trainer文件夹和setup.py文件。因此,如果我们将它们放在一个名为的文件夹中,keras-cloud-tutorial我们将具有以下文件结构:

keras-cloud-tutorial/
├── setup.py
└── trainer
    ├── __init__.py
    ├── cloudml-gpu.yaml
    └── cnn_with_keras.py

现在,错误的一个可能原因ImportError: No module named eager是您可能更改了文件runtimeVersion内部cloudml-gpu.yaml。正如我们在这里所读到的,eager它是在 Tensorflow 1.5 中引入的。如果您指定了早期版本,则预计会遇到此错误。所以 的结构cloudml-gpu.yaml应该是这样的:

trainingInput:
  scaleTier: CUSTOM
  # standard_gpu provides 1 GPU. Change to complex_model_m_gpu for 4 GPUs
  masterType: standard_gpu
  runtimeVersion: "1.5"

注意:“standard_gpu”是旧机器类型

此外,该setup.py文件应如下所示:

from setuptools import setup, find_packages

setup(name='trainer',
      version='0.1',
      packages=find_packages(),
      description='Example on how to run keras on gcloud ml-engine',
      author='Username',
      author_email='user@gmail.com',
      install_requires=[
          'keras==2.1.5',
          'h5py'
      ],
      zip_safe=False)

注意:如您所见,我已经指定了我想要2.1.5keras. 这是因为如果我不这样做,则会使用最新版本,它与2.0.

如果一切都设置好了,您可以通过在文件夹中运行以下命令来提交作业keras-cloud-tutorial

gcloud ai-platform jobs submit training test_job --module-name=trainer.cnn_with_keras --package-path=./trainer --job-dir=gs://keras-cloud-tutorial --region=europe-west1 --config=trainer/cloudml-gpu.yaml

注意:我使用了命令gcloud ai-platform而不是gcloud ml-engine命令,尽管两者都可以。但在未来的某个时候,gcloud ml-engine将被弃用。

注意:在选择提交作业的区域时要小心。某些区域不支持 GPU,如果选择会抛出错误。例如,如果在我的命令中我将region参数设置为europe-north1而不是europe-west1,我将收到以下错误:

错误:(gcloud.ai-platform.jobs.submit.training)RESOURCE_EXHAUSTED:项目配额失败。对 1 个 K80 加速器的请求超过了 0 K80、0 P100、0 P4、0 T4、0 TPU_V2、0 TPU_V3、0 V100 的允许最大值。要详细了解 Cloud ML Engine 配额,请参阅https://cloud.google.com/ml-engine/quotas。-“@type”:type.googleapis.com/google.rpc.QuotaFailure 违规:-描述:对 1 个 K80 加速器的请求超过了允许的最大值 0 K80、0 P100、0 P4、0 T4、0 TPU_V2、0 TPU_V3 , 0 V100。主题:

您可以在此处此处阅读有关每个区域的功能的更多信息。

编辑:

训练作业完成后,您指定的存储桶中应该有 3 个文件夹logs/model/packages/。模型保存在model/文件夹中的一个.h5文件中。请记住,如果您为目标设置了特定文件夹,则应在末尾包含“/”。例如,您应该设置gs://my-bucket/output/而不是gs://mybucket/output. 如果你做后者,你最终会得到文件夹output,outputlogsoutputmodel. 里面output应该有packages。作业页面链接应指向output文件夹,因此请务必检查存储桶的其余部分!

此外,在 AI-Platform 作业页面中,您应该能够看到有关CPU和利用率的信息: GPUNetworkAI-Platform培训作业页面截图

另外,我想澄清一些事情,因为我看到您发布了一些相关问题作为答案:

您的本地环境,无论是您的个人 Mac 还是 Cloud Shell,都与实际的培训工作无关。您不需要在本地安装任何特定的包或框架。您只需要安装 Google Cloud SDK(当然已经安装在 Cloud Shell 中)即可运行相应的gcloud命令gsutil您可以在此处阅读更多关于 AI 平台上的训练作业如何工作的详细信息。

我希望你会发现我的回答很有帮助。

于 2020-01-21T15:40:00.463 回答
0

GPU的问题现在已经解决了,很简单,我的谷歌云帐户禁用了GPU设置,需要升级。

于 2020-01-25T22:20:07.967 回答
0

我现在通过不上传文件而只是在本地终端上从云端运行上传命令来让它工作到一半......但是在运行过程中出现错误,以“作业失败”结尾

似乎它试图从 TensorFlow 后端导入一些名为“from tensorflow.python.eager import context”的东西,但是有一个 ImportError: No module named eager

我试过“pip install tf-nightly”,这是在另一个地方建议的,但它说我没有权限或者我失去了与云 shell 的连接(正是当我尝试运行命令时)。

我还尝试在本地创建一个虚拟环境以匹配 gcloud(使用 Conda)上的虚拟环境,并使用Python=3.5、Tensorflow=1.14.0和Keras =2.2.5使用 Conda 创建了一个环境,gcloud应该支持这些环境。

python 程序在本地的这个环境中运行良好,但是当我尝试在 gcloud 上运行作业时,我仍然得到 (ImportError: No module named eager)。

我在提交作业时放置了标志 --python-version 3.5,但是当我在谷歌云 shell 中编写命令“Python -V”时,它显示 Python=2.7。这可能是问题吗?我还没有找到使用云 shell 提示更新 python 版本的方法,但它说谷歌云应该支持 python 3.5。如果这仍然是问题,关于如何在谷歌云上升级 python 版本的任何建议?

也可以手动在谷歌云网络界面中找到一个新工作,这样做,我收到一条不同的错误消息:错误:找不到满足要求 cnn_with_keras.py 的版本(来自版本:无)无匹配为 cnn_with_keras.py 找到分布。其中cnn_with_keras.py是本教程中的我的 python 代码,它在本地运行良好。

真的不知道接下来该怎么办。任何建议或提示都会非常有帮助!

于 2020-01-21T12:19:16.800 回答