Datasets documentation

Almacenamiento en la nube

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

Almacenamiento en la nube

Hugging Face Datasets

El Dataset Hub de Hugging Face alberga una colección en crecimiento de conjuntos de datos que abarcan una variedad de dominios y tareas.

Es más que un almacenamiento en la nube: el Dataset Hub es una plataforma que ofrece control de versiones de datos gracias a git, así como un visor de datasets para explorar los datos, lo que lo convierte en un excelente lugar para almacenar datasets listos para IA.

Esta guía muestra cómo importar datos de otros almacenes en la nube utilizando las implementaciones de sistemas de archivos de fsspec.

Buckets de almacenamiento de Hugging Face

Los Storage Buckets son un tipo de repositorio en el Hugging Face Hub que ofrece almacenamiento de objetos similar a S3, impulsado por el backend de almacenamiento Xet. A diferencia de los repositorios de datos basados en Git, los buckets no están versionados y son mutables, diseñados para casos de uso en los que se necesita un almacenamiento simple y rápido, como registros, artefactos intermedios o cualquier colección grande de archivos que no requiera control de versiones.

Importar datos desde un almacenamiento en la nube

La mayoría de los proveedores de almacenamiento en la nube tienen una implementación de FileSystem de fsspec, que resulta útil para importar datos de cualquier proveedor de la nube con el mismo código. Esto es especialmente útil para publicar conjuntos de datos en Hugging Face.

Eche un vistazo a la siguiente tabla para ver algunos ejemplos de proveedores de almacenamiento en la nube admitidos:

Proveedor de almacenamientoImplementación del sistema de archivos
Amazon S3s3fs
Google Cloud Storagegcsfs
Azure Blob/DataLakeadlfs
Oracle Cloud Storageocifs

Esta guía te mostrará cómo importar archivos de datos desde cualquier almacenamiento en la nube y guardar un conjunto de datos en Hugging Face.

Supongamos que queremos publicar un conjunto de datos en Hugging Face a partir de archivos Parquet de un almacenamiento en la nube.

Primero, instancie el sistema de archivos de su almacenamiento en la nube y liste los archivos que desea importar:

>>> 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", ...]

Publicar un conjunto de datos

Luego, puedes crear un conjunto de datos en Hugging Face e importar los archivos de datos, usando por ejemplo:

>>> 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",
...         )

Consulta la documentación de huggingface_hub sobre la carga de archivos aquí si buscas más opciones de carga.

Finalmente, ahora puedes cargar el conjunto de datos usando 🤗 Datasets:

>>> from datasets import load_dataset
>>> ds = load_dataset("username/my-dataset")

Importar datos sin procesar en Storage Buckets

Alternativamente, si no desea publicar un conjunto de datos y simplemente desea importar archivos de datos crudos en un Storage Bucket de Hugging Face, puede usar:

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

Consulta la documentación de huggingface_hub sobre Storage Buckets aquí si buscas más opciones de carga.

Después, puedes cargar los archivos en bruto usando 🤗 Datasets, transformarlos y subir los conjuntos de datos finales listos para IA, por ejemplo, de forma de streaming:

Si los archivos están en un formato compatible con 🤗 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")

En caso contrario, puede usar su propia función de análisis de archivos:

>>> 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")
Update on GitHub