Prepare os dados para o ajuste fino dos modelos Hugging Face

Este artigo demonstra como preparar seus dados para ajustar modelos de linguagem grande de código aberto com Hugging Face Transformers e Hugging Face Datasets.

Requisitos

  • Databricks Runtime for Machine Learning 13.0 ou acima. Os exemplos neste guia usam dataset Hugging Face que está incluído no Databricks Runtime 13.0 ML e acima.

  • Um workspace com Unity Catalog ativado. O senhor também precisa ter as seguintes permissões para gravar dados em um volume do Unity Catalog:

    • O privilégio WRITE VOLUME no volume para o qual o senhor deseja fazer upload de arquivos.

    • O privilégio USE SCHEMA no esquema pai.

    • O privilégio USE CATALOG no catálogo pai.

  • Significativo compute recurso para downloads de grandes conjuntos de dados. O grande dataset usado no exemplo de Notebook fornecido leva mais de um dia para download.

Carregar dados do Hugging Face

dataset Hugging Face é uma biblioteca Hugging Face para acessar e compartilhar dataset para tarefas de áudio, visão de computador e processamento de linguagem natural (NLP). Com Hugging Face datasets , você pode carregar dados de vários lugares. A biblioteca datasets tem utilidades para ler dataset do Hugging Face Hub. Existem muitos dataset que podem ser baixados e lidos no Hugging Face Hub usando a função load_dataset. Saiba mais sobre como carregar dados com conjuntos de dados Hugging Face na documentação Hugging Face .

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

Alguns dataset no Hugging Face Hub fornecem os tamanhos dos dados que são downloads e gerados quando load_dataset é chamado. Você pode usar load_dataset_builder para saber os tamanhos antes de downloads o dataset 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 dataset downloads do Notebookpráticas recomendadas do Hugging Face para obter orientações sobre como downloads e preparar dataset no Databricks para diferentes tamanhos de dados.

Formate seus dados de treinamento e avaliação

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

comece formatando seus dados de treinamento em uma tabela que atenda à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 realizar 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, Hugging Face transformers fornece AutoModelForSequenceClassification como um carregador de modelo para classificação de texto, que espera IDs inteiros como rótulos de categoria. No entanto, se você tiver um DataFrame com rótulos strings , também deverá especificar mapeamentos entre os rótulos inteiros e os rótulos strings ao criar o modelo. Você pode coletar esta informação da seguinte forma:

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 os IDs inteiros como uma coluna de rótulo com um 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 Hugging Face de um Spark DataFrame

Hugging Face datasets suporta carregamento de Spark DataFrames 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 DataFrames train_df e test_df, poderá criar dataset para cada um com o seguinte código:

import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/Volumes/main/default/my-volume/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/Volumes/main/default/my-volume/test")

Dataset.from_spark Armazena em cache o dataset. Este exemplo descreve o treinamento do modelo no motorista, portanto, os dados devem ser disponibilizados para ele. Além disso, como a materialização do cache é paralelizada usando Spark, o cache_dir fornecido deve ser acessível a todos os trabalhadores. Para atender a essas restrições, cache_dir deve ser um caminho de volume do Unity Catalog.

O acesso ao volume pode ser gerenciado usando Unity Catalog.

Se o site dataset for grande, gravá-lo em Unity Catalog pode levar muito tempo. Para acelerar o processo, o senhor pode usar o parâmetro working_dir para que Hugging Face datasets grave o dataset em um local temporário no disco e, em seguida, mova-o para Unity Catalog. Por exemplo, para usar o SSD como um local temporário:

import datasets
dataset = datasets.Dataset.from_spark(
  train_df,
  cache_dir="/Volumes/main/default/my-volume/train",
  working_dir="/local_disk0/tmp/train",
)

Cache para conjuntos de dados

O cache é uma das maneiras pelas quais datasets melhora a eficiência. Ele armazena todos downloads e dataset processados para que, quando o usuário precisar usar o dataset intermediário, eles sejam recarregados diretamente do cache.

O diretório de cache default do conjunto de dados é ~/.cache/huggingface/datasets. Quando um clustering é encerrado, os dados do cache também são perdidos. Para manter o arquivo de cache no encerramento do clustering, o site Databricks recomenda alterar o local do cache para um caminho de volume Unity Catalog, definindo a variável de ambiente HF_DATASETS_CACHE:

import os
os.environ["HF_DATASETS_CACHE"] = "/Volumes/main/default/my-volume/"

Ajustar um modelo

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

Notebook: downloads conjuntos de dados do Hugging Face

Este Notebook de exemplo fornece práticas recomendadas de uso da função Hugging Face load_dataset para downloads e preparar dataset no Databricks para diferentes tamanhos de dados.

downloads conjuntos de dados do Notebook de práticas recomendadas do Hugging Face

Abra o bloco de anotações em outra guia