forge training存儲設(shè)計

前言

由于AI訓(xùn)練需要大量的數(shù)據(jù),因此forge training作為AI訓(xùn)練平臺,需要提供健壯,可伸縮性,高吞吐,高并發(fā),低延遲的存儲服務(wù)供算法同事使用。

實踐準備

1.參考資料
minio官方文檔
ceph官方文檔
zfs官方文檔
zfs ubuntu初始設(shè)定
ZFS Raidz Performance, Capacity and Integrity
openstack官方文檔
git s3fs
使用s3(minio)為kubernetes提供pv存儲
openpai 官方文檔

上述資料關(guān)于DDD部分,需要反復(fù)閱讀,并結(jié)合git示例源碼進行學(xué)習(xí)

概述

如下所示,就是一個簡化版的forge training訓(xùn)練平臺存儲方案。forge training是基于微軟開源訓(xùn)練平臺進行定制化改造,而形成的深度學(xué)習(xí)訓(xùn)練平臺。
其中黑色方塊代表啟動的訓(xùn)練任務(wù)(pod), 用戶的訓(xùn)練代碼就在相應(yīng)的pod中執(zhí)行。


總體簡圖.png

用戶有三種方式自由選擇如何使用AI訓(xùn)練數(shù)據(jù)
1.從minio 集群直接拉取數(shù)據(jù)到本地磁盤,然后k8s將本地磁盤 以bind的方式掛載到pod中,用戶因此可以像操作本地磁盤數(shù)據(jù)一樣,操作下載下來的Ai數(shù)據(jù)。
2.從minio 集群直接拉取數(shù)據(jù)到ceph rbd 磁盤,然后k8s將ceph rbd存儲通過rbd csi插件掛載到pod中,用戶因此也可以像操作本地磁盤數(shù)據(jù)一樣,操作下載下來的Ai數(shù)據(jù)。
3.將minio通過s3fs進行包裝,直接將minio與forge training進行集成,用戶可以直接在forge training上進行操作,勾選需要的數(shù)據(jù)。具體操作參考openpai官方文檔,如圖所示:


數(shù)據(jù)使用.png

我們提供三種存儲的原因在于,s3fs對讀操作很友好,但是在寫功能上有很多限制,例如:不支持隨機寫,任何文件修改都需要重新上傳整個文件。因此使用本地文件作為緩存,然后定期同步到minio對象存儲。因為同步會造成大量重復(fù)寫操作,forge training對寫操作做了劃分,一類是寫大量的小文件操作,一類是模型同步等的大文件操作。小文件使用較短的同步周期,大文件使用較長的同步周期。

簡而言之,如果只讀就直接使用minio集群數(shù)據(jù),如果讀寫可以拉取到本地磁盤,當(dāng)本地磁盤大小不夠時,考慮使用ceph rbd存儲。

minio集群設(shè)計

因為我們的機器配置是,3210T hdd+21.8T nvme+萬兆網(wǎng)卡。因為minio默認一個硬盤是一個driver,而minio 最大糾刪碼集是16,因此最多允許8塊盤故障,如果單機32個driver,一旦一個機器節(jié)點宕機就容易導(dǎo)致數(shù)據(jù)丟失。為了解決這個問題可以有兩個方案:
1.使用多個mino實例,每個實例4個驅(qū)動,4臺機器,一共使用16個driver組建一個集群。由于我們每個機器有32個盤,因此每個機器需要啟動8個實例
2.使用zfs,將多個driver合并成一個driver
由于第一種方案需要管理過多的實例,運維成本大幅增加,第二個方案不僅不用多個實例還可以利用zfs的raidz提升磁盤性能與容災(zāi)。所以minio設(shè)計方案如下

minio集群.png

我們底層使用zfs將30個hdd做成一個存儲池,2個ssd作為這個存儲池的緩存,同時開啟lz4壓縮提高寫入性能和增加存儲空間利用。然后將每個存儲池掛載到主機目錄,然后minio使用這個目錄作為driver,啟動minio服務(wù)。因為啟動的4個minio服務(wù)構(gòu)成一個minio集群,為了統(tǒng)一訪問入口和負載均衡,故使用nginx作為統(tǒng)一入口。
同時使用promethues收集minio集群信息,將prometheus和minio dashboard集成,實時展示minio集群信息。

每個minio服務(wù)都可以直接提供服務(wù),因此如果對于性能要求比較高的場景,配置客戶端訪問minio集群時,可以不經(jīng)過nginx,直接訪問任意minio服務(wù)

性能與容災(zāi)

經(jīng)測試,minio集群中任意磁盤故障,任意節(jié)點故障,都不影響數(shù)據(jù)完整性。同時還能提供相應(yīng)的對象存儲服務(wù)。
性能分為兩部分,一是zfs磁盤讀寫性能,二是minio的讀寫性能。

zfs性能實踐

考慮到系統(tǒng)的容災(zāi)能力,我們zfs直接使用raidz2的方式,因為不同數(shù)量的磁盤,zfs的讀寫能力不同,經(jīng)測試后,發(fā)現(xiàn)15塊盤左右做vdev性能會比較優(yōu)異。大概讀1.7g/s 寫 561m/s 重寫 627m/s


42304533-393c-43ca-b8d5-0b4a89f7a74b.png

e4a56567-86a5-4833-9ac9-7ac0433427c7.png

8f6ccf43-cc41-4973-8aa2-bb427015d287.png

于是在15塊盤做vdev基礎(chǔ)上,又增加了nvme做讀寫緩存,啟用lz4壓縮進一步提升性能,最終zfs讀寫速度為:讀2.2g/s 寫 635m/s 重寫 781m/s


82b4a623-1979-4ed2-9aa6-9909255bceaf.png

minio性能

首先我們直接采用minio作者,推薦的方式,硬盤+xfs,一個硬盤對應(yīng)一個driver。參考 minio issue,測試結(jié)果。

團隊服務(wù)代碼結(jié)構(gòu).png

這個代碼結(jié)構(gòu)基本和eshopContainer一致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容