已挂载GCS存储桶无法在Vertex AI Jupyter Notebook中访问的解决方法
问题:Vertex AI Notebook中无法访问已挂载的GCS存储桶
我通过以下命令在Vertex AI Notebook的终端中挂载了GCS存储桶:
MY_BUCKET=cloud-ai-platform-a013866a-a18a-470f-9d35-f485abb17e82 cd ~/ mkdir -p gcs gcsfuse --implicit-dirs --rename-dir-limit=100 --disable-http2 --max-conns-per-host=100 $MY_BUCKET "/home/jupyter/gcs"
终端执行ls gcs/能看到存储桶内的目录:test uncorrupted_split_heightmaps,但在Jupyter Notebook中无法访问这些内容:
- 运行以下代码:
输出为空列表import os print(os.listdir('../gcs'))[],而非预期的['test', 'uncorrupted_split_heightmaps'] - 用
ImageDataGenerator读取数据时:
输出from tensorflow.keras.preprocessing.image import ImageDataGenerator idg = ImageDataGenerator() heightmap_iterator = idg.flow_from_directory('../gcs/test', target_size = (256, 256), batch_size = 8, color_mode = 'grayscale', classes = [''])Found 0 images belonging to 1 classes.,而非预期的Found 732458 images belonging to 1 classes.
解决方法
检查并使用绝对路径
Notebook的工作目录可能和终端的~/(即/home/jupyter/)不一致,先在Notebook中确认当前工作目录:import os print(os.getcwd())直接使用绝对路径访问挂载目录,避免相对路径的问题:
print(os.listdir('/home/jupyter/gcs'))调整gcsfuse挂载权限
终端挂载时的权限可能限制了Jupyter进程访问,重新挂载时添加--allow-other参数:# 先卸载已挂载目录 fusermount -u /home/jupyter/gcs # 重新挂载并开放权限 gcsfuse --implicit-dirs --rename-dir-limit=100 --disable-http2 --max-conns-per-host=100 --allow-other $MY_BUCKET "/home/jupyter/gcs"重启Jupyter内核
挂载操作是在终端执行的,Jupyter内核可能未感知到新挂载的目录,重启Notebook内核后再尝试访问。使用Vertex AI原生GCS访问方式
若gcsfuse挂载问题持续,可直接通过API访问存储桶,无需挂载:- TensorFlow直接读取GS路径:
from tensorflow.keras.preprocessing.image import ImageDataGenerator idg = ImageDataGenerator() heightmap_iterator = idg.flow_from_directory('gs://cloud-ai-platform-a013866a-a18a-470f-9d35-f485abb17e82/test', target_size = (256, 256), batch_size = 8, color_mode = 'grayscale', classes = ['']) - GCS SDK访问:
from google.cloud import storage client = storage.Client() bucket = client.get_bucket('cloud-ai-platform-a013866a-a18a-470f-9d35-f485abb17e82') # 列出test目录下的文件 blobs = bucket.list_blobs(prefix='test/') for blob in blobs: print(blob.name)
- TensorFlow直接读取GS路径:
内容的提问来源于stack exchange,提问作者Hayden
相关产品推荐
相关产品推荐

