全部產品
Search
文件中心

Object Storage Service:1.91.3版本

更新時間:Nov 20, 2024

本文為您介紹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