如何实现机器学习Web服务化?实战分享吐血之路!
- 内容介绍
- 相关推荐
本文共计2289个文字,预计阅读时间需要10分钟。
背景:在公司内部,我负责协助研究室的伙伴搭建机器学习Web服务。
内容:研究室的小伙子提供一个机器学习本地接口,我则提供一个对外服务的HTTP接口。涉及人工智力和机器学习,使用Python。
背景在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口。
说起人工智能和机器学习,python是最擅长的,其以开发速度快,第三方库多而广受欢迎,以至于现在大多数机器学习算法都是用python编写。但是对于服务化来说,python有致命的问题:很难利用机器多核。由于一个python进程中全局只有一个解释器,故多线程是假的,多个线程只能使用一个核,要想充分利用多核就必须使用多进程。此外由于机器学习是CPU密集型,其对多核的需求更为强烈,故要想服务化必须多进程。但是机器学习服务有一个典型特征:服务初始化时,有一个非常大的数据模型要加载到内存,比如我现在要服务化的这个,模型加载到内存需要整整8G的内存,之后在模型上的分类、预测都是只读,没有写操作。所以在多进程基础上,也要考虑内存限制,如果每个进程都初始化自己的模型,那么内存使用量将随着进程数增加而成倍上涨,如何使得多个进程共享一个内存数据模型也是需要解决的问题,特别的如何在一个web服务上实现多进程共享大内存模型是一个棘手的问题。
首先,我们来看看如何进行web服务化呢?我使用python中广泛利用的web框架:Flask + gunicorn。Flask + gunicorn我这里面认为大伙都用过,所以我后面写的就省略些,主要精力放在遇到的问题和解决问题的过程。
本文共计2289个文字,预计阅读时间需要10分钟。
背景:在公司内部,我负责协助研究室的伙伴搭建机器学习Web服务。
内容:研究室的小伙子提供一个机器学习本地接口,我则提供一个对外服务的HTTP接口。涉及人工智力和机器学习,使用Python。
背景在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口。
说起人工智能和机器学习,python是最擅长的,其以开发速度快,第三方库多而广受欢迎,以至于现在大多数机器学习算法都是用python编写。但是对于服务化来说,python有致命的问题:很难利用机器多核。由于一个python进程中全局只有一个解释器,故多线程是假的,多个线程只能使用一个核,要想充分利用多核就必须使用多进程。此外由于机器学习是CPU密集型,其对多核的需求更为强烈,故要想服务化必须多进程。但是机器学习服务有一个典型特征:服务初始化时,有一个非常大的数据模型要加载到内存,比如我现在要服务化的这个,模型加载到内存需要整整8G的内存,之后在模型上的分类、预测都是只读,没有写操作。所以在多进程基础上,也要考虑内存限制,如果每个进程都初始化自己的模型,那么内存使用量将随着进程数增加而成倍上涨,如何使得多个进程共享一个内存数据模型也是需要解决的问题,特别的如何在一个web服务上实现多进程共享大内存模型是一个棘手的问题。
首先,我们来看看如何进行web服务化呢?我使用python中广泛利用的web框架:Flask + gunicorn。Flask + gunicorn我这里面认为大伙都用过,所以我后面写的就省略些,主要精力放在遇到的问题和解决问题的过程。

