让tensorflow访问minio生成的s3接口

0 背景

通常我们使用tensorflow访问的基本都是本地文件,亦或是给定hdfs路径,让其访问hdfs文件,而新晋的minio可很好地生成s3兼容的api接口,从而让tensorflow直接读取minio建立的分布式文件系统。本文简单基于单机minio形式讲解如何从头让tensorflow访问minio

1 创建单机minio

minio官网所示,因minio是go写的,故而安装变得十分简单:

首先下载:

http://dl.minio.org.cn/server/minio/release/linux-amd64/minio

其次将其赋予可执行权限,并指定本机目录将其拉起

chmod +x minio
mkdir /data
./minio server /data

如上图所示,我们可以通过浏览器很方便的访问

其中浏览器右下角有个加号,其有2个功能:增加bucket和上传文件

2 tensorflow访问

minio官网中博客tensorflow的github中所述方法:
首先设定环境变量,其中我用的是默认的账户和密码,

export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
export AWS_REGION="us-east-1"
export S3_USE_HTTPS='0'
export S3_VERIFY_SSL='0'
export S3_ENDPOINT=http://你的ip:9000
# 在tf2.x版本上去掉http://开头也是能访问的,而在tf1.x中如果带着http前缀,反而会报错
# export S3_ENDPOINT=你的ip:9000 

然后可直接安装tensorflow 2.4.1(2.x版本作为示例)

import tensorflow as tf
tf.io.gfile.listdir('s3://test/')

结果如下图所示:

2.1 分布式tensorflow训练时模型路径

在分布式训练时,s3的模型存储记得多一级目录,如采用s3://dir1/dir2的方式,而不是直接s3://dir1(别问我原因,我也很好奇,也很懵逼),否则会爆如下图所示,同时也是tensorflow的issue这里同样的问题

解决方法如下:

原文地址:https://www.cnblogs.com/shouhuxianjian/p/14597077.html