資料集文件
雲端儲存
並獲得增強的文件體驗
開始使用
雲端儲存
Hugging Face 資料集
Hugging Face Dataset Hub 擁有不斷增長的資料集收藏,涵蓋了各種領域和任務。
這不僅僅是雲端儲存:Dataset Hub 是一個提供資料版本控制(歸功於 git)以及資料集瀏覽器 (Dataset Viewer) 來探索資料的平台,使其成為儲存 AI 準備就緒之資料集的絕佳場所。
本指南介紹如何使用 fsspec 的檔案系統實作從其他雲端儲存匯入資料。
Hugging Face 儲存貯體 (Storage Buckets)
儲存貯體 (Storage Buckets) 是 Hugging Face Hub 上的一種儲存庫類型,提供由 Xet 儲存後端驅動的類 S3 物件儲存。與基於 Git 的資料集儲存庫不同,貯體不進行版本控制且是可變的,專為需要簡單、快速儲存的使用情境而設計,例如日誌、中間產物或任何不需要版本控制的大型檔案集合。
從雲端儲存匯入資料
大多數雲端儲存提供者都有 fsspec 檔案系統實作,這對於使用相同的程式碼從任何雲端提供者匯入資料非常有用。這對於在 Hugging Face 上發佈資料集特別有用。
請參閱下表以了解一些支援的雲端儲存提供者範例
| 儲存提供者 | 檔案系統實作 |
|---|---|
| Amazon S3 | s3fs |
| Google Cloud Storage | gcsfs |
| Azure Blob/DataLake | adlfs |
| Oracle Cloud Storage | ocifs |
本指南將向您展示如何從任何雲端儲存匯入資料檔案,並將資料集儲存到 Hugging Face 上。
假設我們想要從雲端儲存中的 Parquet 檔案發佈一個資料集到 Hugging Face。
首先,實例化您的雲端儲存檔案系統並列出您想要匯入的檔案
>>> 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", ...]發佈資料集
然後,您可以建立一個 Hugging Face 資料集並匯入資料檔案,例如使用
>>> 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",
... )如果您正在尋找更多上傳選項,請查看 huggingface_hub 關於檔案上傳的說明文件 這裡。
最後,您現在可以使用 🤗 Datasets 載入該資料集
>>> from datasets import load_dataset
>>> ds = load_dataset("username/my-dataset")將原始資料匯入儲存貯體
或者,如果您不想發佈資料集,而只是想將原始資料檔案匯入到 Hugging Face 儲存貯體,您可以使用
>>> 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)如果您正在尋找更多上傳選項,請查看 huggingface_hub 關於儲存貯體的說明文件 這裡。
稍後您可以使用 🤗 Datasets 載入原始檔案、進行轉換,並以上傳 AI 準備就緒的最終資料集,例如以串流 (streaming) 的方式
如果檔案格式受到 🤗 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")否則,您可以使用自己的檔案解析函式
>>> 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")