Teknologian jakaminen

Käytännön opas TensorFlow 2 GPU -muistin tehokkaaseen hallintaan

2024-07-08

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

Esipuhe

Kun TensorFlow 2:ta käytetään harjoitteluun tai ennustamiseen, GPU-muistin asianmukainen hallinta on ratkaisevan tärkeää. Jos GPU-muistia ei hallita ja vapauta tehokkaasti, se voi johtaa muistivuotojin, mikä voi vaikuttaa myöhempään laskentaan. Tässä artikkelissa tutkimme useita tapoja vapauttaa tehokkaasti GPU-muistia sekä perinteisesti että silloin, kun tehtävä on pakko lopettaa.

1. Perinteiset videomuistin hallintamenetelmät
1. Palauta oletuskuva

Aina kun suoritat uuden TensorFlow-kaavion, soittamalla tf.keras.backend.clear_session() tyhjentääksesi nykyisen TensorFlow-kaavion ja vapauttaaksesi muistia.

import tensorflow as tf
tf.keras.backend.clear_session()
2. Rajoita GPU-muistin käyttöä

Asettamalla videomuistin käyttökäytännön voit estää GPU:n videomuistin liiallisen varauksen.

  • Kasvata videomuistin käyttöä tarpeen mukaan

    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)
    
  • Rajoita videomuistin käyttöä

    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. Vapauta GPU-muisti manuaalisesti

Käytä harjoituksen tai ennustamisen jälkeen gc Moduulit ja TensorFlow'n muistinhallintatoiminnot vapauttavat manuaalisesti GPU-muistia.

import tensorflow as tf
import gc

tf.keras.backend.clear_session()
gc.collect()
4. Käytä with Lausuntojen hallinnan konteksti

Käytetään harjoituksessa tai ennustekoodissa with lauseke hallita resurssien vapauttamista automaattisesti.

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. Videomuistin hallinta, kun tehtäviä lopetetaan väkisin

Joskus meidän on lopetettava TensorFlow-tehtävä väkisin GPU-muistin vapauttamiseksi.Käytä tässä tapauksessa Pythoniamultiprocessing moduuli taios Moduulit voivat hallita resursseja tehokkaasti.

1. Käytä multiprocessing moduuli

Suorittamalla TensorFlow-tehtäviä erillisissä prosesseissa koko prosessi voidaan pysäyttää videomuistin vapauttamiseksi tarvittaessa.

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. Käytä os moduuli lopettaa prosessin

Hankimalla prosessitunnuksen ja käyttämällä os Moduuli, joka voi lopettaa TensorFlow-prosessin väkisin.

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()

Tee yhteenveto

Kun TensorFlow 2:ta käytetään harjoitteluun tai ennustamiseen, on erittäin tärkeää hallita ja vapauttaa GPU-muisti oikein.Nollaamalla oletuskartan, rajoittamalla videomuistin käyttöä, vapauttamalla videomuistia manuaalisesti ja käyttämälläwith Lausuntojen hallintakonteksti voi tehokkaasti välttää muistivuoto-ongelmia.Kun sinun on keskeytettävä tehtävä väkisin, käytämultiprocessing moduulit jaos Moduuli voi varmistaa, että videomuisti vapautuu ajoissa. Näillä menetelmillä voidaan varmistaa GPU-resurssien tehokas käyttö ja parantaa laskentatehtävien vakautta ja suorituskykyä.