web-dev-qa-db-ja.com

「ResourceExhaustedError:テンソル割り当て時のOOM」の修正方法

複数の入力を持つモデルを作成したい。だから、私はこのようなモデルを構築しようとします。

# define two sets of inputs
inputA = Input(shape=(32,64,1))
inputB = Input(shape=(32,1024))

# CNN
x = layers.Conv2D(32, kernel_size = (3, 3), activation = 'relu')(inputA)
x = layers.Conv2D(32, (3,3), activation='relu')(x)
x = layers.MaxPooling2D(pool_size=(2,2))(x)
x = layers.Dropout(0.2)(x)
x = layers.Flatten()(x)
x = layers.Dense(500, activation = 'relu')(x)
x = layers.Dropout(0.5)(x)
x = layers.Dense(500, activation='relu')(x)
x = Model(inputs=inputA, outputs=x)

# DNN
y = layers.Flatten()(inputB)
y = Dense(64, activation="relu")(y)
y = Dense(250, activation="relu")(y)
y = Dense(500, activation="relu")(y)
y = Model(inputs=inputB, outputs=y)

# Combine the output of the two models
combined = concatenate([x.output, y.output])


# combined outputs
z = Dense(300, activation="relu")(combined)
z = Dense(100, activation="relu")(combined)
z = Dense(1, activation="softmax")(combined)

model = Model(inputs=[x.input, y.input], outputs=z)

model.summary()

opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss = 'sparse_categorical_crossentropy', optimizer = opt,
    metrics = ['accuracy'])

そして要約:_

しかし、このモデルをトレーニングしようとすると、

history = model.fit([trainimage, train_product_embd],train_label,
    validation_data=([validimage,valid_product_embd],valid_label), epochs=10, 
    steps_per_Epoch=100, validation_steps=10)

問題が発生する....:

-------------------------------------------------- ------------------------- ResourceExhaustedErrorトレースバック(最新の呼び出しは最後)()----> 1履歴= model.fit([trainimage 、train_product_embd]、train_label、validation_data =([validimage、valid_product_embd]、valid_label)、epochs = 10、steps_per_Epoch = 100、validation_steps = 10)

4フレーム/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py in call(self、* args、** kwargs)1470 ret = tf_session。 TF_SessionRunCallable(self._session._session、1471
self._handle、args、-> 1472 run_metadata_ptr)1473 if run_metadata:1474
proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

ResourceExhaustedError:2つのルートエラーが見つかりました。 (0)リソースが使い果たされました:shape [800000,32,30,62]でテンソルを割り当て、アロケーターGPU_0_bfc [[{{によって/ job:localhost/replica:0/task:0/device:GPU:0にfloatと入力すると、OOM node conv2d_1/convolution}}]]ヒント:OOMが発生したときに割り当てられたテンソルのリストを表示したい場合は、現在の割り当て情報のrunOptionsにreport_tensor_allocations_upon_oomを追加します。

[[metrics/acc/Mean_1/_185]]ヒント:OOMが発生したときに割り当てられたテンソルのリストを表示したい場合は、現在の割り当て情報のためにreport_tensor_allocations_upon_oomをRunOptionsに追加します。

(1)リソースが使い果たされました:shape [800000,32,30,62]でテンソルを割り当て、アロケーターGPU_0_bfcによって/ job:localhost/replica:0/task:0/device:GPU:0にfloatと入力すると、OOMが発生します
[[{{node conv2d_1/convolution}}]]ヒント:OOMが発生したときに割り当てられたテンソルのリストを表示したい場合は、現在の割り当て情報のrunOptionsにreport_tensor_allocations_upon_oomを追加します。

成功した操作はありません。 0の派生エラーは無視されました。

読んでくれてありがとう、うまくいけば私を助けてくれます:)

2
Robert

私にも起こりました。

何らかの形の転移学習を使用して、トレーニング可能なパラメーターを減らしてみてください。最初のいくつかのレイヤーをフリーズして、バッチサイズを小さくしてみてください。

0
Debayan Mitra