PyTorch is een open-source, community-gedreven deep-learningframework dat een flexibele en efficiënte manier biedt om machinelearningmodellen te bouwen. Het heeft een gebruiksvriendelijke interface, uitgebreide communitysupport en naadloze integratie met het Python-ecosysteem.
PyTorch 2.0 heeft fundamentele wijzigingen doorgevoerd in de kern van de compiler, terwijl het voor ontwikkelaars net zo vertrouwd en eenvoudig blijft. Deze nieuwste verbetering belooft versnelde prestaties en uitgebreidere ondersteuning voor Dynamic Shapes en Distributed.
Wat is er nieuw in PyTorch 2.0?
PyTorch verplaatst onderdelen van C++ terug naar Python, waardoor het sneller en hackbaar wordt. Met versie 2.0 hebben ze `torch.compile` geïntroduceerd, wat de manier waarop PyTorch op compilersniveau werkt, heeft veranderd. Deze functie is optioneel en heeft geen invloed op je oude code.
PyTorch 2.0 Compile
Om een solide basis te bieden voor de functie `torch.compile`, zijn nieuwe technologieën geïntroduceerd:
- TorchDynamo. Een Just-in-Time-compiler (JIT) op Python-niveau, speciaal ontworpen om PyTorch te versnellen. Door integratie met de frame-evaluatie-API in CPython past het tijdens runtime dynamisch Python-bytecode aan, wat snellere uitvoering mogelijk maakt.
- AOTAutograd. Een toolkit die ontwikkelaars helpt om training van modellen in PyTorch te versnellen. Het traceert zowel de forward- als backward-grafen vooraf. Bovendien biedt AOTAutograd eenvoudige mechanismen om de geëxtraheerde grafen naadloos te compileren met geavanceerde deep-learningcompilers.
- PrimTorch. Door het aantal PyTorch-operators drastisch terug te brengen van meer dan 2000 naar ongeveer 250 primitieve operators, heeft PrimTorch het ontwikkelen van PyTorch-functies of -backends aanzienlijk vereenvoudigd.
- TorchInductor. Een PyTorch-native deep-learningcompiler die modellen automatisch omzet in gegenereerde code voor meerdere accelerators en backends. TorchInductor gebruikt OpenAI Triton als bouwsteen voor GPU-versnelling.
Al deze nieuwe technologieën zijn in Python geschreven en ondersteunen Dynamic Shapes. Daardoor voert de nieuwe PyTorch code sneller uit, is hij flexibeler en gemakkelijk te hacken, en gaat de instapdrempel omlaag.
Codevoorbeelden
Laten we de snelle en eenvoudige code-implementatie van de PyTorch-compiler bekijken.
Zonder torch.compile
import torch
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
Zonder torch.compile
Om de modelprestaties te verbeteren, voeg je gewoon de torch.compile-wrapper rond het model toe en krijg je een gecompileerd model. Het is plug-and-play.
import torch
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
compiled_model = torch.compile(model)
Leer deep-learningmodellen bouwen met de PyTorch-bibliotheek in de cursus Deep Learning with PyTorch.
Je kunt je model gewoon trainen zonder iets te wijzigen.
import torch
model = torch.compile(model)
for batch in dataloader:
run_epoch(model, batch)
Of je kunt inference draaien.
model = torch.compile(model)
model(**input)
De functie torch.compile() heeft extra parameters:
- mode: je kunt aangeven waarop de compiler moet optimaliseren tijdens het compileren.
- dynamic: wordt gebruikt om het pad voor Dynamic Shapes in te schakelen.
- fullgraph: compileert het programma tot één enkele graaf.
- backend: standaard wordt TorchInductor gebruikt, maar je kunt andere beschikbare compiler-backends opgeven.
def torch.compile(model: Callable,
*,
mode: Optional[str] = "default",
dynamic: bool = False,
fullgraph:bool = False,
backend: Union[str, Callable] = "inductor",
**kwargs
) -> torch._dynamo.NNOptimizedModule
Leer de basis van de PyTorch-API en bouw vanaf nul een eenvoudig neuraal netwerk met onze PyTorch-tutorial.
Benchmark
Voor de start met PyTorch 2.0 hebben ontwikkelaars 163 open-source modellen (46 HuggingFace Transformers, 61 TIMM en 56 TorchBench) gebruikt om prestatiebenchmarks te maken voor de nieuwe compile-functie. De benchmark is zorgvuldig samengesteld en omvat taken zoals beeldclassificatie, beeldgeneratie, taalmodellering, aanbevelingssystemen en reinforcement learning.
Het resultaat laat een aanzienlijk betere performance zien tijdens training op NVIDIA A100 GPU's.
Let op: momenteel ondersteunt de standaardbackend alleen CPU's en Nvidia Volta- en Ampere-GPU-series.

PyTorch-compilerbenchmark op NVIDIA A100 GPU
Dit is een begin, en in een volgende update zie je meer verbeteringen in performance en schaalbaarheid.
Hoe installeer je PyTorch 2.0
Je kunt een nieuwere versie van PyTorch eenvoudig installeren met pip.
Kopieer en plak het onderstaande commando in je terminal.
Voor GPU's: CUDA 11.8
Nieuwere GPU-versies blijken aanzienlijk betere prestaties te leveren.
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu118
Voor GPU's: CUDA 11.7
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu117
Voor CPU's:
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cpu
Voor verificatie:
git clone https://github.com/pytorch/pytorch
cd tools/dynamo
python verify_dynamo.py
Hugging Face versnellen met PyTorch 2.0
Laten we de functie torch.compile gebruiken om Hugging Face Transformers te versnellen. Je kunt je Hugging Face-code sneller laten draaien met een decorator van één regel.
Let op: met torch.compile() hebben we een prestatieboost van 30%-200% gezien bij training - TorchDynamo Performance Dashboard.
In dit voorbeeld passen we torch.compile toe op een “dolly-v2-3b" large language model voor snellere inference. Om de code in Google Colab te draaien, moeten we eerst de benodigde Python-bibliotheken installeren.
%%capture
%pip install transformers accelerate xformers
Vervolgens downloaden en laden we de tokenizer en het taalmodel met Hugging Face Transformers. Daarna voegen we nn.Module toe aan de functie torch.compile().
import torch
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
GenerationConfig,
pipeline,
)
tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-3b")
model = AutoModelForCausalLM.from_pretrained(
"databricks/dolly-v2-3b", device_map="auto", torch_dtype=torch.bfloat16
)
model = torch.compile(model) #only line of code is required
In de laatste stap zetten we tekst om in tokens met de tokenizer, voeren die in bij model.generate en decoderen we de gegenereerde output terug naar tekst met tokenizer.batch_decode.
prompt = "I love you because"
inputs = tokenizer(prompt, return_tensors="pt").to(device="cuda:0")
# Generate
generate_ids = model.generate(inputs.input_ids, max_length=50)
tokenizer.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)[0]
Zoals we zien, heeft “dolly-v2” de zin afgemaakt met: “you are a good person…”
"I love you because you are a good person.
You are kind, you help others, you are honest, you are loyal, you are humble, you are humble, you are humble.
You are a good person."
Het werkt ook met de Hugging Face-pipeline. Geef simpelweg een taaktype, model en tokenizer op.
generator = pipeline("text-generation", model= model,tokenizer=tokenizer)
generator("What is the name of Germany's Capital?")
Output:
[{'generated_text': "What is the name of Germany's Capital?
The name of Germany's Capital is Berlin."}]
De compile-functie werkt out-of-the-box met de Python-bibliotheken transformers, accelerate en TIMM.
Weet je niet goed waar je moet beginnen met je carrière in deep learning en AI? De Machine Learning Scientist with Python career track is een uitstekend startpunt. Deze biedt een compleet overzicht van cruciale Python-vaardigheden die je kunnen helpen een baan te vinden als machinelearningscientist.
Als gecertificeerd data scientist haal ik met passie het maximale uit de nieuwste technologie om innovatieve machinelearning-toepassingen te bouwen. Met een sterke achtergrond in spraakherkenning, data-analyse en -rapportage, MLOps, conversationele AI en NLP heb ik mijn vaardigheden aangescherpt in het ontwikkelen van intelligente systemen die echt impact maken. Naast mijn technische expertise ben ik ook een sterke communicator met een talent om complexe concepten terug te brengen tot heldere, beknopte taal. Daardoor ben ik uitgegroeid tot een veelgelezen blogger over data science, waar ik mijn inzichten en ervaringen deel met een groeiende community van data-professionals. Op dit moment richt ik me op contentcreatie en redactie, waarbij ik met large language models werk aan krachtige en aansprekende content die zowel bedrijven als individuen helpt het beste uit hun data te halen.

