Preparar los datos para ajustar los modelos de Hugging Face
Este artículo muestra cómo preparar los datos para ajustar los grandes modelos lingüísticos de código abierto con Hugging Face Transformers y Hugging Face Datasets.
Requisitos
- Databricks Runtime para Machine Learning 13.0 o superior. En los ejemplos de esta guía se usan conjuntos de datos de Hugging Face que se incluyen en Databricks Runtime 13.0 ML y versiones posteriores.
Carga de datos de Hugging Face
Hugging Face Datasets es una biblioteca de Hugging Face para acceder y compartir conjuntos de datos para tareas de audio, visión por computadora y procesamiento del lenguaje natural (NLP). Con Hugging Face datasets
puede cargar datos desde varios lugares. La datasets
biblioteca tiene utilidades para leer conjuntos de datos de Hugging Face Hub. Hay muchos conjuntos de datos descargables y legibles desde Hugging Face Hub mediante la load_dataset
función . Obtenga más información sobre cómo cargar datos con Hugging Face Datasets en la documentación de Hugging Face.
from datasets import load_dataset
dataset = load_dataset("imdb")
Algunos conjuntos de datos de Hugging Face Hub proporcionan los tamaños de los datos que se descargan y generan cuando load_dataset
se llama. Puede usar load_dataset_builder
para conocer los tamaños antes de descargar el conjunto de datos con 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")
Vea la Descarga de conjuntos de datos del cuaderno de procedimientos recomendados de Hugging Face para obtener instrucciones sobre cómo descargar y preparar conjuntos de datos en Azure Databricks para diferentes tamaños de datos. Databricks para distintos tamaños de datos.
Dar formato a los datos de entrenamiento y evaluación
Para usar sus propios datos para ajustar el modelo, primero debe dar formato a los datos de entrenamiento y evaluación en DataFrames de Spark. A continuación, cargue los DataFrames mediante la biblioteca Hugging Face datasets
.
Empiece por dar formato a los datos de entrenamiento en una tabla que cumpla las expectativas del instructor. Para la clasificación de texto, se trata de una tabla con dos columnas: una columna de texto y una columna de etiquetas.
Para realizar un ajuste preciso, debe proporcionar un modelo. La biblioteca Hugging Face Transformer AutoClasses facilita la carga de modelos y configuraciones, incluida una amplia gama deAuto Models
para el procesamiento de lenguaje natural.
Por ejemplo, Hugging Face transformers
proporciona AutoModelForSequenceClassification
como cargador de modelos para la clasificación de texto, que espera identificadores enteros como etiquetas de categoría. Sin embargo, si tiene un DataFrame con etiquetas de cadena, también debe especificar asignaciones entre las etiquetas de entero y las etiquetas de cadena al crear el modelo. Puede recopilar esta información de la siguiente manera:
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)}
A continuación, cree los identificadores enteros como una columna de etiqueta con una UDF de 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)
Carga de un conjunto de datos de Hugging Face desde un Dataframe de Spark
Hugging Face datasets
admite la carga desde DataFrames de Spark mediante datasets.Dataset.from_spark
. Vea la documentación de Hugging Face para obtener más información sobre el método from_spark().
Por ejemplo, si tiene train_df
y test_df
DataFrames, puede crear conjuntos de datos para cada uno con el código siguiente:
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
almacena en caché el conjunto de datos. En este ejemplo se describe el entrenamiento del modelo en el controlador, por lo que los datos deben estar disponibles para él. Además, dado que la materialización de caché se paraleliza mediante Spark, el proporcionado cache_dir
debe ser accesible para todos los trabajos. Para satisfacer estas restricciones, cache_dir
debe ser un sistema de archivos Databricks (DBFS) de volumen raíz opunto de montaje.
El volumen raíz de DBFS es accesible para todos los usuarios del área de trabajo y solo se debe usar para los datos sin restricciones de acceso. Si los datos requieren controles de acceso, use un punto de montaje en lugar de una raíz de DBFS.
Si el conjunto de datos es grande, escribirlo en DBFS puede tardar mucho tiempo. Para acelerar el proceso, puede usar el working_dir
parámetro para que Hugging Face datasets
escriba el conjunto de datos en una ubicación temporal en el disco y, a continuación, muévalo a DBFS. Por ejemplo, para usar el SSD como una ubicación temporal:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/dbfs/cache/train",
working_dir="/local_disk0/tmp/train",
)
Almacenamiento en caché para conjuntos de datos
La memoria caché es una de las maneras datasets
en que mejora la eficiencia. Almacena todos los conjuntos de datos descargados y procesados, por lo que cuando el usuario necesita usar los conjuntos de datos intermedios, se vuelven a cargar directamente desde la memoria caché.
El directorio de caché predeterminado de los conjuntos de datos es ~/.cache/huggingface/datasets
. Cuando se finaliza un clúster, también se pierden los datos de caché. Para conservar el archivo de caché en la terminación del clúster, Databricks recomienda cambiar la ubicación de caché a DBFS estableciendo la variable de entornoHF_DATASETS_CACHE
:
import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"
Ajuste con precisión de un modelo
Cuando los datos estén listos, puede usarlos para ajustar un modelo de Hugging Face.
Cuaderno: Descarga de conjuntos de datos de Hugging Face
En este cuaderno de ejemplo se proporcionan procedimientos recomendados para usar la función Hugging Face load_dataset
para descargar y preparar conjuntos de datos en Azure Databricks para distintos tamaños de datos.