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