Compartilhar via


Preparar os dados para ajuste fino de modelos do Hugging Face

Este artigo demonstra como você pode preparar seus dados para o ajuste fino de modelos de linguagem grande de código aberto com Hugging Face Transformers e Hugging Face Datasets.

Requisitos

Carregar dados do Hugging Face

Abraçando conjuntos de dados de detecção facial é uma biblioteca de Hugging Face para acessar e compartilhar conjuntos de dados para tarefas de áudio, pesquisa visual computacional e NLP (processamento de linguagem natural). Com o Hugging Face datasets, você pode carregar dados de vários locais. A datasets biblioteca tem utilitários para ler conjuntos de dados do Hub de Hugging Face. Há muitos conjuntos de dados para download e legíveis no Hub de Hugging Face usando a função load_dataset. Saiba mais sobre como carregar dados com conjuntos de dados de detecção facial na documentação do Hugging Face.

from datasets import load_dataset
dataset = load_dataset("imdb")

Alguns conjuntos de dados no Hub de Hugging Face do Azure fornecem os tamanhos dos dados baixados e gerados quando load_dataset são chamados. Você pode usar load_dataset_builder para saber os tamanhos antes de baixar o conjunto de dados com load_dataset.

from datasets import load_dataset_builder
from psutil._common import bytes2human

def print_dataset_size_if_provided(*args, **kwargs):
  dataset_builder = load_dataset_builder(*args, **kwargs)

  if dataset_builder.info.download_size and dataset_builder.info.dataset_size:
    print(f'download_size={bytes2human(dataset_builder.info.download_size)}, dataset_size={bytes2human(dataset_builder.info.dataset_size)}')
  else:
    print('Dataset size is not provided by uploader')

print_dataset_size_if_provided("imdb")

Consulte o notebook Baixar conjuntos de dados do Notebook de práticas recomendadas do Hugging Face para obter diretrizes sobre como baixar e preparar conjuntos de dados no Azure Databricks para diferentes tamanhos de dados.

Formatar seus dados de treinamento e avaliação

Para usar seus próprios dados para ajuste fino de modelo, primeiro você deve formatar seus dados de treinamento e avaliação em DataFrames do Spark. Em seguida, carregue os DataFrames usando a biblioteca do Hugging Face datasets.

Comece formatando seus dados de treinamento em uma tabela atendendo às expectativas do treinador. Para classificação de texto, esta é uma tabela com duas colunas: uma coluna de texto e uma coluna de rótulos.

Para executar o ajuste fino, você precisa fornecer um modelo. A biblioteca Hugging Face Transformer AutoClasses facilita o carregamento de modelos e definições de configuração, incluindo uma ampla variedade de Auto Models para processamento de linguagem natural.

Por exemplo, o Hugging Face transformers fornece AutoModelForSequenceClassification como um carregador de modelo para classificação de texto, que espera IDs de inteiro como os rótulos de categoria. No entanto, se você tiver um DataFrame com rótulos de cadeia de caracteres, também deverá especificar mapeamentos entre os rótulos inteiros e os rótulos de cadeia de caracteres ao criar o modelo. Você pode coletar essas informações da seguinte maneira:

labels = df.select(df.label).groupBy(df.label).count().collect()
id2label = {index: row.label for (index, row) in enumerate(labels)}
label2id = {row.label: index for (index, row) in enumerate(labels)}

Em seguida, crie as IDs de inteiro como uma coluna de rótulo com uma UDF do Pandas:

from pyspark.sql.functions import pandas_udf
import pandas as pd
@pandas_udf('integer')
def replace_labels_with_ids(labels: pd.Series) -> pd.Series:
  return labels.apply(lambda x: label2id[x])

df_id_labels = df.select(replace_labels_with_ids(df.label).alias('label'), df.text)

Carregar um conjunto de dados de Hugging Face de um DataFrame do Spark

O Hugging Face datasets dá suporte ao carregamento de DataFrames do Spark usando datasets.Dataset.from_spark. Consulte a documentação do Hugging Face para saber mais sobre o método from_spark().

Por exemplo, se você tiver train_df e test_df DataFrames, poderá criar conjuntos de dados para cada um com o seguinte código:

import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/dbfs/cache/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/dbfs/cache/test")

Dataset.from_spark armazena em cache o conjunto de dados. Este exemplo descreve o treinamento de modelo no driver, portanto, os dados devem ser disponibilizados para ele. Além disso, como a materialização do cache é paralelizada usando o Spark, o fornecido cache_dir deve estar acessível a todos os trabalhos. Para atender a essas restrições, cache_dir deve ser um volume raiz do DBFS (Sistema de Arquivos do Databricks) ou um ponto de montagem.

O volume raiz do DBFS é acessível a todos os usuários do workspace e só deve ser usado para dados sem restrições de acesso. Se seus dados exigirem controles de acesso, use um ponto de montagem em vez da raiz DBFS.

Se o conjunto de dados for grande, a gravação dele no DBFS poderá levar muito tempo. Para acelerar o processo, você pode usar o working_dir parâmetro para fazer com que o Hugging Face datasets escreva o conjunto de dados em um local temporário no disco e, em seguida, movê-lo para o DBFS. Por exemplo, para usar o SSD como um local temporário:

import datasets
dataset = datasets.Dataset.from_spark(
  train_df,
  cache_dir="/dbfs/cache/train",
  working_dir="/local_disk0/tmp/train",
)

Cache para conjuntos de dados

O cache é uma das maneiras de datasets melhorar a eficiência. Ele armazena todos os conjuntos de dados baixados e processados para que, quando o usuário precisar usar os conjuntos de dados intermediários, eles sejam recarregados diretamente do cache.

O diretório de cache padrão dos conjuntos de dados é ~/.cache/huggingface/datasets. Quando um cluster é encerrado, os dados de cache também são perdidos. Para persistir o arquivo de cache no encerramento do cluster, o Databricks recomenda alterar o local do cache para DBFS definindo a variável de ambiente HF_DATASETS_CACHE:

import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"

Ajuste um modelo

Quando seus dados estiverem prontos, você poderá usá-los para ajustar um modelo de Hugging Face.

Notebook: baixar conjuntos de dados do Hugging Face

Este notebook de exemplo fornece as melhores práticas recomendadas de uso da função Hugging Face load_dataset para baixar e preparar conjuntos de dados no Azure Databricks para diferentes tamanhos de dados.

Baixar conjuntos de dados do notebook De práticas recomendadas do Hugging Face

Obter notebook