【问题标题】:Can pre trained Keras model on GPU be used for predictions on a CPU only PC?GPU 上预训练的 Keras 模型能否用于仅 CPU 的 PC 上的预测?
【发布时间】:2021-10-29 18:55:03
【问题描述】:

我目前正在学习 Keras。我的问题是,如果我在 RTX Titan 等高端 GPU 上训练模型,我可以导出模型,将其加载到另一台低端机器上的新程序中,然后仅使用 CPU 进行预测。这可能吗?

理论上,我认为这就是机器学习的工作原理。该模型是在高端 GPU 上训练的,一旦导出,它就可以加载到任何机器上,无论它是否有 GPU,并且可以用来进行预测。

如果不是,那么机器学习模型是否部署在具有许多 GPU 的高端服务器上?

【问题讨论】:

  • 在高端机器上训练的模型可以毫无问题地用于低规格机器上的推理。

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

是的,在 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。

【讨论】:

  • 感谢您的回答!但是在使用 CPU 时是否会出现性能下降?
  • Huge :) 这就是我们使用专用 GPU 进行深度学习模型巨大的原因。但是,如果仅用于推理,请检查 CPU 的延迟。在某些用例中,CPU 上的推理时间是可以接受的(再次基于实际用例)
  • 这就解释了!谢谢
【解决方案2】:

是的,这是可能的。这是一个例子。 MobileNetv2 使用一堆 GPU 甚至 TPU 进行了训练,在这里我将加载预训练的权重并进行预测。请注意,此行将确保它使用的是 CPU 而不是 GPU:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

现在,如果您列出可用的 GPU,则没有:

print(tf.config.list_physical_devices('GPU'))
[]

这是MobileNetv2的完整示例:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
import tensorflow as tf
import numpy as np

model = tf.keras.applications.MobileNetV2(weights='imagenet')

random_input = np.random.rand(1, 224, 224, 3).astype(np.float32)

model(random_input)
<tf.Tensor: shape=(10,), dtype=float32, numpy=
array([9.0857502e-06, 1.7574477e-05, 1.1161536e-04, 8.0340644e-05,
       1.1069454e-03, 1.4179133e-04, 5.5307936e-04, 9.6242256e-06,
       3.0724725e-06, 4.4839562e-06], dtype=float32)>

【讨论】:

  • 知道了!谢谢!
猜你喜欢
  • 2019-08-11
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2023-03-11
  • 2023-03-13
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多