Успешно обучен Model.fit, но появляется сообщение об ошибке ресурса при запуске model.predict в коллаборации - PullRequest
0 голосов
/ 08 мая 2020

Я использую Google Collab для обучения 3D-автоэнкодеру. Я успешно обучил модель с помощью функции model.fit со следующей моделью model.summary ():

Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 128, 128, 128, 1)  0         
_________________________________________________________________
conv3d_1 (Conv3D)            (None, 64, 64, 64, 64)    1792      
_________________________________________________________________
conv3d_2 (Conv3D)            (None, 32, 32, 32, 128)   221312    
_________________________________________________________________
conv3d_3 (Conv3D)            (None, 16, 16, 16, 256)   884992    
_________________________________________________________________
conv3d_4 (Conv3D)            (None, 8, 8, 8, 256)      1769728   
_________________________________________________________________
conv3d_5 (Conv3D)            (None, 8, 8, 8, 256)      1769728   
_________________________________________________________________
up_sampling3d_1 (UpSampling3 (None, 16, 16, 16, 256)   0         
_________________________________________________________________
conv3d_6 (Conv3D)            (None, 16, 16, 16, 256)   1769728   
_________________________________________________________________
up_sampling3d_2 (UpSampling3 (None, 32, 32, 32, 256)   0         
_________________________________________________________________
conv3d_7 (Conv3D)            (None, 32, 32, 32, 128)   884864    
_________________________________________________________________
up_sampling3d_3 (UpSampling3 (None, 64, 64, 64, 128)   0         
_________________________________________________________________
conv3d_8 (Conv3D)            (None, 64, 64, 64, 64)    221248    
_________________________________________________________________
up_sampling3d_4 (UpSampling3 (None, 128, 128, 128, 64) 0         
_________________________________________________________________
conv3d_9 (Conv3D)            (None, 128, 128, 128, 1)  1729      
=================================================================
Total params: 7,525,121
Trainable params: 7,525,121
Non-trainable params: 0

обучение прошло успешно, и я сохранил модель как model.h5

я запустил отдельная ячейка в том же проекте для тестирования модели со следующим кодом:

from tensorflow.keras.models import load_model
from keras import backend as K
K.clear_session()
model = load_model('model.h5')
x_test = np.load('test.npy')
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 128, 128, 128, 1))
x_test = np.reshape(x_test, (len(x_test), 128, 128, 128, 1))
decoded_imgs = model.predict(x_test)

, и он предлагает мне следующий код ошибки:

ResourceExhaustedError: OOM при выделении тензора с shape [25,128,128,64,64] и типа float on / job: localhost / replica: 0 / task: 0 / device: GPU: 0 от распределителя GPU_0_bfc [[node model_1 / up_sampling3d_4 / concat_1 (определено в: 47)]] Подсказка : Если вы хотите видеть список выделенных тензоров, когда происходит OOM, добавьте report_tensor_allocations_upon_oom в RunOptions для получения информации о текущем распределении. [Op: __ inference_predict_function_63155] Стек вызовов функции: pred_function

почему возможно, что я могу обучать модель с той же системой, но не могу запустить model.predict ?! у кого-нибудь есть ответ, пожалуйста :(

Я использую googla colab pro со следующими характеристиками графического процессора:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  Off  | 00000000:00:04.0 Off |                    0 |
| N/A   62C    P0    48W / 250W |  15559MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

1 Ответ

0 голосов
/ 08 мая 2020

Ошибки Tensorflow могут быть очень болезненными для анализа. Я вижу их все время, но понятия не имею, что это значит. У меня есть пара предложений, которые стоит попробовать. Во-первых, посмотрите, действительно ли это ошибка ресурса, и используйте только один пример для прогнозирования.

x_test_single = np.reshape(x_test[0], (1, 128, 128, 128, 1))
model.predict(x_test_single)

Во-вторых, обычно, если вы хотите протестировать весь набор, вы должны использовать model.evaluate, посмотрите, если это работает. Наконец, если у вас действительно есть проблемы с распределением ресурсов (то есть вы не можете вместить столько, сколько хотите, в память графического процессора, поскольку у вас есть 3D-наборы, которые требуют сверхмощной памяти), тогда используйте API данных и создавайте наборы данных и подавайте их партиями. .

Еще одно предложение, я считаю, что лучше использовать формат Tenorflow SavedModel, если вы сохраняете. https://www.tensorflow.org/tutorials/keras/save_and_load#savedmodel_format

...