Netflix 使用 Papermill 的实践

查看原文

本文介绍了 Netflix 如何使用 Papermill 管理 .ipynb.

Jupyter Notebook 本质上就是一个 JSON 文档,并自带了简易的接口可以运行它自己。它真正运行的地方是 jupyter-kernels。ipynb 的缺点是常常变化,cell output 跟代码不完全一一对应,不好测试,没有可以配置运行上下文的设施,以及你需要运行一个 Notebook server。

Papermill 的出现改进了很多这些问题。Papermill 做的事情是: 接受一个 ipynb path 和一些参数,然后运行出来一个 output ipynb,所有东西都在这个 output ipynb 里面。伪代码如下:

import papermill as pm

pm.execute_notebook(
   'path/to/input.ipynb',
   'path/to/output.ipynb',
   parameters = dict(alpha=0.6, ratio=0.1)
)

除了可以通过 python 调用,也可以通过 CLI 或者自建 Pipeline。Papermill 的好处是:源 ipynb 不会因为运行而被改变,不管是源还是目标 ipynb 都是不可变的。目标 ipynb 里面有代码,输出,日志,就是一个快照。

基于 Commuter, 还可以将 ipynb 存储到 S3 里面去。

由于 Papermill 负责了所有的运行,你也不需要再去运行一个 Notebook server 了。如果某个 ipynb 太复杂了,可以继续做优化,把它放到本地仓库去维护,打成一个包部署。这意味着 ipynb 也可以被版本管理了。

Netflix 使用 airflow 定时调度所有 papermill 任务,但是 papermill 并不局限谁来调度,看 papermill 的文档,要跟 celery, apscheduler 什么的集成也很简单。

一些写 ipynb 的简易:少写分支,尽可能线性,复杂的东西写到库里去,尽可能简短和简单。