TensorFlow GPU Bellek Hatası: Çözümler ve Kodlar
TensorFlow modelini GPU'da eğitirken `ResourceExhaustedError` veya `CUDA out of memory` hatası almak çok yaygın. Grafik kartının VRAM'ı modelin ağırlıkları, aktivasyonlar ve gradyanlar için yeterli olmadığında bu olur. Üç pratik yöntemle çöz.
Birinci yol: GPU bellek büyümesini etkinleştir
TensorFlow varsayılan olarak GPU belleğinin tamamını hemen ayırır. Bunu dinamik hale getirerek sadece ihtiyaç duyduğun kadar kullanabilirsin.
1import tensorflow as tf23# GPU bellek büyümesini aç4gpus = tf.config.list_physical_devices('GPU')5for gpu in gpus:6tf.config.experimental.set_memory_growth(gpu, True)78print(f"GPU bulundu: {len(gpus)}")Bu kodu eğitim scriptinin en başına ekle. Çıktı: `GPU bulundu: 1` (veya senin GPU sayın).
İkinci yol: Batch size'ı küçült
Batch size bellek kullanımının ana faktörü. Eğer hala hata alırsan batch size'ı yarıya indir.
1import tensorflow as tf2from tensorflow import keras34# Bellek büyümesini etkinleştir5gpus = tf.config.list_physical_devices('GPU')6for gpu in gpus:7tf.config.experimental.set_memory_growth(gpu, True)89# Veri seti10(x_train, y_train), _ = keras.datasets.cifar10.load_data()1112# Batch size'ı küçük tut13batch_size = 32 # 64 yerine 321415model = keras.Sequential([16keras.layers.Conv2D(32, 3, activation='relu', input_shape=(32, 32, 3)),17keras.layers.MaxPooling2D(),18keras.layers.Flatten(),19keras.layers.Dense(10, activation='softmax')20])2122model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])23model.fit(x_train, y_train, batch_size=batch_size, epochs=2)Beklenen çıktı: Model başarıyla eğitilir, hiç bellek hatası olmaz.
Üçüncü yol: Mixed precision eğitim
Float32 yerine Float16 kullanarak bellek tüketimini yarıya indir. Bu hem hızlandırır hem bellek tasarrufu sağlar.
1import tensorflow as tf2from tensorflow import keras34# GPU ayarları5gpus = tf.config.list_physical_devices('GPU')6for gpu in gpus:7tf.config.experimental.set_memory_growth(gpu, True)89# Mixed precision policy10policy = keras.mixed_precision.Policy('mixed_float16')11keras.mixed_precision.set_global_policy(policy)1213# Model (son katman float32 olmalı)14model = keras.Sequential([15keras.layers.Dense(256, activation='relu', input_shape=(784,)),16keras.layers.Dense(128, activation='relu'),17keras.layers.Dense(10, dtype='float32', activation='softmax')18])1920model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')21print(f"Compute dtype: {policy.compute_dtype}")22print(f"Variable dtype: {policy.variable_dtype}")Çıktı: `Compute dtype: float16` ve `Variable dtype: float32`.
Hata devam ederse, GPU'nuzun VRAM'ını kontrol edin (`nvidia-smi`). RTX 3060 (12GB) ile batch_size=32 ve memory_growth aktif kalırsa çoğu model çalışır. Daha düşük VRAM varsa batch_size'ı 16 veya 8'e indir. Modeli CPU'da test etmek de hata kaynağını bulmanın iyi yolu.
0 yorum