Datasets documentation
Bulut depolama
Bulut depolama
Hugging Face Datasets
Hugging Face Veri Seti Hub'ı, çeşitli alanları ve görevleri kapsayan, sürekli büyüyen bir veri seti koleksiyonuna ev sahipliği yapmaktadır.
Sadece bir bulut depolama alanından fazlasıdır: Dataset Hub, git sayesinde veri sürümleme imkânı sunan ve verileri keşfetmek için bir Dataset Viewer içeren bir platformdur; bu da onu AI-uygun veri setlerini depolamak için mükemmel bir yer haline getirir.
Bu kılavuz, fsspec dosya sistemi uygulamalarını kullanarak diğer bulut depolama alanlarından veri içe aktarmanın nasıl yapılacağını gösterir.
Hugging Face Depolama Kovaları
Storage Buckets, Hugging Face Hub'da S3 benzeri nesne depolama sunan bir depo türüdür ve Xet depolama altyapısıyla çalışır. Git tabanlı veri seti depolarından farklı olarak bucket'lar sürüm yönetimi yapılmaz ve değiştirilebilir; sürüm kontrolüne ihtiyaç duymayan günlükler, ara artefaktlar veya büyük dosya koleksiyonları gibi basit ve hızlı depolama gerektiren kullanım senaryoları için tasarlanmıştır.
Bulut depolamadan veri içe aktarma
Çoğu bulut depolama sağlayıcısının fsspec FileSystem uygulaması vardır; bu, aynı kodla herhangi bir bulut sağlayıcısından veri içe aktarmak için kullanışlıdır.
Bu, Hugging Face üzerinde veri setleri yayınlamak için özellikle faydalıdır.
Desteklenen bulut depolama sağlayıcılarının bazı örnekleri için aşağıdaki tabloya göz atın:
| Depolama sağlayıcısı | Dosya sistemi uygulaması |
|---|---|
| Amazon S3 | s3fs |
| Google Cloud Storage | gcsfs |
| Azure Blob/DataLake | adlfs |
| Oracle Cloud Storage | ocifs |
Bu kılavuz, herhangi bir bulut depolama alanından veri dosyalarını içe aktarma ve bir veri setini Hugging Face üzerinde kaydetme yöntemini gösterir.
Parquet dosyalarından bulut depolamasında bir veri setini Hugging Face'te yayınlamak istediğimizi varsayalım.
Öncelikle bulut depolama dosya sisteminizi örnekleyin ve içe aktarmak istediğiniz dosyaları listeleyin:
>>> 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", ...]Bir Veri Seti Yayınla
Ardından Hugging Face üzerinde bir veri seti oluşturabilir ve veri dosyalarını örneğin şu şekilde içe aktarabilirsiniz:
>>> 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",
... )Daha fazla yükleme seçeneği arıyorsanız, dosya yüklemeleri hakkında huggingface_hub dokümantasyonuna buradan göz atabilirsiniz.
Son olarak, artık veri setini 🤗 Datasets kullanarak yükleyebilirsiniz:
>>> from datasets import load_dataset
>>> ds = load_dataset("username/my-dataset")Ham verileri Storage Buckets'a aktarın
Alternatif olarak, bir veri seti yayınlamak yerine ham veri dosyalarını doğrudan bir Hugging Face Storage Bucket'a içe aktarmak istiyorsanız, şunu kullanabilirsiniz:
>>> 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)Daha fazla yükleme seçeneği arıyorsanız, Storage Buckets hakkında huggingface_hub dokümantasyonuna buradan göz atabilirsiniz.
Daha sonra ham dosyaları 🤗 Datasets ile yükleyebilir, dönüştürebilir ve son AI-ready veri setlerini örneğin streaming yöntemiyle yükleyebilirsiniz:
Dosyalar 🤗 Datasets tarafından desteklenen bir biçimdeyse:
>>> 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")Aksi takdirde kendi dosya ayrıştırma işlevinizi kullanabilirsiniz:
>>> 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")