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 tf
2
3# 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)
7
8print(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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import tensorflow as tf
2from tensorflow import keras
3
4# Bellek büyümesini etkinleştir
5gpus = tf.config.list_physical_devices('GPU')
6for gpu in gpus:
7tf.config.experimental.set_memory_growth(gpu, True)
8
9# Veri seti
10(x_train, y_train), _ = keras.datasets.cifar10.load_data()
11
12# Batch size'ı küçük tut
13batch_size = 32 # 64 yerine 32
14
15model = 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])
21
22model.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 tf
2from tensorflow import keras
3
4# GPU ayarları
5gpus = tf.config.list_physical_devices('GPU')
6for gpu in gpus:
7tf.config.experimental.set_memory_growth(gpu, True)
8
9# Mixed precision policy
10policy = keras.mixed_precision.Policy('mixed_float16')
11keras.mixed_precision.set_global_policy(policy)
12
13# 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])
19
20model.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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz