Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u een Hugging Face-model kunt verfijnen met de bibliotheek Hugging Face transformers op één GPU. Het bevat ook databricks-specifieke aanbevelingen voor het laden van gegevens uit lakehouse- en logboekregistratiemodellen naar MLflow, waarmee u uw modellen in Azure Databricks kunt gebruiken en beheren.
De hugging Face-bibliotheek transformers biedt het trainerhulpprogramma en automodelklassen waarmee u transformersmodellen kunt laden en verfijnen.
Deze hulpprogramma's zijn beschikbaar voor de volgende taken met eenvoudige wijzigingen:
- Modellen laden om fijn af te stemmen.
- Het bouwen van de configuratie voor het hulpprogramma Hugging Face Transformers Trainer.
- Training uitvoeren op één GPU.
Zie Wat zijn Hugging Face Transformers?
Vereisten
- Een enkel-knooppunt cluster met één GPU voor de driver.
- De GPU-versie van Databricks Runtime 13.0 ML en hoger.
- Voor dit voorbeeld voor het afstemmen zijn de 🤗 transformatieprogramma's, 🤗 gegevenssets en 🤗 Evaluate-pakketten vereist die zijn opgenomen in Databricks Runtime 13.0 ML en hoger.
- MLflow 2.3.
- Gegevens die zijn voorbereid en geladen voor het verfijnen van een model met transformatoren.
Gegevensset van Hugging Face tokeniseren
Hugging Face Transformers-modellen verwachten getokeniseerde invoer in plaats van de tekst in de gedownloade gegevens. Gebruik een AutoTokenizer die is geladen vanuit het basismodel om compatibiliteit met het basismodel te garanderen. Met Hugging Face datasets kunt u de tokenizer consistent toepassen op zowel de trainings- als de testgegevens.
Voorbeeld:
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)
De trainingsconfiguratie instellen
Hulpprogramma's voor de trainingconfiguratie van Hugging Face kunnen worden gebruikt om een Trainer te configureren. Voor de trainerklassen moet de gebruiker het volgende verstrekken:
- Metrische gegevens
- Een basismodel
- Een trainingsconfiguratie
U kunt evaluatiemetrieken configureren naast de standaardmetriek loss die door Trainer wordt berekend. In het volgende voorbeeld wordt gedemonstreerd hoe u accuracy als een maatstaf toevoegt:
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)
Gebruik de klassen AutoModel voor NLP om het juiste model voor uw taak te laden.
Voor tekstclassificatie gebruikt u AutoModelForSequenceClassification om een basismodel voor tekstclassificatie te laden. Wanneer u het model maakt, geeft u het aantal klassen en de labeltoewijzingen op die tijdens de voorbereiding van de gegevensset zijn gemaakt.
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(
base_model,
num_labels=len(label2id),
label2id=label2id,
id2label=id2label
)
Maak vervolgens de trainingsconfiguratie. Met de TrainingArguments klasse kunt u de uitvoermap, evaluatiestrategie, leersnelheid en andere parameters opgeven.
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(output_dir=training_output_dir, evaluation_strategy="epoch")
Het gebruik van een gegevensverzamelaar verzamelt invoer in trainings- en evaluatiegegevenssets. DataCollatorWithPadding biedt goede basislijnprestaties voor tekstclassificatie.
from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer)
Nu al deze parameters zijn gemaakt, kunt u nu een Trainermaken.
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,
)
Trainen en aanmelden bij MLflow
Hugging Face werkt goed samen met MLflow en registreert automatisch meetgegevens tijdens het uitvoeren van modeltraining met behulp van de MLflowCallback. U moet het getrainde model echter zelf registreren.
Training verpakken in een MLflow-uitvoering. Hiermee wordt een transformatorpijplijn gemaakt van de tokenizer en het getrainde model en wordt deze naar de lokale schijf geschreven. Meld ten slotte het model aan bij MLflow met 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!",
)
Als u geen pijplijn hoeft te maken, kunt u de onderdelen die in de training worden gebruikt, indienen in een woordenlijst:
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!"],
)
Het model laden voor deductie
Wanneer uw model gelogd en gereed is, is het laden van het model voor inferentie hetzelfde als het laden van het vooraf getrainde MLflow-model.
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)
Zie Modellen implementeren met behulp van Mosaic AI Model Serving voor meer informatie.
Veelvoorkomende CUDA-fouten oplossen
In deze sectie worden veelvoorkomende CUDA-fouten en richtlijnen beschreven voor het oplossen van deze fouten.
OutOfMemoryError: CUDA geheugen op
Bij het trainen van grote modellen is een veelvoorkomende fout die u kunt tegenkomen de CUDA out of memory-fout.
Voorbeeld:
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.
Probeer de volgende aanbevelingen om deze fout op te lossen:
Verklein de batchgrootte voor training. U kunt de
per_device_train_batch_sizewaarde in TrainingArguments verminderen.Gebruik training met lagere precisie. U kunt
fp16=Trueinstellen in TrainingArguments.Gebruik gradient_accumulation_steps in TrainingArguments om de totale batchgrootte effectief te vergroten.
Gebruik 8-bit Adam-optimizer.
Schoon het GPU-geheugen op voordat u traint. Soms kan GPU-geheugen worden bezet door een aantal ongebruikte code.
from numba import cuda device = cuda.get_current_device() device.reset()
CUDA-kernelfouten
Bij het uitvoeren van de training kunnen CUDA-kernelfouten optreden.
Voorbeeld:
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.
Ga als volgt te werk om het probleem op te lossen:
Voer de code uit op de CPU om te zien of de fout reproduceerbaar is.
Een andere optie is om een betere tracering te krijgen door
CUDA_LAUNCH_BLOCKING=1in te stellen:import os os.environ["CUDA_LAUNCH_BLOCKING"] = "1"
Notebook: Tekstclassificatie verfijnen op één GPU
Om snel aan de slag te gaan met voorbeeldcode, biedt dit voorbeeldnotebook een end-to-end-voorbeeld voor het verfijnen van een model voor tekstclassificatie. In de volgende secties van dit artikel wordt dieper ingegaan op het gebruik van Hugging Face voor het verfijnen van Azure Databricks.
Fijnafstelling van Hugging Face tekstclassificatiemodellen in een notebook
Aanvullende bronnen
Meer informatie over Hugging Face in Azure Databricks.
- Wat zijn Hugging Face Transformers?
- U kunt Hugging Face Transformers-modellen in Spark gebruiken om uw NLP-batchtoepassingen uit te schalen. Zie Modeldeductie met behulp van Hugging Face Transformers voor NLP.