代码详解:构建一个简单的Keras+深度学习REST API(13)

# classify the input image and then initialize the list

# of predictions to return to the client

preds = model.predict(image)

results = imagenet_utils.decode_predictions(preds)

data["predictions"
 = [
...

该代码意味着每次有新请求时都将加载模型 。 这太低效了 , 甚至会导致系统内存耗尽 。

如果尝试运行上面的代码 , 你会注意到API将运行得特别慢(尤其是在模型很大的情况下)——这是由于为每个新请求加载模型的I/O和CPU操作开销太大所致 。

为了了解服务器内存是如何因此轻易崩溃的 , 假设服务器同时收到N个传入请求 。 同样 , 这意味着将有N个模型同时加载到内存中 。 同时 , 如果模型较大(如ResNet) , 那么存储在RAM中的N个模型副本很容易就会耗尽系统内存 。

所以 , 除非你有一个非这样做不可的理由 , 否则请尽量避免为每个新的传入请求加载一个新的模型实例 。

推荐阅读