2

我正在通过超参数调整在 Google ML Engine 上运行 TensorFlow 应用程序,并且遇到了一些奇怪的身份验证问题。

我的数据和权限设置

我的培训师代码支持两种获取模型输入数据的方式:

  1. 从 BigQuery 获取表。
  2. .csv从文件中读取。

对于我的 IAM 权限,我设置了两个成员:

  1. 我的用户帐户:

    • 分配给以下 IAM 角色:
      1. 项目负责人 ( roles/owner)
      2. BigQuery 管理员 ( roles/bigquery.admin)
    • 我使用时会自动创建凭据gcloud auth application-default login
  2. 服务帐号:

    • 分配给以下 IAM 角色:
      1. BigQuery 管理员 ( roles/bigquery.admin)
      2. 存储管理员 ( roles/storage.admin)
      3. 发布订阅管理员 ( roles/pubsub.admin)
    • .json当我在 Google Cloud Platform 界面中创建凭据时,凭据已下载到文件中。

问题

当我使用我的用户帐户凭据在 Google ML 引擎上运行我的培训师代码并从.csv文件中读取时,一切正常。

但是,如果我尝试从 BigQuery 获取数据,则会收到以下错误:

    Forbidden: 403 Insufficient Permission (GET https://www.googleapis.com/bigquery/v2/projects/MY-PROJECT-ID/datasets/MY-DATASET-ID/tables/MY-TABLE-NAME)

这就是我创建服务帐户的原因,但服务帐户有一组单独的问题。使用服务帐户时,我可以从.csv文件和 BigQuery 中读取数据,但在这两种情况下,每次试用结束时都会出现以下错误:

    Unable to log objective metric due to exception <HttpError 403 when requesting https://pubsub.googleapis.com/v1/projects/MY-PROJECT-ID/topics/ml_MY-JOB-ID:publish?alt=json returned "User not authorized to perform this action.">.

这不会导致作业失败,但会阻止记录客观指标,因此超参数调整不会提供任何有用的输出。

问题

我不确定为什么当我的 IAM 成员被分配到我很确定是正确的角色时,我会收到这些权限错误。

当我在本地运行时,我的培训师代码在所有情况下都有效(尽管在本地运行时显然没有使用 PubSub),所以我相当确定这不是代码中的错误。

有什么建议么?

笔记

有一次,我的服务帐户在尝试访问 BigQuery 时遇到了与我的用户帐户相同的错误。我偶然发现的解决方案很奇怪。我决定从我的服务帐户中删除所有角色并再次添加它们,这解决了该成员的 BigQuery 权限问题。

4

1 回答 1

3

感谢您提出非常详细的问题。

为了解释这里发生了什么,在第一种情况下,Cloud ML Engine 使用了一个内部服务帐户(使用该Cloud ML Service Agent角色添加到您的项目中的那个)。由于一些内部安全考虑,该服务帐户被限制访问 BigQuery,因此您看到的第一个 403 错误。

现在,当您使用凭证文件将机器凭证替换为您自己的服务帐户时.json,该限制就消失了。但是,您的服务帐户没有对内部系统的所有访问权限,例如用于内部超参数调整机制的 pubsub 服务。因此,第二种情况下的 pubsub 错误。

这个问题有几个可能的解决方案:

  • 在 Cloud ML Engine 方面,我们正在努力提供更好的开箱即用 BigQuery 支持,尽管我们目前还没有 ETA。

  • 只要您不使用超参数调整,您使用自定义服务帐户的方法可能会作为一种短期解决方案。但是这显然很脆弱,因为它取决于 Cloud ML Engine 中的实现细节,所以我不建议长期依赖这个

  • 最后,考虑先将数据从 BigQuery 导出到 GCS,然后使用 GCS 读取训练数据。此场景在 Cloud ML Engine 中得到很好的支持。此外,与直接读取 BigQuery 相比,您将在大型数据集上获得性能提升:BigQueryReaderTensorFlow 中的当前实现具有次优的性能特征,我们也在努力改进。

于 2017-07-27T18:08:37.393 回答