我知道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的,但我确信有一种方法可以单独使用TF来实现。
发布于 2019-02-14 21:41:43
在系统上设置凭据的一个常见策略是使用应用程序默认凭据(ADC)。ADC是一种定位帐户凭据的策略。
如果设置了环境变量GOOGLE_APPLICATION_CREDENTIALS,ADC将使用变量指向的文件名作为服务帐户凭据。此文件是一个Json格式的帐户凭据文件。不推荐以前的P12 (PFX)证书。
如果没有设置环境变量,则如果应用程序运行在Compute Engine、App、Kubernetes引擎或Cloud函数上,则默认服务帐户用于凭据。
如果前两个步骤找不到有效的凭据,ADC将失败,并发生错误。
对于此问题,ADC无法找到凭据,并且TensorFlow写入GCS失败。
解决方案是将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为指向服务帐户Json文件。
对于Linux:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.jsonWindows操作系统
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\service-account.json我写了一篇更详细的关于ADC的文章。
发布于 2019-02-14 20:11:40
当您使用gsutil命令时,您正在使用Cloud中配置的GCP用户(执行:gcloud config list查看)。显然,您的python脚本没有在GCP中进行身份验证。
我相信这有一个更好的方法来解决这个问题(对不起,我对TensorFlow不太了解),但是我可以找到两个解决办法来解决这个问题:
First option -使用云熔点将云存储存储桶安装为文件系统
第二个选项-在本地编写并稍后移动。在这种方法中,您可以使用以下代码:
# Service Account file
JSON_FILE_NAME = '<Service account json file>'
# Imports the Google Cloud client library
from google.cloud import storage
# Instantiates a client
storage_client = storage.Client.from_service_account_json(JSON_FILE_NAME)
#Example file (using the service account)
source_file_path = 'your file path'
destination_blob_name = 'name of file in gcs'
# The name for the new bucket
bucket_name = '<bucket_name>'
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_path)
print('File {} uploaded to {}.'.format(
source_file_path,
destination_blob_name))发布于 2021-08-28 14:13:37
请注意,导出命令不会在jupyter笔记本中工作。如果你在笔记本电脑里,这个应该能用
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/json'https://stackoverflow.com/questions/54697451
复制相似问题