在生产中拥有一个模型需要考虑很多事情。您要问的主要是:
功能性
为了让您的模型从 Web 服务器用于生产,您可以托管一个 API 来公开您的模型。
例如,您有一个 Flask Python 服务器正在运行,您在其中将端点(例如GET http://<your_host>/prediction/image.jpg
)映射到predict()
模型的函数。
然后你提到让它成为一个持续的在线学习者。如果数据被注释(即标记),大多数分类器将通过更多数据得到改进,但为此,您需要手动注释它们并将它们重新输入到您的系统并重新训练您的模型。如果您可以自信地自动标记新数据,则无需改进系统。所以,我想说,需要一些体力劳动(贴标签),但其余的可以自动化。您可以将更多端点添加到您的 Web 服务器,您可以在其中上传更多训练数据,系统会重新训练您的模型、处理版本控制并重新加载最新的训练模型。
建筑学
贮存
你提到pickle
文件,你担心它们在磁盘上太大了。但是,如今,使用云解决方案,这通常不是问题。
您可以使用 Blob-Storage 解决方案,而且价格通常非常低(例如https://azure.microsoft.com/en-us/services/storage/blobs/将花费0.002欧元/GB/月)。
当然,您可以在其中保留许多泡菜以进行版本控制(推荐)。但是,如果您想最小化成本,您只能存储最新型号。
此外,如果您的 API 经常使用,您不希望每次都重新加载您的模型。最好让它始终在 RAM 中可用。同样,在云中托管具有大量 RAM 的服务器并不昂贵。
布局
您可以拥有的架构布局是:
+----------------+ +--------------+
| | | |
| ADMIN SERVER | -------> | BLOB STORAGE |
| | | |
+----------------+ +--------------+
| ^
| |
| +-----------+-----------+
| | |
| +------------------+ +----------------+
| | | | |
| | PREDICT SERVER | | PREDICT SERVER |
| | | | |
| +------------------+ +----------------+
| ^ ^
| | |
| +------------------+
| | | | |
+--------------> | | QUEUE | |
| | | |
+------------------+
在这里,ADMIN SERVER
负责重新训练模型和将新模型上传到存储和发布作业到队列的所有功能,以便PREDICT SERVERS
从中获取最新模型BLOB STORAGE
。
BLOB STORAGE
持有模型。
PREDICT SERVER
s 暴露了你的功能predict()
,所以你的模型可以被其他系统访问。在这里,模型存储在 RAM 中以便更快地进行预测。根据您的模型的使用情况,您可能希望拥有≥1 _用于预测的服务器。由于您的模型保存在本地硬盘上BLOB STORAGE
而不是本地硬盘上,因此这是可能的,它们都可以获取最新模型。
这QUEUE
就是如何ADMIN SERVER
与所有PREDICT SERVER
s 通信。