背景介绍

  在一些业务场景,我们需要把离线训练好的模型以微服务部署线上,如果是简单的使用sklearn pipeline,可以保存为XML格式的pmml供Java调用,
在配置为4 core,8G内存的docker环境可以提供8K左右的高并发,并且这种docker可以快速大规模部署到PaaS云平台,优势相当明显,实际情况是
算法人员会基于Python自定义lambda处理数据,而自定义的lambda是很难保存到pmml中的,并且很多公司的算法团队也是要求基于Python技术栈是

落地的。

踩坑过程

  算法人员序列化训练好的模型无外乎pkl 、h5,就以pkl为例,pkl中包含了数据的预处理、模型的pipeline等,把这种模型包装为微服务也不难,可以

选择flak+gevent+Gunicorn,前两个可以包装标准的API接口,Gunicorn是web容器可以提供异步高并发服务,在测试服务器(8 cores, 16G内存)QPS达到

10K +,性能还是可以的。

  1)docker部署踩坑,Python工程根目录下自己编写docker file,可以从开源镜像库选择自己的一款,Dockerfile里面命令行类似shell,比如下图:

Python以来的相关模块、工程路径等要加上,接着docker build构建镜像,把镜像push到公司镜像库,在PaaS云平台pull镜像,整个流程不是太复杂,

但是压测的时候,几秒之内会发现docker的使用情况是CPU全部满负载100%,内存倒是50%左右,其实模型就是简单的分类算法,这其中的瓶颈主要是

两方面的:

  a)docker内部的Python应用与外部的通信链路比较耗时,优化代价较高,需要专业的docker专家来优化;

  b)Python应用本身既要有多线程、多协程的开销,是消耗CPU资源的,并且分类算法本身就是很耗费CPU资源的,属于计算密集型,所以docker的CPU很快

满负载,除非把算法的计算单独剥离出去;

至此基于docker的Python微服务行不通。

  2)直接把Python应用部署物理机,gunicorn作为web容器可以设置IP、port、工作进程数、最大并发数等等,可以参照gunicorn docs,具体策略有:

  a)application部署采用多进程部署,代码内部采用多线程、协程处理请求响应;

  b)对于一些重复的请求参数,引入LRU cache既降低了延时也避免了重复调用;

  c)由于Python是动态解释语言,可以想办法做到静态语言的水平,借助cython可以把Python工程编译为C文件及.so(linux)文件,这时可以把请求响应

延时进一步降低30%以上;

  延伸:YouTube在使用Python构建高并发服务值得借鉴,使用Python做到快速灵活的开发和部署,使用psyco,一种Python到C的动态编译器,该编译器

使用一种JIT编译方法来优化内层循环,再将内容完整的Python对象缓存起来,整体达到很高的性能。

refer:

https://gunicorn.org/#docs

https://www.cnblogs.com/break-python/p/5459169.html

https://docs.docker.com/engine/reference/builder/#format

https://blog.csdn.net/wo18237095579/article/details/80540571

http://www.browserwork.com/architecture/youtube-architecture

转载于:https://www.cnblogs.com/John-Geek-2018/p/9941943.html

基于Python技术栈的算法落地踩坑相关推荐

  1. Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战

    版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.QQ邮箱地址:1120746 ...

  2. 【学无止境】Python技术栈起步之路 (01)—— 需求与环境

    Python技术栈起步之路 (01)-- 需求与环境 1 技术之前的事情 2 找到适合自己的技术栈 3 初步上手 3.1 安装Python3及pipenv 3.2 安装vscode和python相关插 ...

  3. python技术栈全景图_程序员之数据分析Python技术栈

    程序员之数据分析Python技术栈 Python是一种非常流行的脚本语言,其还提供了一个科学技术栈,可以进行快捷方便的数据分析,本系列文章将聚焦在如何使用基于Python的技术栈来构建数据分析的工具集 ...

  4. python实现高校教务管理系统_基于Python技术的教务管理系统的研究与开发

    龙源期刊网 http://www.qikan.com.cn 基于 Python 技术的教务管理系统的研究与 开发 作者:戴雯惠 来源:<价值工程> 2018 年第 27 期 摘要:随着教育 ...

  5. 基于python技术的自动化运维是干嘛的_如何理解Python与自动化运维的关系。?

    一个是目的,一个是工具的关系 为了达到某个目的(比如这里的运维自动化),我们可以用不同的手段或者工具(比如这里的python) 如果你特别擅长Java.PHP,也可以用Java\PHP来开发相关运维自 ...

  6. 基于vue技术栈制作自己的简历网站问题总结篇(入门vue基础项目)

    前言 目前在学习vue技术栈的同时接触到了很多以前没用过的各种工具(如webpack,npm,git等等),配合着vue全家桶里的一些东西做了一个基于vue的个人简历网站(虽然用vue框架搭简历网站优 ...

  7. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

  8. Kubernetes 基于 EFK 技术栈的日志收集实践

    之前写过一篇文章介绍了容器环境下日志管理的原理机制:从 Docker 到 Kubernetes 日志管理机制详解,文章内容偏理论,本文在该理论的支撑下具体实践 Kubernetes 下基于 EFK 技 ...

  9. 【PLA】基于Python实现的线性代数算法库之斯密特正交化

    [PLA]基于Python实现的线性代数算法库之斯密特正交化 算法包下载链接:https://download.csdn.net/download/qq_42629529/79481514 from ...

最新文章

  1. Techshack Weekly 第 0002 期
  2. c c++常用算法手册(第3版_嵌入式软件开发必看书籍推荐(C/C++/linux/软件)
  3. gram矩阵_ZEN-基于N-gram的中文Encoder
  4. spring boot 注解_Spring-Boot项目中如何配置redis注解缓存?
  5. Linux中检查本地系统上的开放端口列表的方法
  6. python强大体现在哪些方面-什么python的if语句?它主要应用在哪些方面?
  7. c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
  8. django定义模型类-14
  9. Leetcode题库 15.三数之和_0(双指针 C实现)
  10. 东京组委会“友情提示”:奖牌是用回收金属做的不能吃!别咬了
  11. 指针用完了怎么办_墙体里水管漏水怎么办?瞧瞧这个,轻松搞定,滴水不漏
  12. COJ 1079 树上的查询 (离线LCA)
  13. 安装PhantomJS
  14. 【Julia】 解决安装包下载慢的问题
  15. win7系统服务器修改文件权限,Windows7系统修改Trustedinstaller权限文件的方法
  16. Excel:筛选后序号自动排序。
  17. 基于wincap写抓包程序
  18. Mac-连接Windows远程桌面
  19. 使用vs建立web网站及IIS
  20. 独立显卡 台式计算机,解决方案:如何在台式计算机上安装独立显卡

热门文章

  1. 陝西省2021年高考成绩查询,2021年高考陕西省各批次录取分数线预测,你会感到意外吗?...
  2. 深入理解 Java 锁与线程阻塞
  3. 在Google的GPU上永远免费训练您的机器学习模型
  4. 一篇不一样的docker原理解析 提高篇
  5. 学习 Android O HIDL
  6. Ransomware Cerber Analysis
  7. mysql读写分离有用吗_MySQL的使用中实现读写分离的教程
  8. 朱棣文在哈佛大学毕业典礼上的演讲
  9. BZOJ 5267 特工 (类FWT)
  10. Luogu P5564 [Celeste-B]Say Goodbye (多项式、FFT、Burnside引理、组合计数)