Datasets documentation
Armazenamento em nuvem
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 armazenamento | Implementação de sistema de arquivos |
|---|---|
| Amazon S3 | s3fs |
| Google Cloud Storage | gcsfs |
| Azure Blob/DataLake | adlfs |
| Oracle Cloud Storage | ocifs |
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")