Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Vortrainierte Modelle verwenden

Heinrich-Heine-Universität Düsseldorf

Orientierung

Was tun mit Deep Learning?

Bevor wir selbst Modelle trainieren, lohnt sich ein Blick darauf, was es schon gibt. Wenn wir für eine Aufgabe ein vortrainiertes Modell verwenden wollen, müssen wir wissen, welches Modell geeignet sein kann. Dafür schauen wir bei Hugging Face: huggingface.co/models listet Modelle, huggingface.co/tasks sortiert sie nach Aufgabe („The Hugging Face Hub hosts many models for a variety of machine learning tasks.“). Die Task-Seiten sind ein guter Einstieg, um das Vokabular zu lernen: Was ist Image Classification, Object Detection, Token Classification, Text Generation, …? Einen systematischen Rundgang machen wir im nächsten Abschnitt.

Die Task-Seite gruppiert nach Modalität. Zur Orientierung, in der Reihenfolge von dort:

ModalitätTasks (Auswahl)
Computer VisionImage Classification, Object Detection, Image Segmentation, Depth Estimation, Image-to-Image, Text-to-Image, Zero-Shot Image Classification
Natural Language ProcessingText Classification, Token Classification, Question Answering, Summarization, Translation, Text Generation, Fill-Mask, Sentence Similarity
AudioAutomatic Speech Recognition, Text-to-Speech, Audio Classification
MultimodalImage-to-Text, Visual Question Answering, Document Question Answering, Feature Extraction
Tabular, Reinforcement LearningTabular Classification und Regression; Reinforcement Learning

Die Namen sind das Vokabular, in dem Modellkarten, Papers und Stellenanzeigen reden.

Hugging Face …?

Surfen Sie ruhig weiter auf huggingface.co. Hier ein paar Fakten zur Einordnung:

Mit anderen Worten: Der Hub ist ein kommerzielles Angebot, aber die Modelle und Libraries darauf sind größtenteils offen, und für uns ist er die bequemste Art, an Gewichte zu kommen.

Ein Rundgang durch die Tasks

Wenn wir für eine Aufgabe ein vortrainiertes Modell verwenden wollen, müssen wir wissen, welches Modell geeignet sein kann. Auf huggingface.co/tasks sind die Modelle nach Tasks sortiert. Wir gehen exemplarisch einige davon durch – nicht, um die Modelle zu verstehen, sondern um das Vokabular zu lernen und ein Gefühl dafür zu bekommen, was heute „von der Stange“ geht.

Tasks in Computer Vision

Zur Einordnung des Vokabulars: Zero-Shot heißt ohne gelabelte Daten für die neue Aufgabe, One-Shot (oder Single-Shot) mit einem gelabelten Sample, Few-Shot mit einigen wenigen gelabelten Samples.

Tasks in NLP

Wir betrachten nur einen Teil der NLP-Tasks:

Praktisch

Beispiel: Übersetzen mit WMT19

Wir übersetzen von Englisch nach Deutsch mit Facebooks WMT19-Modell, nach der Anleitung von Hugging Face:

from transformers import FSMTForConditionalGeneration, FSMTTokenizer

mname = "facebook/wmt19-en-de"
tokenizer = FSMTTokenizer.from_pretrained(mname)
model = FSMTForConditionalGeneration.from_pretrained(mname)

input = "I am not sure if deep learning is really for me."
input_ids = tokenizer.encode(input, return_tensors="pt")
outputs = model.generate(input_ids)
decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(decoded)
# Ich bin mir nicht sicher, ob Deep Learning wirklich etwas für mich ist.

Das Muster ist typisch für alle Modelle auf dem Hub: Ein Tokenizer verwandelt Text in Zahlen (input_ids, als PyTorch-Tensor, daher return_tensors="pt"), das Modell verwandelt Zahlen in Zahlen, und der Tokenizer verwandelt das Ergebnis zurück in Text. from_pretrained lädt die Gewichte beim ersten Aufruf aus dem Hub herunter und cached sie lokal.

Auf der GPU rechnen

Um auf der GPU mit CUDA zu rechnen, müssen Modell und Eingabedaten dorthin verschoben werden:

model = FSMTForConditionalGeneration.from_pretrained(mname).to("cuda")
input_ids = tokenizer.encode(input, return_tensors="pt").to("cuda")

Der übliche Workflow, damit der Code auch ohne GPU läuft:

import torch

device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model.to(device)

Alternativ kann die accelerate-Library von HF auch dynamisch Teile des Modells auf die GPU legen und andere Teile im Hauptspeicher belassen, um sehr große Modelle zu nutzen.

Was zuvor geschah: Installation

pip install 'transformers[torch]' in der Shell (oder !pip install ... in einem Notebook) installiert transformers und PyTorch. Das allein installiert noch kein CUDA, d.h. alle Rechnungen finden auf der CPU mit dem Hauptspeicher statt – in PyTorch ist das schlicht das Gerät cpu, ohne Indexnummer. In den pipeline-Aufrufen von transformers schreibt man dafür device=-1; device=0 meint dort die erste GPU.

Für CUDA (Ubuntu Linux auf NVIDIA-Hardware) prüft man zuerst, was da ist:

lspci | grep -i nvidia
nvidia-smi

nvidia-smi zeigt die Treiberversion und die maximale CUDA-Version, die die GPU bzw. der Treiber unterstützt (z.B. 11.4); nvcc --version zeigt die installierte CUDA-Toolkit-Version (z.B. 10.1). Die installierte Version darf kleiner sein als die maximale – das passt dann. Anschließend PyTorch mit passendem CUDA-Build installieren:

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu129

Hat es geklappt? Python-Interpreter auf und torch.cuda.is_available() sollte True liefern. Auf AMD-GPUs heißt das Ganze ROCm statt CUDA, aber der Python-Befehl ist derselbe; auf macOS 12.3+ gibt es Beschleunigung über MPS (torch.backends.mps.is_available()).

Und noch davor: eine virtuelle Umgebung im Arbeitsordner anlegen, damit die Installation nicht das System-Python verändert:

python -m venv .venv
source .venv/bin/activate

und erst danach mit pip fleißig installieren. Oder entspannt uv benutzen, das Umgebung und Pakete in einem Schritt verwaltet.

Alternative: Google Colab

Wer nicht lokal installieren will oder keine GPU hat: Google Colab bietet Jupyter-Notebooks mit (begrenzter) GPU-Zeit im Browser. Ein neues Notebook gibt es unter colab.research.google.com/#create=true; die Hugging-Face-Dokumentation ist als Colab-Notebooks verfügbar, z.B. die Task Summary.