AMD GPU (AMD Vega 20、Tensorflow 2.2.0、Keras 2.4.3) で Keras ラッパーを使用して単純な順次 Tensorflow モデルを実行しようとしていますが、適合しようとすると奇妙な問題に直面します:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 15 values, but the requested shape has 15976860750
入力テンソルの値の数としてバッチサイズを取っているようで、どういうわけか「要求された形状」のサイズが爆発します。モデルの定義は次のとおりです。
def create_model(optimizer='rmsprop', init='glorot_uniform'):
# create model
model = Sequential()
model.add(Dense(12,input_dim=8, kernel_initializer=init, activation='relu'))
model.add(Dense(8, kernel_initializer=init, activation='relu'))
model.add(Dense(1, kernel_initializer=init, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy'])
return model
modelClf = KerasClassifier(build_fn=create_model, verbose=1, batch_size=15, epochs=9)
GPU がインストールされていないマシンで、CPU だけで実行すると、まったく同じモデルが正常に動作します。また、NVidia GPU (Tensorflow 1.15.3 および Keras 2.3.1) を実行している別のマシンの CUDA11 実装でもうまく機能します。
AMD GPU が存在する場合にのみ、この後の Tensorflow バージョンで GPU メモリ サイズを入力サイズとして要求する理由がわかりません。ここで構成を間違えている可能性があることは明らかですか?
編集:以下のコメントに応えて、「要求されたサイズ」を微調整した後、考えられているようにGPUメモリではなくバッチサイズに何らかの形で関連しています(数値は明らかに偶然の一致でした-バッチサイズを10に設定すると「要求されたサイズ」が得られます1092616192 の代わりに)。入力は、各行に 8 つの値を持つ単純なパンダ データフレームです (input_dim で定義されており、前述のように、これは他のマシンの同じ実装でも問題なく機能します)。
エラーは、トレーニングのための fit() の呼び出し中に発生します。出力から、このようにクラッシュする前に約 5 エポックを取得することがわかります。トレースバックは次のとおりです(「〜/ rocm/keras」は、この環境用にインストールされたpythonパッケージがある場所へのパスです)
File "~/rocm/keras/tensorflow/python/keras/wrappers/scikit_learn.py", line 223, in fit
return super(KerasClassifier, self).fit(x, y, **kwargs)
File "~/rocm/keras/tensorflow/python/keras/wrappers/scikit_learn.py", line 166, in fit
history = self.model.fit(x, y, **fit_args)
File "~/rocm/keras/tensorflow/python/keras/engine/training.py", line 66, in _method_wr apper
return method(self, *args, **kwargs)
File "~/rocm/keras/tensorflow/python/keras/engine/training.py", line 848, in fit
tmp_logs = train_function(iterator)
File "~/rocm/keras/tensorflow/python/eager/def_function.py", line 580, in __call__
result = self._call(*args, **kwds)
File "~/rocm/keras/tensorflow/python/eager/def_function.py", line 611, in _call
return self._stateless_fn(*args, **kwds) # pylint: disable=not-callable
File "~/rocm/keras/tensorflow/python/eager/function.py", line 2420, in __call__
return graph_function._filtered_call(args, kwargs) # pylint: disable=protected-access
File "~/rocm/keras/tensorflow/python/eager/function.py", line 1665, in _filtered_call
self.captured_inputs)
File "~/rocm/keras/tensorflow/python/eager/function.py", line 1746, in _call_flat
ctx, args, cancellation_manager=cancellation_manager))
File "~/rocm/keras/tensorflow/python/eager/function.py", line 598, in call
ctx=ctx)
File "~/rocm/keras/tensorflow/python/eager/execute.py", line 60, in quick_execute
inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 10 values, but the requested shape has 1092616192