Berbagi teknologi

Panduan praktis untuk mengelola memori GPU TensorFlow 2 secara efisien

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Kata pengantar

Saat menggunakan TensorFlow 2 untuk pelatihan atau prediksi, pengelolaan memori GPU yang tepat sangatlah penting. Kegagalan dalam mengelola dan melepaskan memori GPU secara efektif dapat menyebabkan kebocoran memori, yang dapat memengaruhi tugas komputasi selanjutnya. Dalam artikel ini, kita akan mempelajari beberapa cara untuk mengosongkan memori GPU secara efektif, baik secara konvensional maupun ketika suatu tugas terpaksa dihentikan.

1. Metode manajemen memori video konvensional
1. Setel ulang gambar default

Setiap kali Anda menjalankan grafik TensorFlow baru, dengan menelepon tf.keras.backend.clear_session() untuk menghapus grafik TensorFlow saat ini dan mengosongkan memori.

import tensorflow as tf
tf.keras.backend.clear_session()
2. Batasi penggunaan memori GPU

Dengan mengatur kebijakan penggunaan memori video, Anda dapat mencegah penggunaan terlalu banyak memori video GPU.

  • Tingkatkan penggunaan memori video sesuai permintaan

    import tensorflow as tf
    
    gpus = tf.config.experimental.list_physical_devices('GPU')
    if gpus:
        try:
            for gpu in gpus:
                tf.config.experimental.set_memory_growth(gpu, True)
        except RuntimeError as e:
            print(e)
    
  • Batasi penggunaan memori video

    import tensorflow as tf
    
    gpus = tf.config.experimental.list_physical_devices('GPU')
    if gpus:
        try:
            tf.config.experimental.set_virtual_device_configuration(
                gpus[0],
                [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)])  # 限制为 4096 MB
        except RuntimeError as e:
            print(e)
    
3. Lepaskan memori GPU secara manual

Setelah pelatihan atau prediksi, gunakan gc Modul dan fungsi manajemen memori TensorFlow melepaskan memori GPU secara manual.

import tensorflow as tf
import gc

tf.keras.backend.clear_session()
gc.collect()
4. Gunakan with konteks manajemen pernyataan

Digunakan dalam kode pelatihan atau prediksi with pernyataan untuk secara otomatis mengelola rilis sumber daya.

import tensorflow as tf

def train_model():
    with tf.device('/GPU:0'):
        model = tf.keras.models.Sequential([
            tf.keras.layers.Dense(64, activation='relu', input_shape=(32,)),
            tf.keras.layers.Dense(10, activation='softmax')
        ])
        model.compile(optimizer='adam', loss='categorical_crossentropy')
        # 假设 X_train 和 y_train 是训练数据
        model.fit(X_train, y_train, epochs=10)

train_model()
2. Manajemen memori video saat menghentikan tugas secara paksa

Terkadang kita perlu menghentikan tugas TensorFlow secara paksa untuk melepaskan memori GPU.Dalam hal ini, gunakan Pythonmultiprocessing modul atauos Modul dapat mengelola sumber daya secara efisien.

1. Gunakan multiprocessing modul

Dengan menjalankan tugas TensorFlow dalam proses terpisah, seluruh proses dapat dihentikan untuk mengosongkan memori video bila diperlukan.

import multiprocessing as mp
import tensorflow as tf
import time

def train_model():
    model = tf.keras.models.Sequential([
        tf.keras.layers.Dense(64, activation='relu', input_shape=(32,)),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='categorical_crossentropy')
    # 假设 X_train 和 y_train 是训练数据
    model.fit(X_train, y_train, epochs=10)

if __name__ == '__main__':
    p = mp.Process(target=train_model)
    p.start()
    time.sleep(60)  # 例如,等待60秒
    p.terminate()
    p.join()  # 等待进程完全终止
2. Gunakan os modul menghentikan proses

Dengan mendapatkan ID proses dan menggunakan os Modul yang dapat menghentikan proses TensorFlow secara paksa.

import os
import signal
import tensorflow as tf
import multiprocessing as mp

def train_model():
    pid = os.getpid()
    with open('pid.txt', 'w') as f:
        f.write(str(pid))

    model = tf.keras.models.Sequential([
        tf.keras.layers.Dense(64, activation='relu', input_shape=(32,)),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='categorical_crossentropy')
    # 假设 X_train 和 y_train 是训练数据
    model.fit(X_train, y_train, epochs=10)

if __name__ == '__main__':
    p = mp.Process(target=train_model)
    p.start()
    time.sleep(60)  # 例如,等待60秒
    with open('pid.txt', 'r') as f:
        pid = int(f.read())
    os.kill(pid, signal.SIGKILL)
    p.join()

Meringkaskan

Saat menggunakan TensorFlow 2 untuk pelatihan atau prediksi, sangat penting untuk mengelola dan melepaskan memori GPU dengan benar.Dengan mengatur ulang peta default, membatasi penggunaan memori video, melepaskan memori video secara manual, dan menggunakanwith Konteks manajemen pernyataan dapat secara efektif menghindari masalah kebocoran memori.Saat Anda perlu menghentikan tugas secara paksa, gunakanmultiprocessing modul danos Modul ini dapat memastikan bahwa memori video dilepaskan tepat waktu. Melalui metode ini, pemanfaatan sumber daya GPU secara efisien dapat dipastikan dan stabilitas serta kinerja tugas komputasi dapat ditingkatkan.