Bulutta Model Eğitirken CPU mu GPU mu? Performans, Maliyet ve Doğru Kaynak Seçimi
Bir makine öğrenmesi modeli yerel bilgisayarımızda yavaş çalışmaya başladığında aklımıza gelen ilk çözümlerden biri daha güçlü bir…
Bulutta Model Eğitirken CPU mu GPU mu? Performans, Maliyet ve Doğru Kaynak Seçimi
Bir makine öğrenmesi modeli yerel bilgisayarımızda yavaş çalışmaya başladığında aklımıza gelen ilk çözümlerden biri daha güçlü bir donanıma, özellikle de GPU’ya geçmek oluyor.
GPU’lar özellikle derin öğrenme modellerinde ciddi performans avantajları sağlayabiliyor. Fakat burada önemli bir nokta var:
Her makine öğrenmesi problemi için GPU kullanmak doğru bir tercih değil.
Data Science Bootcamp sürecinde bulut bilişim ve veri biliminin birlikte nasıl kullanılabileceğini incelerken benim için en dikkat çekici konulardan biri de buydu.
Bir modeli bulutta eğitirken amacımız her zaman en güçlü makineyi seçmek mi olmalı?
Yoksa yaptığımız işe en uygun kaynağı seçmek mi?
Aslında doğru yaklaşım ikinci seçenek.
Bu yazıda CPU ve GPU arasındaki temel farklardan, hangi veri bilimi problemlerinde hangisinin daha mantıklı olduğundan ve bulut ortamında performans ile maliyet arasında nasıl denge kurulabileceğinden bahsedeceğim.
CPU ve GPU Arasındaki Temel Fark
Öncelikle iki donanım türünün farklı amaçlarla tasarlandığını anlamak gerekiyor.
CPU
CPU, bilgisayarın genel amaçlı işlem birimidir.
Az sayıda ancak güçlü çekirdeğe sahiptir ve farklı türde işlemleri hızlı bir şekilde gerçekleştirebilir.
Veri bilimi projelerinde CPU özellikle şu işlemlerde oldukça kullanışlıdır:
- Veri setlerini okumak
pandasile veri temizlemek- Eksik verileri işlemek
- Özellik mühendisliği yapmak
- Keşifsel Veri Analizi (EDA) gerçekleştirmek
- Logistic Regression, Random Forest ve benzeri klasik makine öğrenmesi algoritmalarını çalıştırmak
Özellikle küçük ve orta büyüklükteki tabular veri setlerinde GPU kullanmak çoğu zaman gerekli değildir.
GPU
GPU ise aynı anda çok sayıda benzer matematiksel işlemi gerçekleştirebilecek şekilde tasarlanmıştır.
Bu nedenle özellikle büyük matris ve tensör işlemlerinde oldukça güçlüdür.
Örneğin:
- CNN modelleri
- Transformer mimarileri
- Görüntü işleme
- Büyük sinir ağları
- Büyük batch boyutlarıyla yapılan eğitimler
GPU’nun paralel işlem kapasitesinden ciddi şekilde yararlanabilir.
Bu nedenle Deep Learning tarafında GPU kullanımı çoğu zaman önemli bir hız avantajı sağlar.
Ancak burada kritik bir detay vardır:
Kodun GPU üzerinde çalışması, otomatik olarak daha hızlı çalışacağı anlamına gelmez.
GPU Neden Her Zaman Daha Hızlı Değildir?
Bir GPU, CPU’dan çok daha yüksek hesaplama kapasitesine sahip olabilir. Fakat gerçek performansı belirleyen yalnızca teorik işlem gücü değildir.
1. Veriyi GPU’ya taşımanın da bir maliyeti vardır
Modeli GPU üzerinde çalıştırırken verinin CPU belleğinden GPU belleğine aktarılması gerekir.
Eğer veri setimiz veya modelimiz çok küçükse bu aktarım süresi, GPU’nun sağladığı hız avantajının önemli bir bölümünü ortadan kaldırabilir.
Dolayısıyla küçük bir problem için güçlü bir GPU kullanmak bazen gereksiz olabilir.
2. Küçük batch boyutları GPU’yu verimli kullanamayabilir
GPU’nun temel avantajı çok sayıda işlemi paralel olarak gerçekleştirebilmesidir.
Fakat GPU’ya yeterince iş göndermezsek bu kapasiteyi kullanamayız.
Örneğin çok küçük batch boyutlarında GPU’nun büyük bir bölümü boşta kalabilir.
3. Sorun her zaman hesaplama olmayabilir
Bir modelin yavaş çalışmasının nedeni bazen modelin kendisi değildir.
Örneğin:
- Diskten veri okuma yavaş olabilir.
- Görüntülere uygulanan dönüşümler uzun sürebilir.
- Ağ üzerinden veri bekleniyor olabilir.
- Veri ön işleme süreci darboğaz oluşturabilir.
Bu durumda çok güçlü bir GPU kullansak bile GPU zamanının büyük bölümünü veri bekleyerek geçirebilir.
4. Her algoritma GPU kullanmaz
Özellikle klasik makine öğrenmesi tarafında kullanılan her kütüphane ve algoritma GPU hızlandırmasını desteklemez.
Örneğin bir Scikit-learn modelini sadece GPU bulunan bir sunucuda çalıştırmak, o algoritmanın otomatik olarak GPU kullanacağı anlamına gelmez.
Bu yüzden donanım seçmeden önce kullandığımız framework ve algoritmanın gerçekten GPU desteği olup olmadığını bilmemiz gerekir.
Hangi İş İçin Hangi Kaynak?
Pratik olarak şu yaklaşım kullanılabilir:
İş yüküİlk tercihEDA ve veri temizlemeCPUKüçük tabular veriCPULogistic RegressionCPURandom ForestCPUKüçük sinir ağıÖnce CPUBüyük CNNGPUTransformerGPUBüyük görüntü veri setleriGPUBüyük ölçekli ETLCPU / Dağıtık sistem
Elbette bu tablo kesin bir kural değildir.
Aynı model bile veri boyutuna, batch büyüklüğüne ve kullanılan kütüphaneye göre farklı davranabilir.
Bu yüzden en sağlıklı yöntem ölçüm yapmaktır.
CPU ve GPU’yu Nasıl Adil Karşılaştırabiliriz?
CPU ve GPU performansını karşılaştırırken farklı modeller veya farklı veri setleri kullanırsak elde ettiğimiz sonuç anlamlı olmaz.
Mümkün olduğunca şu değişkenleri sabit tutmamız gerekir:
- Aynı veri seti
- Aynı train/test bölünmesi
- Aynı model
- Aynı batch boyutu
- Aynı epoch sayısı
- Aynı random seed
- Aynı preprocessing adımları
- Aynı framework
Temel olarak değişen şey yalnızca hesaplama kaynağı olmalıdır.
Böylece CPU ile GPU arasındaki gerçek performans farkını daha doğru ölçebiliriz.
PyTorch’ta CPU ve GPU Seçimi
PyTorch ile modeli mevcut donanıma göre otomatik olarak CPU veya GPU üzerinde çalıştırabiliriz.
import torch
device = torch.device(
"cuda" if torch.cuda.is_available() else "cpu"
)
print(f"Kullanılan cihaz: {device}")
model = model.to(device)
Eğitim sırasında verilerin de aynı cihaza aktarılması gerekir:
for inputs, labels in train_loader:
inputs = inputs.to(device)
labels = labels.to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
Buradaki önemli nokta model ve verinin aynı cihazda bulunmasıdır.
Model GPU üzerinde fakat veriler CPU üzerinde kalırsa cihaz uyuşmazlığı hatası alınır.
Sadece Eğitim Süresine Bakmak Yeterli mi?
Bulut ortamında çalışmaya başladığımızda işin içine başka bir değişken daha girer:
Maliyet.
Bir GPU instance modeli çok daha hızlı eğitebilir. Ancak aynı GPU instance bir CPU instance’dan çok daha pahalıysa yalnızca eğitim süresine bakmak doğru olmaz.
Bu nedenle sadece:
“Model kaç dakikada eğitildi?”
sorusunu sormak yeterli değildir.
Bunun yanında:
“Bu modeli eğitmenin toplam maliyeti ne oldu?”
sorusunu da sormamız gerekir.
En basit haliyle:
Tahmini Eğitim Maliyeti = Saatlik Kaynak Ücreti × Çalışma Süresi
Örneğin iki deney gerçekleştiriyorsak şöyle bir tablo oluşturabiliriz:
KaynakEğitim SüresiSaatlik ÜcretToplam MaliyetF1CPUÖlçülen değerGüncel fiyatHesaplananModel sonucuGPUÖlçülen değerGüncel fiyatHesaplananModel sonucu
Bulut fiyatlandırması zamana, bölgeye ve instance tipine göre değişebileceği için sabit fiyatlar vermek yerine kullanılan platformdaki güncel değerleri kontrol etmek daha doğru olur.
Huawei Cloud ModelArts ile Bu Süreç Nasıl Yönetilebilir?
Bootcamp kapsamında üzerinde durduğumuz platformlardan biri Huawei Cloud ModelArts oldu.
ModelArts, veri bilimi ve makine öğrenmesi süreçlerini bulut ortamında yürütebilmek için farklı hesaplama kaynaklarıyla çalışma imkânı sunuyor.
Notebook oluştururken kullanılacak framework, hesaplama kaynağı ve depolama gibi seçenekler belirlenebiliyor.
Böylece aynı projeyi farklı kaynaklarla çalıştırarak CPU ve GPU performansını karşılaştırmak mümkün hale geliyor.
Örneğin bir deneyin sonucunda şu bilgileri saklamak faydalı olabilir:
experiment_result = {
"device": str(device),
"epochs": epochs,
"batch_size": batch_size,
"training_seconds": total_training_time,
"validation_f1": validation_f1,
"seed": 42
}
Bu yaklaşım özellikle farklı deneyleri karşılaştırırken oldukça faydalıdır.
Çünkü yalnızca model sonucuna değil, hangi ayarlarla ve hangi kaynakla o sonucun elde edildiğine de bakabiliriz.
Bir Model Yavaşsa Önce Darboğazı Bul
Bulutun sunduğu güçlü kaynaklar bazen bizi doğrudan daha büyük makinelere geçmeye teşvik edebilir.
Ancak bir eğitim süreci yavaşladığında ilk çözüm daha büyük GPU seçmek olmamalıdır.
Öncelikle darboğazı bulmak gerekir.
Örneğin şu soruları sorabiliriz:
GPU gerçekten kullanılıyor mu?
print(torch.cuda.is_available())
print(next(model.parameters()).device)
GPU belleği yetersiz mi?
Eğer Out of Memory hatası alıyorsak doğrudan daha büyük bir GPU seçmek yerine:
- Batch size küçültmek
- Mixed precision kullanmak
- Gradient accumulation uygulamak
gibi yöntemleri deneyebiliriz.
Veri yükleme yavaş mı?
PyTorch DataLoader tarafında uygun num_workers değeri veya pin_memory kullanımı performansı etkileyebilir.
Yani sorun GPU’nun gücü değil, GPU’ya verinin ne kadar hızlı ulaştırıldığı da olabilir.
Bulut Maliyetini Nasıl Daha Kontrollü Tutabiliriz?
Bulut ortamında çalışırken teknik performans kadar kaynak yönetimi de önemlidir.
Önce küçük kaynakla başlayın
İlk olarak kodun küçük bir veri setiyle doğru çalıştığını kontrol etmek mantıklıdır.
Hatalı bir eğitim kodunu pahalı bir GPU üzerinde debug etmek gereksiz maliyet oluşturabilir.
EDA için gereksiz yere GPU kullanmayın
Grafik oluşturmak, eksik değer analizi yapmak veya temel veri temizliği gerçekleştirmek için çoğu zaman CPU yeterlidir.
GPU’yu gerçekten ihtiyaç duyulan model eğitim aşamasında kullanmak daha mantıklıdır.
Kullanmadığınız kaynakları durdurun
Bulut ortamında notebook veya eğitim kaynağı aktif olduğu sürece maliyet oluşmaya devam edebilir.
Bu nedenle otomatik durdurma mekanizmalarını kullanmak maliyet kontrolü açısından önemlidir.
Deney sonuçlarını saklayın
Model ağırlıkları, metrikler ve deney sonuçları kalıcı bir depolama alanında tutulmalıdır.
Böylece instance kapatılsa bile yapılan çalışmanın sonuçları kaybolmaz.
Bootcamp Sürecinden Çıkardığım En Önemli Sonuç
Bu konu üzerinde çalışırken bulutta model eğitmenin yalnızca kodu başka bir bilgisayarda çalıştırmak anlamına gelmediğini fark ettim.
Aslında aynı anda üç farklı karar veriyoruz:
1. Teknik uygunluk
İş yüküm CPU’ya mı yoksa GPU’ya mı daha uygun?
2. Deneysel doğruluk
Yaptığım performans karşılaştırması gerçekten adil mi?
3. Ekonomik uygunluk
Kazandığım zaman, kullandığım kaynağın ek maliyetine değiyor mu?
Bu nedenle:
“GPU daha güçlüdür, o halde her zaman GPU kullanmalıyım.”
yaklaşımı eksik kalıyor.
Daha doğru yaklaşım şu olabilir:
GPU, yeterince paralel ve hesaplama yoğun bir problemde doğru veri pipeline’ı ve doğru konfigürasyonla oldukça güçlü bir araçtır.
Sonuç
Veri bilimi projelerinde doğru donanımı seçmek model geliştirme sürecinin önemli bir parçasıdır.
Küçük tabular veri setlerinde, EDA işlemlerinde ve birçok klasik makine öğrenmesi algoritmasında CPU yeterli olabilir.
Buna karşılık büyük sinir ağları, görüntü işleme modelleri ve Transformer tabanlı çalışmalar GPU’nun paralel hesaplama kapasitesinden ciddi şekilde faydalanabilir.
Ancak bulut ortamında asıl amaç her zaman en güçlü makineyi kullanmak değildir.
Asıl avantaj, ihtiyacımız olan kaynağı ihtiyaç duyduğumuz süre boyunca kullanabilmektir.
Bu yüzden iyi bir veri bilimi projesinde yalnızca accuracy veya F1 score gibi model metriklerini değil; eğitim süresini, kaynak kullanımını, maliyeti ve tekrar üretilebilirliği de değerlendirmek gerekir.
Bootcamp sürecinde benim için bulut bilişimin veri bilimine kattığı en önemli bakış açılarından biri de bu oldu.
Kaynaklar
Huawei Cloud — ModelArts Service Overview Huawei Cloud — Creating a Notebook Instance Huawei Cloud — Common Functions of JupyterLab PyTorch — CUDA Semantics PyTorch — Automatic Mixed Precision
메타데이터
- post_id
- a8bf12ebf4f0
- slug
- bulutta-model-eğitirken-cpu-mu-gpu-mu-performans-maliyet-ve-doğru-kaynak-seçimi-a8bf12ebf4f0
- url
- https://medium.com/@akinkirimli20000/bulutta-model-e%C4%9Fitirken-cpu-mu-gpu-mu-performans-maliyet-ve-do%C4%9Fru-kaynak-se%C3%A7imi-a8bf12ebf4f0
- canonical_url
- https://medium.com/@akinkirimli20000/bulutta-model-e%C4%9Fitirken-cpu-mu-gpu-mu-performans-maliyet-ve-do%C4%9Fru-kaynak-se%C3%A7imi-a8bf12ebf4f0
- author_url
- https://medium.com/@akinkirimli20000
- status
- ok
- fetched_at
- 2026-08-09 05:12:45