3

64gb ram CPU これは、クラッシュを試みるときに作業を実行しようとしているトレーニングコードですRTX 2070

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.7
tf.keras.backend.set_session(tf.Session(config=config))

model = efn.EfficientNetB7()
model.summary()

# create new output layer
output_layer = Dense(5, activation='sigmoid', name="retrain_output")(model.get_layer('top_dropout').output)
new_model = Model(model.input, output=output_layer)
new_model.summary()
# lock previous weights

for i, l in enumerate(new_model.layers):
    if i < 228:
        l.trainable = False
# lock probs weights

new_model.compile(loss='mean_squared_error', optimizer='adam')

batch_size = 5
samples_per_epoch = 30
epochs = 20

# generate train data
train_datagen = ImageDataGenerator(
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    validation_split=0)

train_generator = train_datagen.flow_from_directory(
    train_data_input_folder,
    target_size=(input_dim, input_dim),
    batch_size=batch_size,
    class_mode='categorical',
    seed=2019,
    subset='training')

validation_generator = train_datagen.flow_from_directory(
    validation_data_input_folder,
    target_size=(input_dim, input_dim),
    batch_size=batch_size,
    class_mode='categorical',
    seed=2019,
    subset='validation')

new_model.fit_generator(
    train_generator,
    samples_per_epoch=samples_per_epoch,
    epochs=epochs,
    validation_steps=20,
    validation_data=validation_generator,
    nb_worker=24)

new_model.save(model_output_path)



exception:

2019-11-17 08:52:52.903583: I tensorflow/stream_executor/dso_loader.cc:152] ローカルで CUDA ライブラリ libcublas.so.10.0 を正常に開きました .... ... 2019-11-17 08:53:24.713020: I tensorflow/core/common_runtime/bfc_allocator.cc:641] 合計 2.84GiB のサイズ 27724800 の 110 チャンク合計 222.10MiB 2019-11-17 08:53:24.713027: I tensorflow/core/common_runtime/bfc_allocator.cc:641] サイズ 54000128 の 23 チャンク合計 1.16GiB 2019-11core-17 08:53:24.713031: I tensorflow/ /common_runtime/bfc_allocator.cc:641] 合計 70.34MiB のサイズ 73760000 の 1 つのチャンクGiB 2019-11-17 08:53:24.713040:I tensorflow/core/common_runtime/bfc_allocator.cc:647] 統計: 制限: 5856749158 InUse: 5848048896 MaxInUse: 5848061440 NumAllocs: 6140 MaxAllocSize: 3259170816

2019-11-17 08:53:24.713214: W tensorflow/core/common_runtime/bfc_allocator.cc:271] ****************************** ****************************************************** ************************ 2019-11-17 08:53:24.713232: W tensorflow/core/framework/op_kernel.cc:1401] OP_REQUIRES が失敗しましたcwise_ops_common.cc:70 で: リソースが使い果たされました: アロケーター GPU_0_bfc によって /job:localhost/replica:0/task:0/device:GPU:0 で shape[5,1344,38,38] と型 float でテンソルを割り当てるときの OOMトレースバック (最新の呼び出しが最後): ファイル "/home/naort/Desktop/deep-learning-data-prepare-tools/EfficientNet-Transfer-Learning-Boiler-Plate/model_retrain.py"、76 行目、nb_worker=24 内)ファイル "/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py"、91 行目、ラッパー return func(*args, **kwargs) ファイル "/usr/local/lib/ python3.6/dist-packages/keras/engine/training.py", line 1732, in fit_generator initial_epoch=initial_epoch) ファイル "/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py", 220 行目、fit_generator reset_metrics=False) ファイル "/usr/local/lib/python3.6/dist-packages/keras/engine/training.py"、1514 行目、train_on_batch の出力 = self.train_function(ins) ファイル " /home/naort/.local/lib/python3.6/site-packages/tensorflow/python/keras/backend.py"、3076 行目、run_metadata=self.run_metadata の呼び出し中) ファイル "/home/naort/.local/ lib/python3.6/site-packages/tensorflow/python/client/session.py"、1439 行目、run_metadata_ptr 呼び出し中) ファイル "/home/naort/.local/lib/python3.6/site-packages/tensorflow/ python/framework/errors_impl.py"、528 行目、出口 c_api.TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.ResourceExhaustedError: shape[5,1344,38,38] でテンソルを割り当て、/job:localhost/replica:0/task:0/device:GPU:0 でタイプ float の場合の OOMアロケーター GPU_0_bfc [[{{node training/Adam/gradients/AddN_387-0-TransposeNHWCToNCHW-LayoutOptimizer}}]] ヒント: OOM が発生したときに割り当てられたテンソルのリストを表示する場合は、現在の割り当て情報について RunOptions に report_tensor_allocations_upon_oom を追加します。現在の割り当て情報については、report_tensor_allocations_upon_oom を RunOptions に追加します。現在の割り当て情報については、report_tensor_allocations_upon_oom を RunOptions に追加します。

[[{{node Mean}}]] ヒント: OOM が発生したときに割り当てられたテンソルのリストを表示したい場合は、現在の割り当て情報を得るために Report_tensor_allocations_upon_oom を RunOptions に追加します。

4

1 に答える 1

4

EfficientNet モデルは、比較対象の ResNe(X)t モデルよりもパラメーター数が少ないにもかかわらず、かなりの量の GPU メモリを消費します。表示されているのは、システム (64GB) ではなく、GPU (RTX 2070 の場合は 8GB) のメモリ不足エラーです。

特にフル解像度の B7 モデルは、単一の RTX 2070 カードでのトレーニングに使用したいものを超えています. たくさんのレイヤーをフリーズしても。

モデルを FP16 で実行すると、RTX カードの TensorCores も活用されます。https://medium.com/@noel_kennedy/how-to-use-half-precision-float16-when-training-on-rtx-cards-with-tensorflow-keras-d4033d59f9e4から、これを試してください:

import keras.backend as K

dtype='float16'
K.set_floatx(dtype)

# default is 1e-7 which is too small for float16.  Without adjusting the epsilon, we will get NaN predictions because of divide by zero problems
K.set_epsilon(1e-4) 
于 2019-11-23T23:46:57.153 に答える