Datasets documentation
Datasets 🤝 Arrow
はじめに
チュートリアル
ハウツーガイド
概要
一般的な使用方法
読み込みプロセスストリームPyTorchでの使用TensorFlow との併用NumPy との併用JAXとの併用Pandas との併用Polars との併用PyArrowとの併用Spark との併用キャッシュ管理クラウドストレージ検索インデックスCLIトラブルシューティング
オーディオ
ビジョン
画像データを読み込む画像データを処理する画像データセットを作成する深度推定画像分類セマンティックセグメンテーションオブジェクト検出動画データの読み込み動画データセットを作成するドキュメントデータの読み込みドキュメントデータセットを作成する医療画像データセットの作成
3D
テキスト
表形式データ
時系列
エージェントの評価
データセットリポジトリ
コンセプトガイド
リファレンス
Datasets 🤝 Arrow
Arrowとは何ですか?
Arrowは、大量のデータを高速に処理・移動することを可能にします。これは、データをカラムナリーなメモリレイアウトで保存する特定のデータ形式です。これにより、いくつかの重要な利点があります:
- Arrowの標準形式により、ゼロコピー読み取りが可能になり、シリアライズのオーバーヘッドがほぼ完全に排除されます。
- Arrowは言語非依存であるため、さまざまなプログラミング言語をサポートしています。
- Arrowはカラム指向であるため、データのスライスやカラムのクエリおよび処理が高速です。
- Arrowは、NumPy、Pandas、PyTorch、TensorFlowなどの標準的な機械学習ツールへのコピーなしの引き継ぎを可能にします。
- Arrowは、ネストされたものを含む多くのカラムタイプをサポートしています。
メモリマッピング
🤗 Datasetsは、ローカルキャッシュシステムにArrowを使用しています。これにより、ディスク上のキャッシュをバックエンドに持つことが可能になり、高速な検索のためにメモリマップリングが行われます。 このアーキテクチャにより、比較的小さなデバイスメモリを持つマシンでも、大規模なデータセットを使用できます。
例えば、英語版Wikipediaの完全なデータセットを読み込むには、RAMを数MBしか消費しません。
>>> import os; import psutil; import timeit
>>> from datasets import load_dataset
# Process.memory_info is expressed in bytes, so convert to megabytes
>>> mem_before = psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024)
>>> wiki = load_dataset("wikimedia/wikipedia", "20220301.en", split="train")
>>> mem_after = psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024)
>>> print(f"RAM memory used: {(mem_after - mem_before)} MB")
RAM memory used: 50 MBこれは、Arrowデータが実際にはメモリに読み込まれるのではなく、ディスクからメモリマップされているためです。 メモリマッピングにより、ディスク上のデータにアクセスでき、仮想メモリの機能を活用して高速な検索を行うことができます。
パフォーマンス
Arrow を使用してメモリマップドデータセットを反復処理するのは高速です。ラップトップで Wikipedia を反復処理すると、1〜3 Gbit/s の速度が得られます:
>>> s = """batch_size = 1000
... for batch in wiki.iter(batch_size):
... ...
... """
>>> elapsed_time = timeit.timeit(stmt=s, number=1, globals=globals())
>>> print(f"Time to iterate over the {wiki.dataset_size >> 30} GB dataset: {elapsed_time:.1f} sec, "
... f"ie. {float(wiki.dataset_size >> 27)/elapsed_time:.1f} Gb/s")
Time to iterate over the 18 GB dataset: 31.8 sec, ie. 4.8 Gb/s