Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как подготовить данные для точной настройки крупных языковых моделей с открытым исходным кодом с помощью Hugging Face Transformers и Hugging Face Datasets.
Требования
- Databricks Runtime для машинного обучения 13.0 или более поздней версии. В примерах этого руководства используются наборы данных Hugging Face, включенные в Databricks Runtime 13.0 ML и более поздние версии.
- Рабочая область с включенным каталогом Unity. Для записи данных в том каталога Unity также необходимо иметь следующие разрешения:
- Привилегия WRITE VOLUME на томе, в который требуется отправить файлы.
- Привилегия USE SCHEMA на родительской схеме.
- Привилегия USE CATALOG на родительском каталоге.
- Значительные вычислительные ресурсы для скачивания больших наборов данных. Для скачивания большого набора данных, используемого в примере записной книжки, требуется более одного дня.
Загрузка данных из Hugging Face
Библиотека Hugging Face Datasets — это библиотека Hugging Face для доступа и обмена наборами данных для задач обработки аудио, компьютерного зрения и естественного языка (NLP). С помощью обнимания лица datasets можно загружать данные из разных мест. Библиотека datasets имеет утилиты для чтения наборов данных из центра Hugging Face Hub. Существует множество наборов данных, которые можно скачать и прочитать из Hugging Face Hub с помощью load_dataset функции. Узнайте больше о загрузке данных с помощью наборов данных Hugging Face в документации Hugging Face.
from datasets import load_dataset
dataset = load_dataset("imdb")
Некоторые наборы данных в Hugging Face Hub предоставляют информацию о размерах данных, которые скачиваются и создаются при вызове load_dataset. Вы можете узнать размеры набора данных load_dataset_builder перед скачиванием его с помощью 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")
Дополнительные сведения о том, как скачать и подготовить наборы данных в Azure Databricks для различных размеров данных, см. в «Записной книжке лучших практик Hugging Face».
Форматирование данных обучения и оценки
Чтобы использовать собственные данные для точной настройки модели, необходимо сначала отформатировать обучающие и оценочные данные в Spark DataFrame. Затем загрузите DataFrames с помощью библиотеки Hugging Face datasets.
Начните с форматирования обучающих данных в таблицу, соответствующую требованиям тренера. Для классификации текста это таблица с двумя столбцами: текстовым столбцом и столбцом меток.
Для точной настройки необходимо предоставить модель. Библиотека Hugging Face Трансформер AutoClasses упрощает загрузку моделей и параметров конфигурации, включая широкий спектр Auto Models для естественной обработки языка.
Например, Hugging Face transformers предоставляет AutoModelForSequenceClassification в качестве загрузчика модели для классификации текста, которая ожидает целые числа в качестве идентификаторов категорий. Однако если у вас есть кадр данных со строковыми метками, необходимо также указать сопоставления между целочисленными метками и строковыми метками при создании модели. Эти сведения можно собирать следующим образом:
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)}
Затем создайте целые идентификаторы в виде столбца меток с UDF 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)
Загрузка набора данных Hugging Face из DataFrame Spark
Hugging Face datasets поддерживает загрузку из Spark DataFrames с помощью datasets.Dataset.from_spark. Дополнительные сведения о методе from_spark() см. в документации Hugging Face.
Например, если у вас есть DataFrames train_df и test_df, вы можете создать наборы данных для каждого из них с помощью следующего кода:
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 кэширует набор данных. В этом примере описывается обучение модели на драйвере, поэтому данные должны быть доступны для него. Кроме того, так как материализация кэша параллелизирована с помощью Spark, предоставленная cache_dir должна быть доступна всем рабочим. Для удовлетворения этих ограничений cache_dir должен быть пути тома каталога Unity.
Доступ к объему управляется в каталоге Unity.
Если набор данных большой, запись в каталог Unity может занять много времени. Чтобы ускорить процесс, вы можете использовать параметр working_dir, чтобы Hugging Face datasets записал набор данных во временное расположение на диске, затем переместить его в Unity Catalog. Например, чтобы использовать SSD в качестве временного расположения:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/Volumes/main/default/my-volume/train",
working_dir="/local_disk0/tmp/train",
)
Кэширование для наборов данных
Кэш является одним из способов datasets повышения эффективности. Он сохраняет все скачанные и обработанные наборы данных, поэтому, когда пользователю нужно использовать промежуточные наборы данных, они перезагрузятся непосредственно из кэша.
Каталог кэша по умолчанию для наборов данных ~/.cache/huggingface/datasets. Когда кластер завершается, данные кэша также теряются. Чтобы сохранить файл кэша при завершении кластера, Databricks рекомендует изменить расположение кэша на путь тома каталога Unity, задав переменную среды HF_DATASETS_CACHE:
import os
os.environ["HF_DATASETS_CACHE"] = "/Volumes/main/default/my-volume/"
Тонкая настройка модели
Когда данные будут готовы, их можно использовать для точной настройки модели Hugging Face.
Записная книжка: скачивание наборов данных из hugging Face
В этом примере записная книжка предоставляет рекомендуемые рекомендации по использованию функции Hugging Face load_dataset для скачивания и подготовки наборов данных в Azure Databricks для различных размеров данных.