Datasets documentation
Almacenamiento en la nube
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 almacenamiento | Implementación del sistema de archivos |
|---|---|
| Amazon S3 | s3fs |
| Google Cloud Storage | gcsfs |
| Azure Blob/DataLake | adlfs |
| Oracle Cloud Storage | ocifs |
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")