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這里同樣的問題
解決方法如下: