PyTorch, makine öğrenimi modelleri oluşturmayı esnek ve verimli kılan, açık kaynaklı ve topluluk öncülüğünde bir derin öğrenme çatısıdır. Kullanıcı dostu bir arayüze, kapsamlı topluluk desteğine ve Python ekosistemiyle kesintisiz entegrasyona sahiptir.
PyTorch 2.0, geliştiriciler için aynı düzeyde aşinalık ve kolaylığı korurken çekirdek derleyici işlemlerinde köklü değişiklikler getirdi. Bu en son iyileştirme, hızlandırılmış performansın yanı sıra Dinamik Şekiller (Dynamic Shapes) ve Dağıtık (Distributed) için genişletilmiş destek vaat ediyor.
PyTorch 2.0’da Neler Yeni?
PyTorch, parçaları C++’tan yeniden Python’a taşıyarak daha hızlı ve üzerinde oynanabilir hale getiriyor. 2.0 sürümüyle birlikte, PyTorch’un derleyici düzeyindeki çalışma şeklini değiştiren `torch.compile` tanıtıldı. Bu özellik isteğe bağlıdır ve eski kodunuzu etkilemez.
PyTorch 2.0 Compile
`torch.compile` özelliğine sağlam bir temel sağlamak için yeni teknolojiler tanıtıldı:
- TorchDynamo. PyTorch’u hızlandırmak için özel olarak tasarlanmış, Python düzeyinde bir Anında Derleme (JIT) derleyicisidir. CPython’daki frame evaluation API’siyle bütünleşerek, çalışma zamanında Python bayt kodunu dinamik olarak değiştirir ve kodun daha hızlı yürütülmesini sağlar.
- AOTAutograd. Geliştiricilere PyTorch’ta model eğitimini hızlandırmada yardımcı olan bir araç seti. Hem ileri hem de geri grafiklerini önceden izler. Ayrıca, AOTAutograd, çıkarılan grafikleri son teknoloji derin öğrenme derleyicileriyle sorunsuz şekilde derlemek için basit mekanizmalar sunar.
- PrimTorch. PyTorch operatörlerinin sayısını 2000’in üzerindeki seviyeden yaklaşık 250 temel (primitive) operatöre önemli ölçüde indirerek, PyTorch özellikleri veya arka uçlarının geliştirilmesini kayda değer biçimde sadeleştirmiştir.
- TorchInductor. PyTorch modellerini otomatik olarak birden çok hızlandırıcı ve arka uç için üretilen koda eşleyen, PyTorch yerelinde bir derin öğrenme derleyicisidir. TorchInductor, GPU hızlandırması için bir yapı taşı olarak OpenAI Triton’u kullanır.
Tüm bu yeni teknolojiler Python ile yazılmıştır ve Dinamik Şekilleri destekler. Bu sayede yeni PyTorch, kodu daha hızlı çalıştırır, daha esnek ve kolayca üzerinde oynanabilir hale gelir; böylece giriş engelini düşürür.
Kod Örnekleri
PyTorch Derleyicisinin hızlı ve kolay kod uygulamasını gözden geçirelim.
torch.compile olmadan
import torch
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
torch.compile olmadan
Model performansını artırmak için, modele torch.compile sarmalayıcısını eklemeniz ve derlenmiş bir model elde etmeniz yeterlidir. Tak-çalıştır şeklindedir.
import torch
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
compiled_model = torch.compile(model)
Deep Learning with PyTorch kursunu alarak PyTorch kütüphanesiyle derin öğrenme modelleri oluşturmayı öğrenin.
Tek satır bile değiştirmeden modelinizi kolayca eğitebilirsiniz.
import torch
model = torch.compile(model)
for batch in dataloader:
run_epoch(model, batch)
Ya da çıkarım (inference) çalıştırabilirsiniz.
model = torch.compile(model)
model(**input)
torch.compile() ek parametrelerle birlikte gelir:
- mode: derleyicinin derleme sırasında neyi optimize etmesi gerektiğini belirtebilirsiniz.
- dynamic: Dinamik Şekiller için kod yolunu etkinleştirmek amacıyla kullanılır.
- fullgraph: programı tek bir grafa derler.
- backend: varsayılan olarak TorchInductor kullanılır, ancak mevcut diğer derleyici arka uçlarını belirtebilirsiniz.
def torch.compile(model: Callable,
*,
mode: Optional[str] = "default",
dynamic: bool = False,
fullgraph:bool = False,
backend: Union[str, Callable] = "inductor",
**kwargs
) -> torch._dynamo.NNOptimizedModule
PyTorch API’nin temellerini öğrenin ve PyTorch Eğitimi ile sıfırdan basit bir sinir ağı oluşturun.
Kıyaslama
PyTorch 2.0 ile çalışmaya başlarken, geliştiriciler yeni derleme özelliğinin performans kıyaslamalarını oluşturmak için 163 açık kaynaklı (46 HuggingFace Transformers, 61 TIMM ve 56 TorchBench) model kullandı. Kıyaslamada Görüntü sınıflandırma, Görüntü üretimi, Dil modelleme, Öneri sistemleri ve Pekiştirmeli öğrenme gibi görevler dikkatle dahil edilmiştir.
Sonuçlar, NVIDIA A100 GPU’larında eğitim sırasında performansın önemli ölçüde iyileştiğini gösteriyor.
Not: Şu anda varsayılan arka uç yalnızca CPU’ları ve Nvidia Volta ile Ampere GPU serilerini desteklemektedir.

NVIDIA A100 GPU üzerinde PyTorch derleyici kıyaslaması
Bu bir başlangıç; gelecek güncellemede daha fazla performans ve ölçeklenebilirlik iyileştirmesi göreceksiniz.
PyTorch 2.0 Nasıl Kurulur
PyTorch’un yeni sürümünü pip kullanarak kolayca kurabilirsiniz.
Aşağıdaki komutu kopyalayıp terminalinize yapıştırın.
GPU’lar için: CUDA 11.8
Yeni nesil GPU’ların çok daha iyi performans gösterdiği ortaya çıktı.
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu118
GPU’lar için: CUDA 11.7
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu117
CPU’lar için:
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cpu
Doğrulama için:
git clone https://github.com/pytorch/pytorch
cd tools/dynamo
python verify_dynamo.py
PyTorch 2.0 ile Hugging Face’i Hızlandırma
Hugging Face transformers’ı hızlandırmak için torch.compile fonksiyonunu deneyelim. Tek satırlık bir dekoratörle Hugging Face kodunuzu daha hızlı çalıştırabilirsiniz.
Not: torch.compile() ile eğitimde %30-%200 arası performans artışı gördük - TorchDynamo Performans Panosu.
Bu örnekte, daha hızlı çıkarım için “dolly-v2-3b" adlı büyük dil modeline torch.compile uygulayacağız. Kodu Google Colab’de çalıştırmak için önce gerekli Python kütüphanelerini kurmamız gerekiyor.
%%capture
%pip install transformers accelerate xformers
Ardından, Hugging Face transformers kullanarak ayrıştırıcıyı (tokenizer) ve dil modelini indirecek ve yükleyeceğiz. Sonrasında nn.Module’u torch.compile() fonksiyonuna ekleyeceğiz.
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
Son adımda, metni tokenizer kullanarak belirteçlere (token) dönüştürecek, model.generate’e verecek ve ardından üretilen çıktıyı tokenizer.batch_decode ile tekrar metne çözeceğiz.
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]
Görüldüğü gibi, “dolly-v2” cümleyi “you are a good person…” ekleyerek tamamladı.
"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."
Hugging Face pipeline ile de çalışır. Bir görev türü, model ve ayrıştırıcı belirtmeniz yeterlidir.
generator = pipeline("text-generation", model= model,tokenizer=tokenizer)
generator("What is the name of Germany's Capital?")
Çıktı:
[{'generated_text': "What is the name of Germany's Capital?
The name of Germany's Capital is Berlin."}]
Derleme fonksiyonu, transformers, accelerate ve TIMM Python kütüphaneleriyle kutudan çıktığı gibi çalışır.
Derin öğrenme ve yapay zekâ kariyerinize nereden başlayacağınızdan emin değilseniz, Machine Learning Scientist with Python kariyer yolu mükemmel bir başlangıç noktasıdır. Makine öğrenimi bilimcisi olarak iş bulmanıza yardımcı olabilecek temel Python becerilerine kapsamlı bir genel bakış sunar.
Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.

