2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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()
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)
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()
with
Lausuntojen hallinnan kontekstiKä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()
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.
multiprocessing
moduuliSuorittamalla 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() # 等待进程完全终止
os
moduuli lopettaa prosessinHankimalla 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()
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ä.