Datasets documentation
Lưu trữ đám mây
Lưu trữ đám mây
Hugging Face Datasets
Dataset Hub của Hugging Face là nơi lưu trữ một bộ sưu tập ngày càng lớn các bộ dữ liệu trải rộng trên nhiều lĩnh vực và tác vụ khác nhau.
Nó không chỉ là một dịch vụ lưu trữ đám mây: Dataset Hub là một nền tảng cung cấp khả năng quản lý phiên bản dữ liệu nhờ git, cùng với Dataset Viewer để khám phá dữ liệu, biến nơi đây thành một địa điểm lý tưởng để lưu trữ các bộ dữ liệu sẵn sàng cho AI.
Hướng dẫn này cho thấy cách nhập dữ liệu từ các kho lưu trữ đám mây khác bằng cách sử dụng các triển khai hệ thống tệp từ fsspec.
Hộp lưu trữ Hugging Face
Storage Buckets là một loại kho trên Hugging Face Hub, cung cấp lưu trữ đối tượng tương tự S3, được vận hành bởi backend lưu trữ Xet. Khác với các kho dữ liệu dựa trên Git, bucket không có phiên bản và có thể thay đổi, được thiết kế cho các trường hợp sử dụng cần lưu trữ đơn giản và nhanh chóng, chẳng hạn như nhật ký, các sản phẩm trung gian, hoặc bất kỳ bộ sưu tập tệp lớn nào không cần kiểm soát phiên bản.
Nhập dữ liệu từ lưu trữ đám mây
Hầu hết các nhà cung cấp lưu trữ đám mây đều có một triển khai FileSystem của fsspec, rất hữu ích để nhập dữ liệu từ bất kỳ nhà cung cấp đám mây nào bằng cùng một mã.
Điều này đặc biệt hữu ích để xuất bản các bộ dữ liệu trên Hugging Face.
Hãy xem bảng dưới đây để có một số ví dụ về các nhà cung cấp lưu trữ đám mây được hỗ trợ:
| Nhà cung cấp lưu trữ | Thực hiện hệ thống tệp |
|---|---|
| Amazon S3 | s3fs |
| Google Cloud Storage | gcsfs |
| Azure Blob/DataLake | adlfs |
| Oracle Cloud Storage | ocifs |
Hướng dẫn này sẽ cho bạn thấy cách nhập các tệp dữ liệu từ bất kỳ dịch vụ lưu trữ đám mây nào và lưu một tập dữ liệu trên Hugging Face.
Giả sử chúng ta muốn phát hành một bộ dữ liệu trên Hugging Face từ các tệp Parquet trong kho lưu trữ đám mây.
Đầu tiên, khởi tạo hệ thống tệp lưu trữ đám mây của bạn và liệt kê các tệp bạn muốn nhập:
>>> import fsspec
>>> fs = fsspec.filesystem("...") # s3 / gcs / abfs / adl / oci / ...
>>> data_dir = "path/to/my/data/"
>>> pattern = "*.parquet"
>>> data_files = fs.glob(data_dir + pattern)
["path/to/my/data/0001.parquet", "path/to/my/data/0001.parquet", ...]Xuất bản một Dataset
Sau đó, bạn có thể tạo một dataset trên Hugging Face và nhập các tệp dữ liệu, ví dụ bằng cách sử dụng:
>>> from huggingface_hub import create_repo, upload_folder
>>> from tqdm.auto import tqdm
>>> destination_dataset = "username/my-dataset"
>>> create_repo(destination_dataset, repo_type="dataset")
>>> batch_size = 100
>>> for data_files in batched(tqdm(fs.glob(data_dir + pattern)), batch_size):
... with TemporaryDirectory() as tmp_dir:
... tmp_files = [os.path.join(tmp_dir, x[len(data_dir):]) for x in data_files]
... fs.download(data_files, tmp_files)
... upload_folder(
... repo_id=destination_dataset,
... folder_path=tmp_dir,
... repo_type="dataset",
... )Xem tài liệu huggingface_hub về việc tải tệp lên tại đây nếu bạn đang tìm kiếm các tùy chọn tải lên khác.
Cuối cùng, bạn có thể tải bộ dữ liệu bằng 🤗 Datasets:
>>> from datasets import load_dataset
>>> ds = load_dataset("username/my-dataset")Nhập dữ liệu thô vào Storage Buckets
Hoặc nếu bạn không muốn công bố một bộ dữ liệu mà chỉ đơn giản là nhập các tệp dữ liệu thô vào Storage Bucket của Hugging Face, bạn có thể sử dụng:
>>> from huggingface_hub import create_bucket, sync_bucket
>>> from tqdm.auto import tqdm
>>> from itertools import batched
>>> from tempfile import TemporaryDirectory
>>> import os
>>> create_bucket("username/my-bucket")
>>> bucket_files_location = "hf://buckets/username/my-bucket/path/to/raw/files"
>>> batch_size = 100
>>> for data_files in batched(tqdm(fs.glob(data_dir + pattern)), batch_size):
... with TemporaryDirectory() as tmp_dir:
... tmp_files = [os.path.join(tmp_dir, x[len(data_dir):]) for x in data_files]
... fs.download(data_files, tmp_files)
... sync_bucket(tmp_dir, bucket_files_location)Xem tài liệu huggingface_hub về Storage Buckets tại đây nếu bạn đang tìm kiếm thêm các tùy chọn tải lên.
Sau đó, bạn có thể tải các tệp thô bằng 🤗 Datasets, biến đổi chúng và tải lên các bộ dữ liệu AI-ready cuối cùng, ví dụ theo cách streaming:
Nếu các tệp ở định dạng được hỗ trợ bởi 🤗 Datasets:
>>> from datasets import load_dataset
>>> ds = load_dataset(bucket_files_location, streaming=True)
>>> ds = ds.map(...).filter(...)
>>> ds.push_to_hub("username/my-dataset", num_proc=4)
>>> # and later
>>> ds = load_dataset("username/my-dataset")Ngoài ra, bạn có thể sử dụng hàm phân tích tệp của riêng mình:
>>> from datasets import IterableDataset
>>> from huggingface_hub import hffs
>>> data_files = hffs.find(bucket_files_location)
>>> num_shards = 1024 # For parallelism. PS: every shard should fit in RAM
>>> ds = IterableDataset.from_dict({"data_file": data_files}, num_shards=num_shards)
>>> def parse_data_files(data_files):
... ...
... return {"col_1": [...], "col_2": [...]}
>>> ds = ds.map(parse_data_files, batched=True, input_column=["data_file"])
>>> ds.push_to_hub("username/my-dataset", num_proc=4)
>>> # and later
>>> ds = load_dataset("username/my-dataset")