Datasets documentation
Datasets 🤝 Arrow
はじめに
チュートリアル
ハウツーガイド
概要
一般的な使用方法
読み込みプロセスストリームPyTorchでの使用TensorFlow との併用NumPy との併用JAXとの併用Pandas との併用Polars との併用PyArrowとの併用Spark との併用キャッシュ管理クラウドストレージ検索インデックスCLIトラブルシューティング
オーディオ
ビジョン
画像データを読み込む画像データを処理する画像データセットを作成する深度推定画像分類セマンティックセグメンテーションオブジェクト検出動画データの読み込み動画データセットを作成するドキュメントデータの読み込みドキュメントデータセットを作成する医療画像データセットの作成
3D
テキスト
表形式データ
時系列
エージェントの評価
データセットリポジトリ
コンセプトガイド
リファレンス
You are viewing main version, which requires installation from source. If you'd like
regular pip install, checkout the latest stable version (v5.2.0).
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