İçeriğe geç

Teknik Yazılar

Veri Seti ve Model Eğitimi··6 dk okuma

Google Colab'da Model Eğitimi: GPU Seçimi, Checkpoint ve Kopma Kurtarma

Saatlerce süren bir eğitimin son çeyreğinde oturumun kopması, kaybedilmiş bir gün demek olmak zorunda değil. Colab'da eğitimi kopmaya dayanıklı kurmanın pratiği.

Bir yarışma takımının donanım bütçesi genelde uçan kısma gider. Eğitim için elimizde kalan şey çoğu zaman bir dizüstü bilgisayar ve Google Colab sekmesi oluyor. Colab da işini görüyor — ta ki eğitimin üçüncü saatinde sekme “runtime disconnected” deyip her şeyi sıfırlayana kadar.

Bizim ilk kayıplarımız tam olarak böyle oldu. YOLO11m modelini imgsz=1280 ile eğitiyorduk, eğitim çıktıları Google Drive’a yazılıyordu, veri seti de Drive’da duruyordu. Oturum koptuğunda elimizde ne kullanılabilir bir ağırlık dosyası ne de eğitimi kaldığı yerden sürdürecek bir yol vardı. Baştan başladık.

Bu yazı, o hatayı bir daha yapmamak için kurduğumuz düzeni anlatıyor: hangi GPU’yu neden seçtiğimiz, veriyi nereye koyduğumuz, checkpoint’i (ara kayıt dosyası) nasıl aldığımız ve kopmadan sonra eğitimi nasıl kaldığı yerden sürdürdüğümüz. Colab’a özgü ama mantık her kesintili ortamda geçerli.

Colab katmanları ve GPU tipleri

Colab’ın ücretsiz katmanında genellikle NVIDIA T4 düşüyor. Ücretli katmanlarda L4 ve A100 erişimi açılıyor; hangi kartın verileceği anlık kullanılabilirliğe göre değişiyor — Colab dokümantasyonu da GPU tiplerinin zaman içinde değiştiğini açıkça söylüyor. Yani “Pro aldım, A100 garantim var” diye bir şey yok.

Üç kartın resmi özellikleri ve pratikte ne işe yaradıkları:

GPU VRAM Öne çıkan Ne zaman tercih edilir
T4 (Turing) 16 GB GDDR6, 70 W Ücretsiz katmanın standardı Deneme koşuları, imgsz=640, küçük veri seti, hiperparametre denemeleri
L4 (Ada) 24 GB GDDR6, 300 GB/s, 72 W T4’ün halefi, daha fazla VRAM imgsz=1280 gibi büyük girdiler; T4’te batch düşürmek zorunda kaldığınız durumlar
A100 (Ampere) Colab’da 40 GB’lık SXM4 varyantı En yüksek üretim hızı Uzun ve nihai eğitim koşusu; saat başına hesaplama birimi tüketimi de en yüksek

Bizim kullanım şeklimiz şu: veri hattı ve augmentation ayarlarını T4’te birkaç epoch koşturup doğruluyoruz, nihai uzun eğitimi daha büyük VRAM’li bir kartta yapıyoruz. imgsz=1280’de T4’ün 16 GB’ı batch boyutunu belirgin şekilde sınırlıyor.

Ücretli katmanlar “hesaplama birimi” (compute unit) tüketimine dayanıyor ve güçlü kart saat başına daha çok birim yakıyor. Fiyatlar ülkeye ve zamana göre değiştiği için burada rakam vermiyoruz; Colab’ın kendi fiyat sayfasından kontrol edin (2026 itibarıyla plan yapısı ücretsiz / Pro / Pro+ şeklinde).

Oturum ve boşta kalma limitleri

Buradaki en önemli bilgi şu: Google bu limitleri resmî olarak yayımlamıyor. Colab SSS sayfası limitlerin zaman içinde değişebildiği için yayımlanmadığını söylüyor. İnternette dolaşan “90 dakika boşta, 12 saat maksimum” rakamları gözleme dayalı; SSS’de yalnızca ücretsiz katmanda not defterlerinin “en fazla 12 saat, kullanılabilirliğe ve kullanım alışkanlıklarınıza bağlı olarak” çalışabildiği geçiyor.

Resmî olarak doğrulanabilen tek net madde arka plan yürütme: Colab Pro+, yeterli hesaplama biriminiz varsa 24 saate kadar kesintisiz kod yürütmeyi destekliyor — yani sekmeyi kapatsanız da eğitim devam ediyor. Diğer katmanlarda tarayıcı bağlantısı koparsa oturum da gider.

Pratik sonuç: limiti tahmin etmeye çalışmak yerine, kopmanın maliyetini sıfıra yaklaştırın. Eğitiminiz her an kesilebilir varsayımıyla kurulmalı.

Veriyi Drive’da bırakmayın, /content’e kopyalayın

Drive’ı bağlamak tek satır:

from google.colab import drive
drive.mount('/content/drive')

Bağlanan Drive yerel bir klasör gibi görünür ama değildir — arkada FUSE üzerinden ağdan okuma yapılır. Tek büyük dosyada bu fark edilmez; on binlerce küçük JPEG’de belirgin bir darboğaza dönüşür. Topluluk ölçümleri Drive’dan okumanın yerel diske göre kat kat yavaş kaldığını gösteriyor ve bu, epoch süresini GPU’nun değil veri hattının belirlediği anlamına gelir.

Doğru düzen: veri setini Drive’da tek bir zip olarak tutun, oturum başında /content altına kopyalayıp orada açın.

!cp /content/drive/MyDrive/suas/dataset.zip /content/
!unzip -q /content/dataset.zip -d /content/dataset
!df -h /content          # geçici diskte ne kadar yer kaldı?
!nvidia-smi --query-gpu=name,memory.total --format=csv

Darboğazın nerede olduğunu anlamanın en hızlı yolu eğitim sırasında nvidia-smi çalıştırmak: GPU kullanımı sürekli düşükse sorun modelde değil, veri okumada.

cache=‘disk’ mi, cache=True mi?

Ultralytics’in cache argümanı görüntüleri ön belleğe alır. Varsayılan değeri False.

Ayar Nereye Ne zaman
cache=False (varsayılan) Yok, her epoch diskten okunur Veri seti RAM’e de diske de sığmıyorsa
cache='disk' Diskte .npy dosyaları Büyük veri setleri; /content diskinde yeriniz varsa ilk tercih
cache=True (RAM) Sistem belleği Küçük veri seti + bol RAM; en hızlısı ama oturumu düşürme riski var

Bizim imgsz=1280 ölçeğimizde cache=True oturumun belleğini doldurup runtime’ı çökertti — üstelik hata mesajı bunu açıkça söylemiyor, oturum sessizce yeniden başlıyor. cache='disk' bu ölçekte daha güvenli bir orta yol.

Checkpoint: save_period ile ara kayıt almak

Ultralytics varsayılan olarak (save=True) her epoch sonunda last.pt ve best.pt dosyalarını günceller. save_period argümanı ise numaralı ara kopyalar üretir ve varsayılanı -1, yani kapalı.

from ultralytics import YOLO

model = YOLO("yolo11m.pt")
model.train(
    data="/content/dataset/data.yaml",
    epochs=300,          # dokümanların önerdiği başlangıç noktası
    imgsz=1280,
    batch=-1,            # ~%60 GPU belleği hedefleyen otomatik mod
    cache="disk",
    save_period=10,      # her 10 epoch'ta ayrı bir checkpoint
    project="/content/runs",
    name="yolo11m_1280",
)

batch=-1 işi kolaylaştırıyor: dokümanlara göre yaklaşık %60 GPU bellek kullanımını hedefleyen bir batch boyutu seçiyor. Farklı kartlar arasında gidip gelirken elle ayar yapmaktan kurtarıyor.

Dikkat edin: project yolu /content altında, Drive’da değil. Drive’a yedeklemeyi ayrı bir işe bırakıyoruz:

import subprocess
subprocess.Popen(["bash", "-c",
    "while true; do rsync -a /content/runs/ "
    "/content/drive/MyDrive/suas/runs/; sleep 600; done"])

Bu döngü 10 dakikada bir çıktıları Drive’a kopyalar. Eğitim yerel diske yazmaya devam eder, yedek arka planda ilerler. Oturum koptuğunda en fazla 10 dakikalık ilerleme kaybedersiniz.

resume=True ile kaldığı yerden devam

Kopma yaşandığında yapılacak şey last.pt ile eğitimi sürdürmek:

from ultralytics import YOLO

model = YOLO("/content/drive/MyDrive/suas/runs/yolo11m_1280/weights/last.pt")
model.train(resume=True)

Komut satırı karşılığı:

yolo train model=.../weights/last.pt resume=True

resume=True yalnızca ağırlıkları değil, optimizer durumunu, öğrenme oranı zamanlayıcısını ve epoch numarasını da geri yükler. Bu yüzden “kaldığı yerden devam” gerçekten kaldığı yerden devamdır; ağırlıkları elle yükleyip yeni bir eğitim başlatmakla aynı şey değildir.

İki önemli not: en az bir epoch tamamlanmış olması gerekir (aksi halde geri yüklenecek durum yoktur) ve eğitim argümanları checkpoint içindeki kayıttan okunur — epochs gibi değerleri yeniden vermek beklediğiniz etkiyi yapmaz.

Sık düşülen tuzaklar

1. Eğitim çıktısını doğrudan Drive’a yazmak. project=/content/drive/... vermek her epoch sonunda ağ üzerinden yazma demek. Yavaş olmasının yanında, tam yazma anında kopma olursa last.pt bozuk kalabilir. Yerele yazın, periyodik kopyalayın.

2. Numaralı checkpoint almamak. Varsayılan save_period=-1 ile elinizde yalnızca sürekli üzerine yazılan last.pt olur. Bozulursa geri dönecek nokta kalmaz.

3. Klasör isminin sessizce değişmesi. exist_ok=False varsayılanı yüzünden ikinci koşu yolo11m_12802 gibi yeni bir klasöre gider. Sonra “hangi last.pt?” sorusu başlar. Klasör adını bilinçli yönetin.

4. GPU’yu suçlamak. Epoch süresi beklediğinizden uzunsa önce veri hattına bakın. Düşük GPU kullanımı, kart yavaş demek değil; veri yeterince hızlı gelmiyor demektir.

5. Boşta koşan güçlü kart. Eğitim bittiği halde açık kalan A100 oturumu hesaplama birimlerini sessizce tüketir. Eğitimin sonuna oturumu kapatan bir adım ekleyin.

6. Sekmeyi kapatabileceğini varsaymak. Arka planda yürütme yalnızca Pro+ ile ve yeterli hesaplama birimiyle mümkün. Diğer durumlarda tarayıcı açık kalmalı.

Pratik özet

1. Veriyi Drive’da zip olarak tutun, oturum başında /content’e açın. Drive’dan doğrudan okumak veri hattını darboğaza çevirir.

2. cache='disk' ile başlayın. cache=True en hızlısıdır ama büyük görüntülerde oturumu düşürür.

3. save_period ayarlayın. Tek bir last.pt’ye güvenmek, tek kopyalı yedeğe güvenmektir.

4. Çıktıyı yerele yazıp Drive’a periyodik kopyalayın. Kayıp süresini siz belirleyin — bizde 10 dakika.

5. Kopmada last.pt + resume=True. Optimizer ve zamanlayıcı durumu da geri gelir; argümanları yeniden vermeye çalışmayın.

6. Uzun koşuyu başlatmadan önce 2-3 epoch’luk prova yapın. Yol hataları, sınıf sayısı uyuşmazlıkları ve bellek sorunları ilk epoch’ta görünür — üçüncü saatte değil.

  • Google Colab
  • YOLO
  • eğitim
  • checkpoint
  • GPU

Zor bir mühendislik probleminiz mi var?

Yapılabilir mi, ne kadar sürer, nasıl kurulur: konuşarak başlayalım.

Projenizi Konuşalım