Datasets documentation

Armazenamento em nuvem

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

Armazenamento em nuvem

Hugging Face Datasets

O Hugging Face Dataset Hub abriga uma coleção crescente de conjuntos de dados que abrangem uma variedade de domínios e tarefas.

É mais do que um armazenamento em nuvem: o Dataset Hub é uma plataforma que oferece versionamento de dados graças ao git, além de um Dataset Viewer para explorar os dados, tornando-o um ótimo lugar para armazenar datasets prontos para IA.

Este guia mostra como importar dados de outros armazenamentos em nuvem usando as implementações de sistemas de arquivos do fsspec.

Buckets de Armazenamento do Hugging Face

Storage Buckets são um tipo de repositório no Hugging Face Hub que oferece armazenamento de objetos semelhante ao S3, impulsionado pelo backend de armazenamento Xet. Diferentemente dos repositórios de dados baseados em Git, os buckets não são versionados e são mutáveis, projetados para casos de uso em que você precisa de armazenamento simples e rápido, como logs, artefatos intermediários ou qualquer grande coleção de arquivos que não necessite de controle de versão.

Importar dados de um armazenamento em nuvem

A maioria dos provedores de armazenamento em nuvem possui uma implementação de FileSystem do fsspec, o que é útil para importar dados de qualquer provedor de nuvem com o mesmo código. Isso é especialmente útil para publicar conjuntos de dados no Hugging Face.

Confira a tabela a seguir para alguns exemplos de provedores de armazenamento em nuvem suportados:

Provedor de armazenamentoImplementação de sistema de arquivos
Amazon S3s3fs
Google Cloud Storagegcsfs
Azure Blob/DataLakeadlfs
Oracle Cloud Storageocifs

Este guia mostrará como importar arquivos de dados de qualquer armazenamento em nuvem e salvar um conjunto de dados no Hugging Face.

Vamos supor que queremos publicar um conjunto de dados no Hugging Face a partir de arquivos Parquet de um armazenamento em nuvem.

Primeiro, instancie o sistema de arquivos do seu armazenamento em nuvem e liste os arquivos que deseja 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 um Dataset

Em seguida, você pode criar um dataset no Hugging Face e importar os arquivos de dados, usando por exemplo:

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

Confira a documentação do huggingface_hub sobre upload de arquivos aqui, caso esteja procurando por mais opções de upload.

Por fim, você já pode carregar o conjunto de dados usando 🤗 Datasets:

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

Importar dados brutos para Storage Buckets

Alternativamente, se você não deseja publicar um conjunto de dados, mas apenas importar arquivos de dados brutos em um Storage Bucket do Hugging Face, você pode 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)

Confira a documentação do huggingface_hub sobre Storage Buckets aqui se você estiver procurando por mais opções de upload.

Depois, você pode carregar os arquivos brutos usando 🤗 Datasets, transformá-los e enviar os datasets finais prontos para IA, por exemplo, de forma em streaming:

Se os arquivos estiverem em um formato suportado pelo 🤗 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")

Caso contrário, você pode usar sua própria função de análise de arquivo:

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