是的,在 keras 中它可以无缝运行。使用 tensorflow back 的 Keras 将检查 GPU 是否可用,如果可用,模型将在 GPU 上进行训练。
在加载模型时进行推理时类似,如果没有可用的 GPU,它将使用 CPU。
使用 google colab 进行实验
让我们使用“GPU”运行时启动 google 协作
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import tensorflow as tf
tf.compat.v1.debugging.set_log_device_placement(True)
print(tf.config.list_physical_devices('GPU'))
model = Sequential()
model.add(Dense(1024, input_dim=8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
X = np.random.randn(10,8)
y = np.random.randn(10)
model.fit(X, y, epochs=2)
model.save("model.h5")
输出
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
Epoch 1/2
1/1 [==============================] - 0s 1ms/step - loss: 0.6570 - accuracy: 0.0000e+00
Epoch 2/2
1/1 [==============================] - 0s 983us/step - loss: 0.6242 - accuracy: 0.0000e+00
<tensorflow.python.keras.callbacks.History at 0x7fcad09366a0>
所以在这种情况下,模型是在可用的 GPU 上训练的。您可以使用命令!nvidia-smi 看到它占用了 GPU。我们已将模型保存为model.h5。让我们下载它并制作一个本地副本
现在让我们将 colab 的运行时间更改为“CPU”。让我们将我们的model.h5 上传到协作组并进行预测。
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import tensorflow as tf
from keras.models import load_model
tf.compat.v1.debugging.set_log_device_placement(True)
print(tf.config.list_physical_devices('GPU'))
model = load_model('model.h5')
model.predict(X)
输出:
[]
array([[0.4464949 ],
[0.43229908],
[0.49823508],
[0.4367126 ],
[0.47648385],
[0.48096564],
[0.47863394],
[0.5031184 ],
[0.45698297],
[0.45885688]], dtype=float32)
正如您所见,没有可用的 GPU,模型已加载,预测在 CPU 上运行。
Keras 无缝。但在 pytorch 中,我们必须手动将模型从 GPU 移动到 CPU。