ResourceExhaustedError:OOM 을 할당할 때 텐서 모양으로[32,32,239,239]고 float 형식

0

질문

내가 노력하고 다시 CNN 이미지 인식 모델에서 이 논문(model1) 를 사용하여 다른 이미지입니다. 그러나,피팅 모델에 반환하는 나에게 ResourceExhaustedError 에서 첫 번째 시대. 일괄 처리 크기는 이미 상당히 작은 그래서 나는 추측에 문제가 나의 모델을 정의하는 나에서 복사한다. 에 관한 조언을 변경하는 것으로 모델이 될 것입니다 감사합니다. 감사합니다!

#Load dataset
BATCH_SIZE = 32
IMG_SIZE = (244,244)
train_set = tf.keras.preprocessing.image_dataset_from_directory(
    main_dir, 
    shuffle = True,
    image_size = IMG_SIZE,
    batch_size = BATCH_SIZE)
val_set = tf.keras.preprocessing.image_dataset_from_directory(
    main_dir, 
    shuffle = True, 
    image_size = IMG_SIZE,
    batch_size = BATCH_SIZE)
class_names = train_set.class_names
print(class_names)

#Augment data by flipping image and random rotation
data_augmentation = tf.keras.Sequential([
    tf.keras.layers.experimental.preprocessing.RandomFlip('horizontal'),
    tf.keras.layers.experimental.preprocessing.RandomRotation(0.2),
])

#Model definition 
model = Sequential([
    data_augmentation,
    tf.keras.layers.experimental.preprocessing.Rescaling(1./255),
    Conv2D(filters=64,kernel_size=(4,4), activation='relu'),
    Conv2D(filters=32,kernel_size=(3,3), activation='relu'),
    AveragePooling2D(pool_size=(4,4)),

    Conv2D(filters=32,kernel_size=(3,3), activation='relu'),
    Conv2D(filters=32,kernel_size=(3,3), activation='relu'),
    Conv2D(filters=32,kernel_size=(3,3), activation='relu'),
    AveragePooling2D(pool_size=(2,2)),
    Flatten(),
    
    Dense(256, activation='relu'),
    Dense(256, activation='relu'),
    Dense(128, activation='relu'),
    Dense(128, activation='relu'),
    Dense(128, activation='tanh'),
    Dense(1, activation='softmax')

])

model.compile(optimizer='RMSprop',
              loss=keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=[keras.metrics.CategoricalAccuracy()])

history = model.fit(train_set,validation_data=val_set, epochs=150)

한 후에도 오류가 피팅 모델

ResourceExhaustedError:  OOM when allocating tensor with shape[32,32,239,239] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
     [[node gradient_tape/sequential_1/average_pooling2d/AvgPoolGrad (defined at <ipython-input-10-ef749d320491>:1) ]]

nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.91.03    Driver Version: 460.91.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce 940MX       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   46C    P0    N/A /  N/A |   1938MiB /  2004MiB |      2%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A       959      G   /usr/lib/xorg/Xorg                 97MiB |
|    0   N/A  N/A      1270      G   /usr/bin/gnome-shell               25MiB |
|    0   N/A  N/A      4635      G   /usr/lib/firefox/firefox          212MiB |
|    0   N/A  N/A      5843      C   /usr/bin/python3                 1595MiB |
+-----------------------------------------------------------------------------+

1

최고의 응답

0

오류가 발생하여 귀하의 GPU 를 실행하는 메모리가 부족합니다. 이 될 수 있었기 때문에 어느 1)당신이 로딩이 너무 많은 데이터당 epoch 도에 대한 귀하의 GPU,또는 2)만약 당신이 충분히 VRAM,다른 프로세스유 메모리 사이의 시대. 이 일이 일어날 수 있기 때문에 tensorflow 매장량의 100%VRAM 을 수 있습니다. 을 제한할 수 있습의 양 VRAM 예약을 그냥 무엇이 필요합니다.

import tensorflow as tf
for gpu in tf.config.list_physical_devices("GPU")
    tf.config.experimental.set_memory_growth(gpu, True)

편집:을 보고 그래픽 카드,저는 당신이 충분하지 않은 VRAM 배치의 크기와 입력 크기(그래서 문제 1)입니다. 당신이해야 낮은 당신의 배치 크기입니다.

2021-11-23 17:57:42

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................