  Computational notebooks (e.g., Jupyter, Google Colab) are widely used for
interactive data science and machine learning. In those frameworks, users can
start a session, then execute cells (i.e., a set of statements) to create
variables, train models, visualize results, etc. Unfortunately, existing
notebook systems do not offer live migration: when a notebook launches on a new
machine, it loses its state, preventing users from continuing their tasks from
where they had left off. This is because, unlike DBMS, the sessions directly
rely on underlying kernels (e.g., Python/R interpreters) without an additional
data management layer. Existing techniques for preserving states, such as
copying all variables or OS-level checkpointing, are unreliable (often fail),
inefficient, and platform-dependent. Also, re-running code from scratch can be
highly time-consuming. In this paper, we introduce a new notebook system,
ElasticNotebook, that offers live migration via checkpointing/restoration using
a novel mechanism that is reliable, efficient, and platform-independent.
Specifically, by observing all cell executions via transparent, lightweight
monitoring, ElasticNotebook can find a reliable and efficient way (i.e.,
replication plan) for reconstructing the original session state, considering
variable-cell dependencies, observed runtime, variable sizes, etc. To this end,
our new graph-based optimization problem finds how to reconstruct all variables
(efficiently) from a subset of variables that can be transferred across
machines. We show that ElasticNotebook reduces end-to-end migration and
restoration times by 85%-98% and 94%-99%, respectively, on a variety (i.e.,
Kaggle, JWST, and Tutorial) of notebooks with negligible runtime and memory
overheads of <2.5% and <10%.
