Datasets documentation
Datasets ๐ค Arrow
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