让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这里同样的问题
解决方法如下: