You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GSutil URI 间歇性失效求助:部分云存储文件无法访问

问题原因与解决方案

核心原因

  • pandas的read_csv等IO方法内置支持云存储协议(包括GS),这是因为pandas依赖了fsspec/gcsfs这类云存储适配库,Vertex AI环境默认预装了这些依赖,因此可以直接解析gs://路径。
  • Python内置的open()函数、以及默认配置下的numpy.load()不支持云存储URI,它们只能识别本地文件系统路径,会把gs://当成本地目录结构,自然触发FileNotFoundError。

可行解决方案

方案1:用gcsfs库直接操作云存储文件

gcsfs是专门适配Google Cloud Storage的文件系统库,可直接替代本地文件操作:

  • 确保环境已安装gcsfs(Vertex环境通常已预装,若没有则执行pip install gcsfs)
  • 替换open()操作:
from gcsfs import GCSFileSystem

fs = GCSFileSystem()
with fs.open('gs://poker030120203/rank_table.bin', 'r') as f:
    rank_table_content = f.read()
  • 替换numpy.load()操作:
from gcsfs import GCSFileSystem
import numpy as np

fs = GCSFileSystem()
with fs.open('gs://poker030120203/preflop_table.npy', 'rb') as f:
    self.preflop_table = np.load(f)

方案2:下载文件到本地临时目录再操作

如果不想引入额外库依赖,可先将云存储文件下载到本地临时路径,再用原生方法读取:

from google.cloud import storage
import tempfile
import numpy as np
import os

# 初始化存储客户端
storage_client = storage.Client()
bucket = storage_client.bucket('poker030120203')

# 处理npy文件
blob = bucket.blob('preflop_table.npy')
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
    blob.download_to_file(tmp_file)
    tmp_path = tmp_file.name

self.preflop_table = np.load(tmp_path)
# 用完删除临时文件
os.unlink(tmp_path)

方案3:配置numpy启用远程存储支持(numpy 1.21+)

numpy从1.21版本开始支持通过fsspec访问远程存储,只需确保fsspec和gcsfs已安装,即可直接使用gs://路径:

import numpy as np

# 确保fsspec、gcsfs已安装
self.preflop_table = np.load('gs://poker030120203/preflop_table.npy', allow_pickle=False)

注:allow_pickle参数根据文件是否包含pickle对象调整,若文件是普通numpy数组可设为False。

额外验证点

  • 检查文件路径拼写:GCS路径大小写敏感,确认文件名(如rank_table.bin、preflop_table.npy)拼写完全正确,无大小写错误或笔误。
  • 确认权限:虽然pandas能读取文件说明权限基本没问题,但可验证Vertex服务账号是否拥有该存储桶的storage.objects.get权限。

内容的提问来源于stack exchange,提问作者Raphaël Ambit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:05:42