查看原文
其他

从4个月到7天,Netflix开源Python框架Metaflow有何提升性能的魔法?

CSDN App AI科技大本营 2020-02-17


作者 | Rupert Thomas
译者 | 凯隐
编辑 | Jane
出品 | AI科技大本营(ID:rgznai100)
 
【导语】Metaflow 是由 Netflix 开发,用在数据科学领域的 Python框架,于 2019 年 12 月正式对外开源。据介绍,Metaflow 解决了数据科学家在可扩展性和版本控制方面面临的一些挑战,通过有向图中的一系列步骤来构建处理流水线。Metaflow 可以更容易地将本地流水线搬移到云资源上运行(不过目前仅支持 AWS 云)。每个步骤都在又向流程图中的独立节点上运行,并且具有唯一的依赖关系,Metaflow 则负责处理节点之间的内部通信。今天,我们就为大家介绍 Metaflow,希望对大家有所帮助。 
              
Metaflow 简介
 
Metaflow 在  Netflix 内部已经被用于各个方面的机器学习任务,例如优化广告投递,视频编码等。Metaflow 其出现是为了提高模型的部署效率,让整个模型开发,部署,更新流程更加系统化,从而提高部署速度。
 
对数据科学家而言,他们更关注的是模型设计和特征工程等直接与模型性能相关的工作,并且希望能快速部署模型从而验证模型是否能在生产环境中有所提升,而不想在诸如环境依赖,版本控制,数据仓库管理等基本流程任务中浪费精力,Metaflow 的出现就是为了解决这个问题。
              
Metaflow 可以简化甚至自动完成底层任务,让数据科学家能更轻松,快速地部署模型,从而集中精力来提升模型性能以及在实际工程环境中的表现,提高生产力。因此,这是一款以人为中心的框架。近期,Netflix 也透露,Metaflow 已经将 Netflix 机器学习项目部署时间的中位数从四个月缩短到了仅仅7天。接下来将主要介绍Metaflow的工作原理和特点。
 
基本工作原理
              
如上图,可以用一个有向非循环图来表示工作流程,图中的每个节点都表示一个流程中的一个阶段,这些阶段可以是任意的 Python 代码,在上图的例子中,Metaflow 并行的训练两个不同版本的模型,并选择性能最好的那个。这是一种单机并行处理的方式,类似于 Python 中的  multiprocessing 包。如果要部署到云资源,只需要额外指定一个命令行参数 --with batch,即可告知 Metaflow 在云上运行代码。目前只支持亚马逊的 Web 服务器,不过应该很快就会支持更多云服务器。
 
每个阶段的末尾都有一个检查点,可以在以后的阶段中从任意检查点恢复执行,以帮助调试。但是你不能逐行检查您的代码。
 
版本控制
 
机器学习的版本控制颇具挑战性,因此 Metaflow 也特别照顾了这个问题。每个步骤的运行代码和数据都是散列(hash)的,图中每个节点的执行都被记录下来,并且超参数设置和运行结果都被存储:

from metaflow import FlowSpec, Parameter, step
class FitModelFlow(FlowSpec): alpha = Parameter('alpha', help='Learning rate', default=0.01)
@step def start(self): print('alpha is %f' % self.alpha) self.data = load_data() self.next(self.fit)
@step def fit(self): self.model = fit(self.data) self.next(self.end)
@step def end(self): print(f'Results for LR={self.alpha}: {eval(self.model)}')
if __name__ == '__main__': FitModelFlow()

超参数的设置可以很容易地通过命令行参数来完成:
python metaflow_parameter.py run --alpha 0.001

元数据以 JSON 格式存储在文件系统中,可以访问存储在任何阶段的变量数据,也可以很容易地获取最后一次成功运行的结果。
run = Flow(flow_name).latest_successful_run

依赖管理
 
Metaflow 还提供了依赖管理机制,可以在图阶段或节点阶段通过装饰器来指定,并且可以指定特定的Python版本或特定的包:
from metaflow import FlowSpec, step, conda, conda_base
@conda_base(python='3.6.5')class FitModelFlow(FlowSpec):
@step def start(self): self.data = load_data()
@conda(libraries={"scikit-learn": "0.19.2"}) @step def fit(self): from sklearn import svm self.model = svm.LinearSVC( ... )
# ...

例如可以从命令行运行时指定 conda 环境标志:
python metaflow_conda.py --environment=conda run

开始使用Metaflow
 
可以通过pip命令来安装metaflow:
pip install metaflow

更多教程和详细介绍可以参考官方文档:
https://docs.metaflow.org/getting-started/tutorials
 
原文链接:
https://towardsdatascience.com/what-exactly-is-metaflow-c007e5b75b5


(*本文为AI科技大本营翻译文章,转载请微信联系 1092722531)



精彩推荐



2020年,由 CSDN 主办的「Python开发者日」活动(Python Day)正式启动。我们将与 PyCon 官方授权的 PyCon中国社区合作,联手顶尖企业、行业与技术专家,通过精彩的技术干货内容、有趣多元化的活动等诸多体验,共同为中国 IT 技术开发者搭建专业、开放的技术交流与成长的家园。未来,我们和中国万千开发者一起分享技术、践行技术,铸就中国原创技术力量。


【Python Day——北京站】现已正式启动,「新春早鸟票」火热开抢!2020年,我们还将在全国多个城市举办巡回活动,敬请期待!
活动咨询,可扫描下方二维码加入官方交流群~

CSDN「Python Day」咨询群 🔽
来~一起聊聊Python

如果群满100人,无法自动进入,可添加会议小助手微信:婷婷,151 0101 4297(电话同微信)



推荐阅读


    你点的每个“在看”,我都认真当成了AI

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存