Datasets documentation

Datasets ๐Ÿค Arrow

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ๋””์Šคํฌ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘(memory-mapped)๋˜์–ด ์žˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘์€ ๋””์Šคํฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ๋น ๋ฅธ ์กฐํšŒ๋ฅผ ์œ„ํ•ด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ

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
Update on GitHub