0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WebDataset と Parquet の比較

0
Last updated at Posted at 2025-11-10

記事の目的

最近の大規模音声・テキストモデル(例:Whisper, Moshi, NeMo など)では,
学習データを「どの形式で保存・読み込むか」が非常に重要になります.

なかでも特に,

  • WebDataset(.tar形式)
  • Parquet形式

が,デファクト(お作法)化しているので,メモしておこうと思います.

簡単にいうと,どちらも「データの格納形式」ですが,目的や設計思想が異なります.

基本的な位置づけ

項目 WebDataset Parquet
主な用途 機械学習用の大規模データ(特に画像・音声など)をストリーミング的に読み込む 表形式データ(構造化データ)の高効率な格納・処理
フォーマット TARファイルベースのキー・バリュー形式 列指向のバイナリ形式(Arrowベース)
主な使用環境 PyTorch / TensorFlow のデータローダ Spark / Pandas / DuckDB / Arrow などの分析環境
ストリーミング適性 ◎(逐次読み込みが容易) △(全体のメタデータを読む必要あり)

🧱 WebDatasetとは

WebDataset は,画像・音声・テキストなどの「非構造データ」を
.tar ファイルにまとめ,ストリーミング学習を効率化するフォーマットです.
各サンプルは「キー(例: 00001.jpg, 00001.txt)」に対応し,ファイル拡張子で型を判別します.

例:

data/
  shard-000000.tar
  shard-000001.tar

各 tar の中には:

00001.jpg
00001.txt
00002.jpg
00002.txt
...

特徴

  • .tar(シャード)に数千サンプルを格納
  • PyTorch IterableDataset から直接ストリーミング可能
  • S3 / GCS などリモートストレージからも高速に読み込める
  • 巨大データセット(TB級)向けのI/O最適化

使用例

import webdataset as wds

dataset = wds.WebDataset("dataset-{00000..00099}.tar").decode("pil")
for sample in dataset:
    img = sample["jpg"]
    label = sample["cls"]

🧮 Parquetとは

Parquet は,テーブル構造のデータを「列指向・圧縮」形式で保存するための
分析・機械学習向けフォーマットです(Apache Arrow ベース).

特徴

  • 各列を個別に圧縮するため 読み込みが超高速
  • pandas / pyarrow / datasets で直接読み込み可能
  • input_ids, attention_mask, audio_feat, speaker_id などを
    1ファイルでまとめて扱える

使用例

import pandas as pd

df = pd.read_parquet("train-00001-of-00010.parquet")
print(df.columns)
# => ['utt_id', 'input_ids', 'attention_mask', 'audio_feat', 'speaker_id']

🔄 一般的なパイプライン構成

WebDatasetとParquetは,「競合」ではなく「補完関係」にあります.

フェーズ 一般的なフォーマット 主な目的
① 生データ保管 WebDataset (.tar) / 個別ファイル (.wav, .txt) 音声・画像などの非構造データを効率的に格納・配信
② トークナイズ・特徴抽出後 Parquet 構造化データ(トークン列・特徴量・メタ情報)を一括管理
③ 大規模分散学習時(任意) WebDataset (.tar) Parquetから再度tar化し、ストリーミング読み込みを最適化

🧠 Moshi-finetuneの設計

nu-dialogue/moshi-finetune(こちら) の場合は,以下のような流れになっています.

  1. 生データ:音声 (.wav),テキスト (.txt)
  2. トークナイズ後:音声特徴 (audio_feat),テキストトークン (input_ids)
  3. 出力形式train-00001-of-00010.parquet など
  4. 学習:PyArrow / Hugging Face Datasets で Parquet を直接読み込み

→ こちらのMoshiの学習では Parquetのまま学習しています.
CPU前処理をすべて済ませた上で,GPU学習を高速化する設計です.

🚀 一方で,超大規模学習では…

LAION,NeMo,OpenCLIP,Stable Audio などの「数TB規模のデータ」では,
Parquetを中間フォーマットにしたあと,再び WebDataset (tar) に変換して使用しています.

理由

  • 分散環境(S3, GCS, Lustreなど)でストリーミングしやすい
  • 各ノードがシャード単位でアクセスでき,I/Oがボトルネックになりにくい
  • tarを1本ずつ順番に読み出すため,ランダムアクセスより高速

⚖️ 選択基準まとめ

観点 Parquet 向き WebDataset 向き
データ型 トークン列・特徴量・構造化情報 音声・画像などの非構造データ
データ量 数十万〜数百万サンプル 数百万〜数十億サンプル(TB級)
環境 ローカル / HPC クラスタ クラウド / 分散環境(S3, GCS)
処理目的 前処理・分析・再利用 本番学習・ストリーミング
フォーカス 再現性・効率性 スループット・スケーラビリティ

✅ 結論

🎯 生データ(音声・テキスト):WebDataset で保管
🧩 トークナイズ後の構造化データ:Parquet で管理
🚀 大規模分散学習:Parquet をもとに再度 WebDataset 化して学習

つまり,

  • Moshi-finetune のような中規模研究 → Parquet のままでOK
  • 超大規模ストリーミング学習(LAION系) → WebDataset 化が有利

この2段階構成を理解しておくと,
自分のプロジェクトに最適なデータ形式を選びやすくなるかと思いました.

📘 参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?