基于Python技术栈的算法落地踩坑

背景介绍

  在一些业务场景,我们需要把离线训练好的模型以微服务部署线上,如果是简单的使用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

时间: 2024-10-07 16:48:00

基于Python技术栈的算法落地踩坑的相关文章

程序员之数据分析Python技术栈

引言: Python是一种非常流行的脚本语言,其还提供了一个科学技术栈,可以进行快捷方便的数据分析,本系列文章将聚焦在如何使用基于Python的技术栈来构建数据分析的工具集合.工欲善其事,必先利其器,让我们来看看这些工具吧. 0. 数据分析 以及机器学习 信息时代唯一不变的就是变化. 随着信息化技术的推广和应用,大数据技术的大规模应用,于是乎数据分析.数据挖掘.机器学习甚至于从前高大上的人工智能(AI)已经开始频繁出现在各个场合,这一切昭示着数据时代的来临. 对于程序猿们来说,除了写代码,实现特

基于Python的函数回归算法验证

看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归回归方法就是寻找方差的最小值y = kx + bxi, yiy-yi = kxi+b-yi方差为∑(kxi + b - yi )^2f = k^2∑xi^2 + b^2 + ∑yi^2 +2kb∑xi - 2k∑xi*yi - 2yib求极值需要对其求微分,因为是二元函数,因此使用全微分公式,其极值点应该在两个元的偏微分都为0处δf/δk = 2k∑(xi^2

复杂网络社区结构发现算法-基于python networkx clique渗透算法

前言 最近因为业务数据分析的需要,看社区发现相关的东东稍多些,刚刚写过一篇基于igraph C library的方法(http://km.oa.com/group/22323/articles/show/240332),然后想用kclique衍生的clique渗透算法时发现igraph C library 并未提供现成的api,对于懒人来说,这很不幸.既而发现networkx这个python包中是有的(且是唯一一个用于社区发现的算法),故而折腾折腾,记录下处理过程,供同道朋友们参考吧. 准备工作

python技术栈之环境问题

问题1: pip install xxx  总是出现timeout类型的错误 解决方案: 方法一: 安装包时,添加镜像配置,通过国内镜像地址进行相应包的安装,如 pip install xxx   -i http://pypi.douban.com/simple --trusted-host pypi.douban.com //============================================================= 问题2: pip install MYSQL-

pycharm+PyQt5+python最新开发环境配置,踩坑过程详解

Python 3.6https://www.python.org/downloads/windows/========================================PyQt5 pip3 install  PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装图形界面开发工具Qt Designerpip3 install  PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simpl

python 3.6.1 安装scrapy踩坑之旅

系统环境:win10 64位系统安装 python基础环境配置不做过多的介绍 window环境安装scrapy需要依赖pywin32,下载对应python版本的exe文件执行安装,下载的pywin32版本不对安装会失败 下载依赖地址:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/ 下载依赖安装完成后试下pip install scrapy,很显然失败了 发现网友的解决方案: 地址:https://blog.c

python 正则括号的使用及踩坑

直接先上结论: 若匹配规则里有1个括号------返回的是括号所匹配到的结果, 若匹配规则里有多个括号------返回多个括号分别匹配到的结果, 若匹配规则里没有括号------就返回整条语句所匹配到的结果. 实际上是由其并不是python特有的,这是 正则 所特有的 , 任何一门高级语言使用正则都满足这个特点: 有括号时只能匹配到括号中的内容, 没有括号[相当于在最外层增加了一个括号]全部匹配. 原文地址:https://www.cnblogs.com/liangmingshen/p/1032

Python logging模块日志存储位置踩坑

问题描述 项目过程中写了一个小模块,设计到了日志存储的问题,结果发现了个小问题. 代码结构如下: db.py run.py 其中db.py是操作数据库抽象出来的一个类,run.py是业务逻辑代码.两个文件中都有使用Python自带的logging模块,来记录日志.其中前者将日志存入到db_xxx.log下,后者存入run_xxx.log下. 两者logging相关代码为: # db.py import logging import time dt = time.time() logging.ba

python文件夹中文件读取踩坑

Q: 进行数据集图片预处理时,初始命名如下图(Fig1左),发现读取文件时,读取的结构并非如所设想的那样顺序读取 Fig 1 A: pyhton读取文件的时候,按照文件名的ascii码中的顺序进行逐位排序,于是编写以下代码,更改命名规则,程序如下 1 # -*- coding:utf-8 -*- 2 # ------------------------------ 3 # @Time :2019/5/26 10:55 4 # @Author :jonie 5 # @Email :[email p