このトピックでは、ossfs 1.91.3の更新について説明します。
新機能
新しいパラメーターdirect_read_backward_chunks。
ossfs V1.91.2では、カレントチャンクの前のチャンクからカレントチャンクの後のdirect_read_prefetch_chunksまでの範囲のデータをメモリに保持する。 現在の読み取り位置の1つ前のチャンクのみが保持されます。 現在の読み取り位置よりも2つ前のチャンクでデータを読み取ろうとすると、プリフェッチされたデータが大量に破棄され、追加の帯域幅消費、リソースの浪費、パフォーマンスの低下を引き起こす可能性があります。
ossfs V1.91.3では、direct_read_backward_chunksパラメーターが追加され、ossfsが現在のチャンクの前に指定された数のチャンクをメモリに保持できるようになります。 direct_read_backward_chunksパラメーターとdirect_read_prefetch_chunksパラメーターを併用すると、現在のチャンクの前の指定数から現在のチャンクの後の指定数の範囲のデータをメモリに保持できます。 Safetensorsファイル (ランダム読み取り) をロードする場合などのAI推論シナリオでは、direct_read_backward_chunksパラメーターの値を合理的に大きくして、メモリ内のデータをより多く保持し、データの繰り返しダウンロードを減らしてパフォーマンスを向上させることができます。
パラメーター | 説明 | デフォルト値 | |
direct_read_backward_chunks | 直接読み取りモードで保持できる現在の読み取り位置の前のチャンクの数。 チャンクのデフォルトサイズは4 MBです。
| 1 | |
stat_cache_expire | メタデータの有効期間 (秒単位) 。 このバージョンから、パラメーターは-1に設定できます。これは、メタデータが期限切れにならないことを指定します。 メタデータの有効期限が切れると、データはバッファにリロードされます。 | 900 |
ハイブリッド読み取りモード
ランダムな読み取りが頻繁に行われ、読み取りオフセットが広範囲に及ぶシナリオでは、
直接読み取りモードでは、ossfsは頻繁にデータをダウンロードし、データを破棄し、データを再ダウンロードします。 これは、読み取り性能を著しく低下させる。
デフォルトの読み取りモードでは、ossfsはデータをローカルディスクにダウンロードし、ディスク容量が使い果たされるまでダウンロードしたデータを破棄しません。 その結果、ダウンロードの繰り返しは発生しません。
要求されたファイルのサイズが大きくない場合、それはメモリ内のページキャッシュに書き込まれ、ページキャッシュから直接要求者に提供される。 このように、読み取り性能はディスク性能によって制限されない。
要求されたファイルのサイズが大きすぎてページキャッシュに完全に書き込まれない場合、読み取りパフォーマンスはディスクパフォーマンスによって制限されます。
ハイブリッド読み取りモードは、デフォルトモード (ディスクからデータを読み取る) と直接読み取りモードの利点を兼ね備えています。 ハイブリッド読み取りモードでは、小さなファイルはページキャッシュの高速化を最大限に活用しますが、大きなファイルは最初はページキャッシュを効率的に利用し、定義されたしきい値に達すると直接読み取りモードに切り替えられます。 ハイブリッド読み取りモードは、小さなファイルと大きなファイルの両方を読み取るときの潜在的なディスクパフォーマンスの制約を回避できます。
パラメーター | 説明 | デフォルト値 |
direct_read_local_file_cache_size_mb | ハイブリッド読み取りモードでは、データはデフォルトでローカルディスクに最初にダウンロードされます。 ダウンロードされたデータがこのパラメーターで指定されたサイズのしきい値 (MB) を超えると、直接読み取りモードが使用されます。 | 0 (この値を設定することは、直接読み取りモードのみを使用することと同等です。) |
パフォーマンステスト
ossfsを使用してリモートバケットをローカルファイルシステムにマウントし、PyTorchを使用してパフォーマンステスト用のファイルを読み込みます。 テスト結果は次のとおりです。
マシン仕様
メモリ: 15 GB
ディスク帯域幅: 150メガバイト/秒
内部帯域幅: 500メガバイト/秒
マウントコマンド
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