Tensorflow usa GPU de tarjeta gráfica para entrenar tutorial detallado

Se explica detalladamente el comando nvidia-smi de la GPU para ver la información de la tarjeta gráfica:

cmd: nvidia-smi

Explicación detallada del comando nvidia-smi de GPU - Se busca programador

editar

GPU: el número de GPU en esta máquina (cuando hay varias tarjetas gráficas, el número comienza desde 0). El número de GPU en la imagen es: 0

Ventilador: velocidad del ventilador (0%-100%), N/A significa que no hay ventilador

Nombre: tipo de GPU, el tipo de GPU en la imagen es: Tesla T4

Temp: la temperatura de la GPU (la temperatura de la GPU es demasiado alta hará que la frecuencia de la GPU disminuya)

Perf: el estado de rendimiento de la GPU, de P0 (rendimiento máximo) a P12 (rendimiento mínimo), en el gráfico: P0

Persistencia-M: El estado del modo de persistencia. Aunque el modo de persistencia consume mucha energía, lleva menos tiempo iniciar una nueva aplicación de GPU. La figura muestra: apagado

Pwr: Uso/Cap: pantalla de consumo de energía, Uso: cuánto se usa, cuánto es el Cap total

Bus-Id: pantalla relacionada con el bus GPU, dominio: bus: dispositivo.función

Disp.A: Pantalla activa, que indica si la pantalla de la GPU está inicializada

Uso de memoria: uso de memoria

GPU-Util volátil: uso de GPU

ECC no corregido: Acerca de ECC, ya sea para habilitar la tecnología de verificación y corrección de errores, 0/deshabilitado, 1/habilitado

Compute M: modo de computación, 0/DEFAULT, 1/EXCLUSIVE_PROCESS, 2/PROHIBITED

Procesos: muestra el uso de la memoria de video, el número de proceso y la GPU ocupada por cada proceso

Actualizar el estado de la memoria cada pocos segundos: nvidia-smi -l segundos

Actualizar el estado de la GPU cada dos segundos: nvidia-smi -l 2

Uso de la tarjeta gráfica Tensorflow

1. Usar directamente

Este método básicamente ocupará la memoria de video restante de todas las tarjetas gráficas en la máquina actual. Tenga en cuenta que es la memoria de video restante de todas las tarjetas gráficas en la máquina. Por lo tanto, es posible que el programa solo necesite una tarjeta gráfica, pero el programa es tan abrumador que no necesito otras tarjetas gráficas, o no puedo usar tantas tarjetas gráficas, pero solo quiero ocuparlas.

with tf.compat.v1.Session() as sess:
        # 输入图片为256x256,2个分类
        shape, classes = (224, 224, 3), 20
        # 调用keras的ResNet50模型
        model = keras.applications.resnet50.ResNet50(input_shape = shape, weights=None, classes=classes)
        model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

        # 训练模型 categorical_crossentropy sparse_categorical_crossentropy
        # training = model.fit(train_x, train_y, epochs=50, batch_size=10)
        model.fit(train_x,train_y,validation_data=(test_x, test_y), epochs=20, batch_size=6,verbose=2)
        # # 把训练好的模型保存到文件
        model.save('resnet_model_dog_n_face.h5')

2. Uso de la relación de distribución

La diferencia entre este método y el método de uso directo anterior es que no ocupo toda la memoria de video, por ejemplo, si escribo de esta manera, ocuparé el 60% de cada tarjeta de video.

from tensorflow.compat.v1 import ConfigProto# tf 2.x的写法
config =ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.6
with tf.compat.v1.Session(config=config) as sess:
     model = keras.applications.resnet50.ResNet50(input_shape = shape, weights=None, classes=classes)

3. Aplicación y uso dinámico

Este método se aplica dinámicamente a la memoria de video, solo se aplica a la memoria y no libera memoria. Y si el programa de otra persona ocupa todas las tarjetas gráficas restantes, se informará un error.

Los tres métodos anteriores deben seleccionarse de acuerdo con la escena.

El primer tipo ocupa toda la memoria, por lo que mientras el tamaño del modelo no exceda el tamaño de la memoria de video, no habrá fragmentación de la memoria de video ni afectará el rendimiento informático. Se puede decir que la configuración es adecuada para implementar aplicaciones.

El segundo y tercer tipo son adecuados para varias personas que usan un servidor, pero el segundo tipo tiene un desperdicio de memoria de video, y el tercer tipo evita el desperdicio de memoria de video en un programa determinado, pero es muy fácil que el programa falle. para solicitar la memoria Circunstancias que dan lugar a accidentes.

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.compat.v1.InteractiveSession(config=config)
with tf.compat.v1.Session(config=config) as sess:
     model

4 Especificar la GPU

Cuando ejecuta tensorflow en un servidor con múltiples GPU, si usa la programación de Python, puede especificar la GPU, el código es el siguiente:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

Con un ejemplo completo: clasificación de imágenes resnet50:

editar

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.compat.v1.InteractiveSession(config=config)
with tf.compat.v1.Session(config=config) as sess:
        # 输入图片为256x256,2个分类
        shape, classes = (224, 224, 3), 20
        # 调用keras的ResNet50模型
        model = keras.applications.resnet50.ResNet50(input_shape = shape, weights=None, classes=classes)
        model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

        # 训练模型 categorical_crossentropy sparse_categorical_crossentropy
        # training = model.fit(train_x, train_y, epochs=50, batch_size=10)
        model.fit(train_x,train_y,validation_data=(test_x, test_y), epochs=20, batch_size=6,verbose=2)
        # # 把训练好的模型保存到文件
        model.save('resnet_model_dog_n_face.h5')

Supongo que te gusta

Origin blog.csdn.net/qiqi_ai_/article/details/128950971
Recomendado
Clasificación