本文為您介紹ossfs 1.91.3版本更新內容。
新增功能
direct_read_backward_chunks參數
直讀模式下,ossfs保留[當前chunk - 1, 當前chunk + direct_read_prefetch_chunks]
區間內的資料,當前讀的位置之前只保留一個chunk的資料,如果使用者向前跳躍讀,則會丟棄大量已經預取的資料,有可能造成頻寬與資源浪費,以及效能下降。
新增參數direct_read_backward_chunks,使ossfs保留[當前chunk - direct_read_backward_chunks, 當前chunk + direct_read_prefetch_chunks]
區間內的資料。在AI推理情境下,載入safetensors模型檔案(隨機讀)時,通過調大direct_read_backward_chunks參數,能有更多的資料保留,減少資料重複下載,從而在一定程度上提升效能。
參數 | 說明 | 預設值 | |
direct_read_backward_chunks | 在直讀模式下,保留當前讀請求位置之前已下載的chunk數量,單位為個。1個chunk的預設大小為4 MB。 本次新增的參數。 | 1 | |
stat_cache_expire | 中繼資料到期時間,單位為秒。新支援設為-1,即永不到期。 失效後會重新載入快取資料。 | 900 |
混合直讀模式
在隨機讀頻繁且跳躍範圍較大的情境下:
直讀模式的ossfs會頻繁下載資料並丟棄,再重複下載,效能會受到很大影響。
預設模式的ossfs會將資料下載到磁碟上,在磁碟空間到達上限之前不會丟棄,因此無重複下載。
當檔案不大時,下載的資料直接寫到記憶體page cache中隨後直接返回,不會受到磁碟效能限制。
當檔案較大,page cache無法全部緩衝之後,讀效能受到磁碟效能制約。
混合直讀模式兼具了預設落盤模式和純直讀模式的優勢。小檔案可以全部利用page cache加速,大檔案可以充分利用page cache,超過一定上限之後才切換到直讀模式,同樣避免受到磁碟效能限制。
參數 | 說明 | 預設值 |
direct_read_local_file_cache_size_mb | 混合直讀模式下,資料預設下載到磁碟上。當下載資料總量超過該值時,切換到直讀模式,單位為MB。 | 0(等同直讀模式) |
效能測試
利用ossfs將遠程Bucket掛載至本地檔案系統,再使用PyTorch負載檔案來進行效能測試。測試結果如下:
機器規格
記憶體:15GB
磁碟頻寬:150MB/s
內網頻寬:500MB/s
掛載命令
預設模式ossfs掛載命令:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -oparallel_count=32 -omultipart_size=16
直讀模式ossfs掛載命令:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -odirect_read -odirect_read_chunk_size=8 -odirect_read_prefetch_chunks=64 -odirect_read_backward_chunks=16
混合直讀模式ossfs掛載命令:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -oparallel_count=32 -omultipart_size=16 -odirect_read -odirect_read_chunk_size=8 -odirect_read_prefetch_chunks=64 -odirect_read_backward_chunks=16 -odirect_read_local_file_cache_size_mb=3072
測試
測試指令碼:
import time from safetensors.torch import load_file file_path = "./my_folder/bert.safetensors" start = time.perf_counter() loaded = load_file(file_path) end = time.perf_counter() elapsed = end - start print("time_spent:", elapsed)
測試結果:
說明測試結果僅供參考,實際讀的耗時除了和檔案大小有關,也和safetensors模型結構本身有關。
檔案大小
預設模式
直讀模式
混合直讀模式
2.0 GB
4.00s
5.86s
3.94s
5.3 GB
20.54s
27.33s
19.91s
6.5 GB
30.14s
24.23s
17.93s