Datasets documentation

Bộ dữ liệu 🤝 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

Bộ dữ liệu 🤝 Arrow

Arrow là gì?

Arrow cho phép xử lý và di chuyển một lượng lớn dữ liệu một cách nhanh chóng. Đây là một định dạng dữ liệu cụ thể lưu trữ dữ liệu theo bố trí bộ nhớ dạng cột. Điều này mang lại một số lợi thế đáng kể:

  • Định dạng chuẩn của Arrow cho phép đọc không sao chép, loại bỏ gần như toàn bộ chi phí phân tích chuỗi.
  • Arrow không phụ thuộc vào ngôn ngữ nên hỗ trợ nhiều ngôn ngữ lập trình khác nhau.
  • Arrow có định hướng theo cột nên nhanh hơn khi truy vấn và xử lý các lát cắt hoặc cột dữ liệu.
  • Arrow cho phép chuyển giao dữ liệu không cần sao chép sang các công cụ học máy tiêu chuẩn như NumPy, Pandas, PyTorch và TensorFlow.
  • Arrow hỗ trợ nhiều kiểu cột, có thể lồng nhau.

Ánh xạ bộ nhớ

🤗 Datasets sử dụng Arrow cho hệ thống lưu trữ cục bộ. Điều này cho phép các bộ dữ liệu được hỗ trợ bởi bộ nhớ đệm trên đĩa, được ánh xạ vào bộ nhớ để tra cứu nhanh. Kiến trúc này cho phép sử dụng các bộ dữ liệu lớn trên các máy có bộ nhớ thiết bị tương đối nhỏ.

Ví dụ, việc tải bộ dữ liệu Wikipedia tiếng Anh đầy đủ chỉ cần vài MB RAM:

>>> 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

Điều này là có thể vì dữ liệu Arrow thực chất được ánh xạ bộ nhớ (memory-mapped) từ ổ đĩa, chứ không được nạp vào bộ nhớ. Ánh xạ bộ nhớ cho phép truy cập dữ liệu trên ổ đĩa và tận dụng khả năng bộ nhớ ảo để tra cứu nhanh.

Hiệu năng

Việc lặp qua một tập dữ liệu ánh xạ bộ nhớ bằng Arrow rất nhanh. Lặp qua Wikipedia trên một chiếc laptop cho tốc độ 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