一亩三分地

 找回密码 注册账号

扫描二维码登录本站

微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
查看: 8870|回复: 40
收起左侧

业界中DS/ML应用上线Implementation的问题

  [复制链接] |只看干货 |机器学习
我的人缘0

分享帖子到朋友圈
chztony | 显示全部楼层 |阅读模式
本楼: 👍   83% (5)
 
 
16% (1)   👎
全局: 👍   86% (1871)
 
 
13% (297)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
大家好,相信大部分DS在工作中用Python或者Spark做Demo肯定已经不成问题,但是当大家完成Proof Concept真要上线这个功能或者go into production的时候是怎样处理的? 例如产品或者网站压根不是Python写的(也许可以接驳一个Python Script), Sklearn或者R的ML包有Feature或者数量的限制,真会从0开始做轮子,例如用Java重新写吗?这样成本也太大了,而且估计也没很多人敢打包票这些包比开源的ML包稳定吧。那么在DS不完全熟悉产品或者网站的开发框架的时候,大家都是怎么上线一个功能的呢?


举个具体栗子,例如我们网站需要上线一个像亚麻那样的推荐系统小框,由于是抱着有好过没有的原则,主流用数据调包做Demo的效果已经足够了,也可以用Spark ML Lib中的recommender 包做,同时也觉得调包比我们自己写成本低很多,能更快上线,但是当调了包做完Demo做完PPT老板excited之后该如何具体和SDE沟通? 这里除了DS变成Product Manager之外感觉很难参与具体的Coding开发,毕竟前端有自己的开发体系,也牵涉Data Warehouse那边的数据调用,要求DS自己一个实现Production Code基本是不太可能的(可能是我太渣),同时这事牵涉三个组也不是自己能完全指挥,大家有没有一些建议或者经验可以分享呢?

谢谢!

评分

参与人数 18大米 +46 收起 理由
tomato217 + 3 赞一个!
Linxing + 1 给你点个赞!
zhuangvandy + 3 给你点个赞!
pokeritney + 1 给你点个赞!
haibianren17 + 1 给你点个赞!
SpencerSi + 1 很有用的信息!
dahlia77 + 1 很有用的信息!
leoleleo + 2 这种帖子竟然会有人踩?什么鬼
shiruizhi + 3 很有用的信息!
balalalala + 1 赞一个

查看全部评分

我的人缘0

升级   0%

zxiaoc 2018-8-18 03:39:44 | 显示全部楼层
本楼: 👍   100% (27)
 
 
0% (0)   👎
全局: 👍   100% (42)
 
 
0% (0)    👎
正在做的工作内容就是exactly做这个: 将data scientist做好的model launch to production, 简单答一波~
在目前所在公司的流程是
0. Data scientist训练测试完的model保存成一个可以直接call的格式
1. 将feature pulling的过程改写成一个脚本,一般sql pull from database
2. 将feature cleaning的过程写成一个脚本,一般python or R
3. 将prediction过程写成脚本
(1-3 原文件都是data scientist写的,这里主要是模块化,参数化,改进效率etc,写成可以直接call and run的project)
4. 再写脚本将以上步骤串起来,配置好database、server、各种环境参数、中间步骤的input output各种路径连接
5. docker封装
6. 写Airflow scheduling the whole process, 写monitor监测每个步骤

评分

参与人数 21大米 +84 收起 理由
tomato217 + 3 谢谢分享!
zhuangvandy + 3 给你点个赞!
SpencerSi + 1 很有用的信息!
不要拧巴 + 2 很有用的信息!
K叔 + 10 很有用的信息!
dukegj + 3 谢谢分享!
lx70716 + 3 给你点个赞!
balalalala + 1 赞一个
shiningBloom + 1 赞一个
ironhead + 1 赞一个

查看全部评分

回复

使用道具 举报

我的人缘0

升级   60.86%

fatfatjoey 2019-1-7 08:49:08 | 显示全部楼层
本楼: 👍   100% (2)
 
 
0% (0)   👎
全局: 👍   91% (2005)
 
 
8% (189)    👎
eleven 发表于 2019-1-7 05:24
我知道的也有限,但是最近公司的一次做法是我把算法写成python package, SDE组用AWS lambda包装起来。至于 ...

合理不合理主要看具体要求,lambda可以很容易的封装出一个web api,不用devops来设置服务器,而且是按request数量计费的,traffic不大的情况下非常非常便宜。但是像我之前提到的情况,如果traffic大,模型要经常更新,管理逻辑复杂,就不是很适用。不过serverless架构是很火的话题,不知道过几年会不会更成熟。

评分

参与人数 1大米 +3 收起 理由
Naruremodopris + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   60.86%

fatfatjoey 2019-1-6 05:42:22 | 显示全部楼层
本楼: 👍   100% (2)
 
 
0% (0)   👎
全局: 👍   91% (2005)
 
 
8% (189)    👎
本帖最后由 shuyangsheng 于 2019-1-7 08:57 编辑

Serving的问题,特别是有Real-Time要求的,其实是一个很复杂的问题,确实不应该由一个DS来牵头做,还是需要更多人来一起设计。需要考虑的因素有:

1. online和offline的feature extraction步骤显然不同,一个是raw request,一个通常是大致处理过的table。这就需要设计一个interface来保证一致性。这里编程语言通常不是问题所在,要保证数据类型一致性的话可以用protobuf。

2. model evaluation需要一致性,最好是同一个模型同样的运行环境,所以micro service架构配上docker会很方便。

3. performance tracking,a/b testing,model refresh这些最好都要有,只有offline simulation的ML system是不完整的。

4. model多的话自动refresh可能需要上airflow这样的scheduling system,而且自动refresh没有人手动把关,那么模型质量的验证也要很完备。模型表现最好有实时监控。模型文件refresh的时候不能覆盖旧版本,一旦出现问题可以快速rollback。

如果model数量不多,可以考虑一下托管平台,像H2O或者Sagemaker之类的产品。


评分

参与人数 7大米 +48 收起 理由
Naruremodopris + 3 给你点个赞!
tomato217 + 3 很有用的信息!
yingcheng + 5 很有用的信息!
china_rmb_cs + 1 赞一个
Steinhafen + 3 给你点个赞!
admin + 30
PandasGZ + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   43.63%

chuck1212 2017-7-6 05:07:52 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   98% (74)
 
 
1% (1)    👎
如果是Java可以考虑Spark Java
回复

使用道具 举报

我的人缘0
 楼主| chztony 2017-7-6 09:42:26 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   86% (1871)
 
 
13% (297)    👎
chuck1212 发表于 2017-7-6 05:07
如果是Java可以考虑Spark Java

能直接调用还好,可能还需要Kafka 之类的Streaming
回复

使用道具 举报

我的人缘0

升级   92.5%

dukecat0613 2017-7-6 09:55:54 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   91% (65)
 
 
8% (6)    👎
chztony 发表于 2017-7-6 09:42
能直接调用还好,可能还需要Kafka 之类的Streaming

我觉得这是个好问题, Kafka 也有scala java的api. 集成在SparkStreaming里面. 我觉得当公司内部prototype 自己的model的时候, 比如recommendation system, spark mllib 是Matrix Factorization, 可是公司内想实现 user-based item-based的时候 是完全自己写嘛, 还是怎么样
回复

使用道具 举报

我的人缘0

升级   68.88%

刷题 2017-7-6 14:49:04 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   91% (7509)
 
 
8% (703)    👎
以前在国内一个公司就是ml部分封装成一个独立的service,http请求。 这样会慢但是当时ml不在核心功能上就这么将就了
回复

使用道具 举报

我的人缘0
 楼主| chztony 2017-7-6 23:00:27 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   86% (1871)
 
 
13% (297)    👎
dukecat0613 发表于 2017-7-6 09:55
我觉得这是个好问题, Kafka 也有scala java的api. 集成在SparkStreaming里面. 我觉得当公司内部prototype ...

对啊就是发现Spark ML Lib只有ALS这个推荐算法,要是没有的话估要自己写了,其他Classif之类的算法还可以用H2O之类的算法包补充,但是如果自己写算法真是感觉大工程啊还得各种Unit Test, Pressure Test,感觉得整个开发部门同意SDE一起搞才行,而且要是SDE自己不懂那沟通成本也很大
回复

使用道具 举报

我的人缘0
 楼主| chztony 2017-7-6 23:02:27 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   86% (1871)
 
 
13% (297)    👎
刷题 发表于 2017-7-6 14:49
以前在国内一个公司就是ml部分封装成一个独立的service,http请求。 这样会慢但是当时ml不在核心功能上就这 ...

感觉是个方法,也可以和SDE们商量一下
回复

使用道具 举报

我的人缘0

升级   92.5%

dukecat0613 2017-7-7 00:26:37 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   91% (65)
 
 
8% (6)    👎
chztony 发表于 2017-7-6 23:02
感觉是个方法,也可以和SDE们商量一下

我觉得这是个好方法, 后端python 建立server端 然后rpc 通信, 但是如果数据量大起来的话, 还是得建分布式
回复

使用道具 举报

我的人缘0

升级   1.9%

glennq 2017-7-7 14:54:28 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (37)
 
 
2% (1)    👎
我觉得这个问题的关键在于,你们公司需要
1. 一套ML模型专用的请求返回接口
2. 定下一套常用的ML框架,在这基础上把model training,model save,然后读取训练完的model并以上述接口封装,这整个流程给标准化

有了这一套东西之后不管你是service还是in memory都可以适用

另外说到python train,java serve,这并不是不可能,比如tensorflow有现成的java api,直接读取你用python train的model都行

即便是scikit-learn,或者任意python代码,理论上你也可以把cpython通过JNI给embed到JVM里面去,就看你们的SDE怎么搞了

评分

参与人数 4大米 +39 收起 理由
tomato217 + 3 很有用的信息!
yingcheng + 5 很有用的信息!
china_rmb_cs + 1 赞一个
admin + 30

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://tools.1point3acres.com/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

Some icons made by Freepik from flaticon.com

快速回复 返回顶部 返回列表