Hub documentation

WebDataset

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

WebDataset

WebDataset๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์„ ์œ„ํ•œ I/O ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž‘์„ฑํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ˆœ์ฐจ์  I/O ๋ฐ ์ƒค๋”ฉ ๊ธฐ๋Šฅ ๋•๋ถ„์— ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์„ DataLoader๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋ฐ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

WebDataset ํ˜•์‹

WebDataset ํŒŒ์ผ์€ ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” TAR ์•„์นด์ด๋ธŒ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ๊ฐ€์ง„ ์—ฐ์†๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ๋™์ผํ•œ ์˜ˆ์‹œ(์˜ˆ: ์ด๋ฏธ์ง€/์˜ค๋””์˜ค ํŒŒ์ผ๊ณผ ํ•ด๋‹น ๋ผ๋ฒจ ๋˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค:

๋ ˆ์ด๋ธ”๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” .json ํŒŒ์ผ, .txt (์บก์…˜, ์„ค๋ช…์šฉ), ๋˜๋Š” .cls (ํด๋ž˜์Šค ์ธ๋ฑ์Šค์šฉ)์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ WebDataset๋Š” shard๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ shard๋Š” TAR ์•„์นด์ด๋ธŒ์ž…๋‹ˆ๋‹ค. ๊ฐ shard์˜ ํฌ๊ธฐ๋Š” ๋ณดํ†ต ์•ฝ 1GB์ด์ง€๋งŒ, ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์€ ์ˆ˜ ํ…Œ๋ผ๋ฐ”์ดํŠธ์— ๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ง€์›

WebDataset๋Š” ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค ๋ฐ/๋˜๋Š” ๋น„๋””์˜ค ๋ฐ์ดํ„ฐ์…‹๊ณผ ๊ฐ™์€ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ๋ฐ์ดํ„ฐ์…‹์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ฏธ๋””์–ด ํŒŒ์ผ์€ ํฌ๊ธฐ๊ฐ€ ์ƒ๋‹นํžˆ ํฐ ๊ฒฝํ–ฅ์ด ์žˆ์–ด, WebDataset์˜ ์ˆœ์ฐจ์  I/O๋Š” ๋Œ€์šฉ๋Ÿ‰ ์ฝ๊ธฐ ๋ฐ ๋ฒ„ํผ๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ์ตœ์ ์˜ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์˜ ๋น„ํฌ๊ด„์  ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • image: jpeg, png, tiff
  • ์˜ค๋””์˜ค: mp3, m4a, wav, flac
  • video: mp4, mov, avi
  • other: npy, npz

์ „์ฒด ๋ชฉ๋ก์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€ํ•˜๋ฉฐ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, webdataset ํŒจํ‚ค์ง€๊ฐ€ ์ง€์›ํ•˜๋Š” ํ˜•์‹์€ ์†Œ์Šค ์ฝ”๋“œ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆฌ๋ฐ

์—ฐ์†๋œ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— TAR ์•„์นด์ด๋ธŒ์˜ ์ŠคํŠธ๋ฆฌ๋ฐ์€ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํ•˜๋‚˜์”ฉ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ์ˆ˜ ๋ฐฐ์—์„œ ์ˆ˜ ๋ฐฐ ์ด์ƒ ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WebDataset ์ŠคํŠธ๋ฆฌ๋ฐ์€ ๋””์Šคํฌ์™€ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์ฝ์„ ๋•Œ ๋ชจ๋‘ ๊ณ ์† ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ DataLoader์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ธ ํ˜•์‹์ž…๋‹ˆ๋‹ค:

์˜ˆ๋ฅผ ๋“ค์–ด, Hugging Face์—์„œ timm/imagenet-12k-wds ๋ฐ์ดํ„ฐ์…‹์„ ์ง์ ‘ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

๋จผ์ € Hugging Face ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

hf auth login

๊ทธ ๋‹ค์Œ WebDataset๋กœ ๋ฐ์ดํ„ฐ์…‹์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

>>> import webdataset as wds
>>> from huggingface_hub import get_token
>>> from torch.utils.data import DataLoader

>>> hf_token = get_token()
>>> url = "https://huggingface.co/datasets/timm/imagenet-12k-wds/resolve/main/imagenet12k-train-{{0000..1023}}.tar"
>>> url = f"pipe:curl -s -L {url} -H 'Authorization:Bearer {hf_token}'"
>>> dataset = wds.WebDataset(url).decode()
>>> dataloader = DataLoader(dataset, batch_size=64, num_workers=4)

์…”ํ”Œ

์ผ๋ฐ˜์ ์œผ๋กœ WebDataset ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ์…‹์€ ์ด๋ฏธ ์…”ํ”Œ๋˜์–ด ์žˆ์œผ๋ฉฐ DataLoader์— ๋ฐ”๋กœ ๊ณต๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ WebDataset์˜ ๊ทผ์‚ฌ ์…”ํ”Œ๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์…”ํ”Œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

shards ๋ชฉ๋ก์„ ์„ž๋Š” ๊ฒƒ ์™ธ์—๋„, WebDataset๋Š” ์†๋„ ์ €ํ•˜ ์—†์ด ๋ฐ์ดํ„ฐ์…‹์„ ์„ž๊ธฐ ์œ„ํ•ด ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

sharded ํŒŒ์ผ ๋ชฉ๋ก์„ ์„ž๊ณ (shuffle) ์…”ํ”Œ ๋ฒ„ํผ์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋งํ•˜๋ ค๋ฉด:

>>> buffer_size = 1000
>>> dataset = (
...     wds.WebDataset(url, shardshuffle=True)
...     .shuffle(buffer_size)
...     .decode()
... )
Update on GitHub