查看: 16582| 回复: 46
跳转到指定楼层
上一主题 下一主题
收起左侧

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

 
全局:

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

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

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 给你点个赞!

查看全部评分


上一篇:想用机器学习做一个录取率评估程序,征求意见
下一篇:CS phD方向讨论之-- system or AI?

本帖被以下淘专辑推荐:

  • · DS|主题: 224, 订阅: 39
  • · ML八股文|主题: 18, 订阅: 10
推荐
zxiaoc 2018-8-18 03:39:44 | 只看该作者
全局:
正在做的工作内容就是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 很有用的信息!

查看全部评分

回复

使用道具 举报

推荐
fatfatjoey 2019-1-7 08:49:08 | 只看该作者
全局:
eleven 发表于 2019-1-7 05:24
我知道的也有限,但是最近公司的一次做法是我把算法写成python package, SDE组用AWS lambda包装起来。至于 ...

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

评分

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

查看全部评分

回复

使用道具 举报

推荐
fatfatjoey 2019-1-6 05:42:22 | 只看该作者
全局:
本帖最后由 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 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
chuck1212 2017-7-6 05:07:52 | 只看该作者
全局:
如果是Java可以考虑Spark Java
回复

使用道具 举报

🔗
 楼主| chztony 2017-7-6 09:42:26 | 只看该作者
全局:
chuck1212 发表于 2017-7-6 05:07
如果是Java可以考虑Spark Java

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

使用道具 举报

🔗
dukecat0613 2017-7-6 09:55:54 | 只看该作者
全局:
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的时候 是完全自己写嘛, 还是怎么样
回复

使用道具 举报

🔗
刷题 2017-7-6 14:49:04 | 只看该作者
全局:
以前在国内一个公司就是ml部分封装成一个独立的service,http请求。 这样会慢但是当时ml不在核心功能上就这么将就了
回复

使用道具 举报

本楼:
全局:
关注关注
回复

使用道具 举报

🔗
 楼主| chztony 2017-7-6 23:00:27 | 只看该作者
全局:
dukecat0613 发表于 2017-7-6 09:55
我觉得这是个好问题, Kafka 也有scala java的api. 集成在SparkStreaming里面. 我觉得当公司内部prototype ...

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

使用道具 举报

🔗
 楼主| chztony 2017-7-6 23:02:27 | 只看该作者
全局:
刷题 发表于 2017-7-6 14:49
以前在国内一个公司就是ml部分封装成一个独立的service,http请求。 这样会慢但是当时ml不在核心功能上就这 ...

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

使用道具 举报

🔗
dukecat0613 2017-7-7 00:26:37 | 只看该作者
全局:
chztony 发表于 2017-7-6 23:02
感觉是个方法,也可以和SDE们商量一下

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

使用道具 举报

🔗
glennq 2017-7-7 14:54:28 | 只看该作者
全局:
我觉得这个问题的关键在于,你们公司需要
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

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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