Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как осуществить тонкую настройку модели Hugging Face с использованием библиотеки Hugging Face transformers на одном GPU. Она также содержит рекомендации, специфичные для Databricks, по загрузке данных из lakehouse и регистрации моделей в MLflow, что позволяет использовать и управлять вашими моделями в Azure Databricks.
Библиотека Hugging Face transformers предоставляет служебную программу Trainer и классы Auto Model, которые позволяют загружать и настраивать модели Transformers.
Эти средства доступны для следующих задач с простыми изменениями:
- Загрузка моделей для точной настройки.
- Создание конфигурации для утилиты Trainer компании Hugging Face с использованием трансформеров.
- Выполнение обучения на одном графическом процессоре.
См. Что такое трансформеры Hugging Face?
Требования
- Кластер с одним узлом и одной GPU в драйвере.
- Версия Databricks Runtime 13.0 ML и выше с поддержкой GPU.
- В этом примере для точной настройки требуются 🤗 Transformers, 🤗 Datasets и 🤗 Evaluate, включенные в Databricks Runtime 13.0 ML и более поздние версии.
- MLflow 2.3.
- Данные подготовлены и загружены для точной настройки модели с преобразователями.
Токенизация набора данных Hugging Face
Модели Hugging Face Transformers ожидают на вход токенизированные данные, а не текст из скачанных данных. Чтобы обеспечить совместимость с базовой моделью, используйте autoTokenizer , загруженный из базовой модели. Hugging Face datasets позволяет последовательно применять токенизатор к данным для обучения и тестирования.
Например:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(base_model)
def tokenize_function(examples):
return tokenizer(examples["text"], padding=False, truncation=True)
train_test_tokenized = train_test_dataset.map(tokenize_function, batched=True)
Настройка конфигурации обучения
Инструменты настройки обучения Hugging Face могут быть использованы для конфигурации Trainer. Классы тренера требуют, чтобы пользователь предоставил:
- Метрики
- Базовая модель
- Конфигурация обучения
Вы можете настроить оценочные метрики в дополнение к метрике по умолчанию loss, которую вычисляет Trainer. В следующем примере показано добавление accuracy в качестве метрики:
import numpy as np
import evaluate
metric = evaluate.load("accuracy")
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
Используйте классы автоматической модели для NLP, чтобы загрузить соответствующую модель для задачи.
Для классификации текста используйте AutoModelForSequenceClassification для загрузки базовой модели для классификации текста. При создании модели укажите количество классов и сопоставлений меток, созданных во время подготовки набора данных.
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(
base_model,
num_labels=len(label2id),
label2id=label2id,
id2label=id2label
)
Затем создайте конфигурацию обучения. Класс TrainingArguments позволяет указать выходной каталог, стратегию оценки, скорость обучения и другие параметры.
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(output_dir=training_output_dir, evaluation_strategy="epoch")
Использование сортировщика данных осуществляется для пакетирования входных данных в обучающие и оценочные наборы. DataCollatorWithPadding обеспечивает хорошую базовую производительность для классификации текста.
from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer)
Теперь, при помощи всех этих параметров, можно создать Trainer.
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_test_dataset["train"],
eval_dataset=train_test_dataset["test"],
compute_metrics=compute_metrics,
data_collator=data_collator,
)
Обучение и логирование в MLflow
Hugging Face хорошо интегрируется с MLflow и автоматически фиксирует метрики в процессе обучения модели с помощью MLflowCallback. Однако вы должны самостоятельно записать обученную модель.
Обёртывание процесса обучения в запуске MLflow. Это создает конвейер Преобразователей из токенизатора и обученной модели и записывает его на локальный диск. Наконец, запишите модель в MLflow с помощью mlflow.transformers.log_model.
from transformers import pipeline
with mlflow.start_run() as run:
trainer.train()
trainer.save_model(model_output_dir)
pipe = pipeline("text-classification", model=AutoModelForSequenceClassification.from_pretrained(model_output_dir), batch_size=1, tokenizer=tokenizer)
model_info = mlflow.transformers.log_model(
transformers_model=pipe,
artifact_path="classification",
input_example="Hi there!",
)
Если вам не нужно создавать конвейер, можно поместить компоненты, которые используются в обучении, в словарь.
model_info = mlflow.transformers.log_model(
transformers_model={"model": trainer.model, "tokenizer": tokenizer},
task="text-classification",
artifact_path="text_classifier",
input_example=["MLflow is great!", "MLflow on Databricks is awesome!"],
)
Загрузка модели для вывода
Когда ваша модель зарегистрирована и готова, загрузка модели для прогнозирования то же самое, что загрузка предварительно обученной модели в MLflow.
logged_model = "runs:/{run_id}/{model_artifact_path}".format(run_id=run.info.run_id, model_artifact_path=model_artifact_path)
# Load model as a Spark UDF. Override result_type if the model does not return double values.
loaded_model_udf = mlflow.pyfunc.spark_udf(spark, model_uri=logged_model, result_type='string')
test = test.select(test.text, test.label, loaded_model_udf(test.text).alias("prediction"))
display(test)
Дополнительные сведения см. в статье "Развертывание моделей с помощью службы моделей ".
Устранение распространенных ошибок CUDA
В этом разделе описываются распространенные ошибки CUDA и рекомендации по их устранению.
Ошибка OutOfMemoryError: недостаточно памяти для CUDA
При обучении крупных моделей вы можете столкнуться с ошибкой нехватки памяти CUDA.
Пример:
OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 14.76 GiB total capacity; 666.34 MiB already allocated; 17.75 MiB free; 720.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF.
Чтобы устранить эту ошибку, попробуйте выполнить следующие рекомендации.
Уменьшите размер пакета для обучения. Вы можете уменьшить
per_device_train_batch_sizeзначение в TrainingArguments.Используйте тренировку с более низкой точностью. Вы можете задать
fp16=Trueв TrainingArguments.Используйте gradient_accumulation_steps в TrainingArguments , чтобы эффективно увеличить общий размер пакета.
Используйте 8-разрядный оптимизатор Адама.
Очистка памяти GPU перед обучением. Иногда память GPU может быть занята неиспользуемым кодом.
from numba import cuda device = cuda.get_current_device() device.reset()
Ошибки ядра CUDA
При выполнении обучения могут возникнуть ошибки ядра CUDA.
Пример:
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging, consider passing CUDA_LAUNCH_BLOCKING=1.
Устранение неполадок:
Попробуйте запустить код на ЦП, чтобы узнать, является ли ошибка воспроизводимой.
Еще одним вариантом является получение лучшей функции трассировки путем установки
CUDA_LAUNCH_BLOCKING=1:import os os.environ["CUDA_LAUNCH_BLOCKING"] = "1"
Записная книжка: точно настроенная классификация текста на одном GPU
Чтобы быстро приступить к работе с примером кода, в этом примере записная книжка предоставляет комплексный пример для точной настройки модели для классификации текста. В последующих разделах этой статьи подробно описывается использование Hugging Face для дообучения на платформе Azure Databricks.
Тетрадь по тонкой настройке моделей классификации текста Hugging Face
Дополнительные ресурсы
Узнайте больше о Hugging Face в Azure Databricks.
- Что такое трансформеры от Hugging Face?
- Вы можете использовать модели Transformers от Hugging Face в Spark для масштабирования ваших пакетных приложений NLP, см. вывод модели с использованием Hugging Face Transformers для NLP.