python - 从 Python 将 TFRecord 输出到 Google Cloud Storage

标签 python tensorflow google-cloud-platform google-cloud-storage tfrecord

我知道 tf.python_io.TFRecordWriter 有 GCS 的概念,但它似乎没有写入权限。

如果我执行以下操作:

output_path = 'gs://my-bucket-name/{}/{}.tfrecord'.format(object_name, record_name)
writer = tf.python_io.TFRecordWriter(output_path)
# write to writer
writer.close()

然后我收到 401,提示“匿名调用者没有 storage.objects.create 对我的存储桶名称的访问权限。”

但是,在同一台机器上,如果我执行 gsutil rsync -d r gs://my-bucket-name bucket-backup,它会正确地同步它,所以我已经使用 gcloud 正确地进行了身份验证.

如何授予 TFRecordWriter 写入 GCS 的权限?我现在打算只使用 Google 的 GCP python API,但我确信有一种方法可以单独使用 TF 来完成此操作。

最佳答案

在系统上设置凭证的常见策略是使用应用程序默认凭证 (ADC)。 ADC 是一种定位 Google 云服务帐户凭据的策略。

如果设置了环境变量 GOOGLE_APPLICATION_CREDENTIALS,ADC 将使用该变量指向的文件名作为服务帐户凭据。此文件是 Json 格式的 Google 云服务帐户凭据文件。以前的 P12 (PFX) 证书已弃用。

如果未设置环境变量,如果应用程序在 Compute Engine、App Engine、Kubernetes Engine 或 Cloud Functions 上运行,则默认服务帐户将用于凭据。

如果前两个步骤未能找到有效凭证,ADC 将失败,并发生错误。

对于这个问题,ADC 找不到凭证,TensorFlow 写入 GCS 失败。

解决方法是设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向服务账号Json文件。

对于 Linux:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json

对于 Windows

set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\service-account.json

我写了一篇文章,更详细地介绍了 ADC。

Google Cloud Application Default Credentials

关于python - 从 Python 将 TFRecord 输出到 Google Cloud Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54697451/

相关文章:

python - 如何在python中创建一个派生自QObject的抽象基类

python-3.x - 在keras中打印model.output的张量值输出

google-cloud-platform - 如何将 Google Cloud Run 服务置于 Cloud CDN 后面?

html - 找不到处理程序引用的错误静态文件 : dist/api/landing for Angular App deployed on Google Cloud

python - 使用python sqlalchemy,如何定义多列主键

python - 在装饰类多方法时丢失了 self

python - 有没有一种优雅的方法来使用 pytest 测试 ray 远程功能?

machine-learning - TensorFlow - random_crop 在 Cifar10 示例中做什么?

tensorflow - 使用@tf.function 时,训练从 Tensorflow 2.0 中的同一类定义的多个模型失败

google-cloud-platform - 使用服务帐户进行跨项目管理