者:Kevin Markham

编译:Steven Shen

原文:https://www.dataschool.io/cloud-services-for-jupyter-notebook/


1_oj36TMqOkHmi6u3kCSsr7Q.png


有许多方法可以与其他人共享静态 Jupyter 笔记本,例如把它发布在 GitHub 上或通过 nbviewer 链接进行分享。 但是,如果接收人已经安装了 Jupyter Notebook 环境,那么他们只能通过笔记本文件进行交互。


但是,如果您想分享一个不需要安装任何东西的全交互式 Jupyter 笔记,该怎么办? 或者,您只想要创建一个自己的 Jupyter 笔记但又不想在本地计算机上安装任何东西?


在这篇文章中,我将回顾六种可以用来在云端轻松运行 Jupyter 笔记的服务。所有这些服务都具有以下特征:



由于所有的这些都是基于云的服务,如果您仅限于使用内部部署的数据,则它们都不适合您。



比较标准


以下是我对六种服务进行比较的标准:




1. Binder


image


Binder 是 Binder 项目提供的服务,它是 Project Jupyter 开源生态系统的一员。它允许您输入任何公共 Git 存储库的 URL,它将在本机的 Jupyter Notebook 界面中打开该存储库。您可以在存储库中运行任何笔记本,但您所做的任何更改都不会保存回存储库。您不必使用 Binder 创建帐户,也不需要是存储库的所有者,但你所使用的存储库必须包含指定其软件包要求的配置文件。


支持的语言:

支持 Python (2 and 3), R, Julia,以及 Jupyter 支持的其他任何语言


安装软件包:

您可以使用配置文件(例如 environment.yml 或 requirements.txt)指定特定的包要求。


界面相似度: Binder 使用原生的 Jupyter Notebook 界面。


键盘快捷键: Binder 使用与 Jupyter 相同的所有键盘快捷键。


缺少的功能:无。


新增的功能:无。


数据集易用性:

如果您的数据集位于同一个 Git 存储库中,那么它将自动在 Binder 中可用。如果您的数据集不在该存储库中,但可以在任何公共 URL 上使用,那么您可以向存储库添加一个特殊文件,告知 Binder 下载您的数据集。但是,Binder 不支持访问私有数据集。


网络访问:支持。


保证工作私密性: 不,因为它只适用于公共 Git 存储库。


公开分享:

支持。您可以分享直接连接到你个人 Binder 的 URL,其他人也可以使用 Binder 网站运行您的笔记本(只要他们知道您的 Git 存储库的 URL)。


协作能力:

不支持。如果您想与同一个笔记本上的某个人合作,而您的存储库托管在 GitHub 上,那么您可以使用普通的拉取请求工作流程的方式进行协作。


免费计划的性能表现:

您最多可以使用 2GB 的 RAM。虽然它们要求您不要包含 "非常大的文件"(超过几百兆字节),但磁盘空间量没有特定限制。Binder 的启动速度很慢,尤其是当它在最近更新的存储库上运行时。会话将在 20 分钟不活动后关闭,但它们可以运行 12 小时或更长时间。Binder 还有其他使用指南,包括对任何给定了存储库的 100 个并发用户的限制等。


性能升级:

不支持。但是,您可以选择设置自己的 BinderHub 部署,它可以提供与Binder相同的功能,同时允许您自定义环境(例如增加计算资源或允许私有文件)。


文档和技术支持: 

Binder 有大量文档。它通过 Gitter 聊天和 Discourse 论坛提供社区支持,并在 GitHub 上跟踪产品问题。


结论:

如果您的笔记本已经存储在公共 GitHub 中,Binder 是让其他人与它们进行交互的最简单方法。用户不必创建帐户,如果他们已经知道如何使用 Jupyter Notebook,他们会感到宾至如归。但是,您需要牢记 Binder 的性能限制和用户限制!



2. Kaggle Kernels


image


Kaggle 是最着名的数据科学竞赛平台。但是,他们还提供可以独立于竞争对手使用,名为 Kernels 的免费服务。创建 Kaggle 帐户(或使用 Google 或 Facebook 登录)后,您可以创建一个使用笔记本或脚本界面的内核,但我更专注于下面提到的的笔记本界面信息。


支持的语言:只支持 Python3 和 R。


安装软件包:

Kaggle 预先安装了数百个软件包,您可以使用 pip 或通过指定软件包的 GitHub 存储库来安装其他软件包。但是,您安装的任何其他软件包都需要在每个会话开始时重新安装。或者,您可以要求 Kaggle 在其默认安装中包含其他软件包。


界面相似度: 

在视觉上,Kernels 界面看起来与 Jupyter 界面完全不同。 屏幕顶部没有菜单栏或工具栏,右侧有可折叠的侧边栏,用于调整设置,并且笔记本下方有一个控制台。然而,在 Kernels 笔记本中工作实际上与在 Jupyter 笔记本中工作非常相似,特别是如果你对 Jupyter 的键盘快捷键感到满意的话。此外,请注意,重新设计的界面(如上面的屏幕截图所示)将很快发布,这更类似于 Jupyter 界面,并包含一个简单的菜单栏。


键盘快捷键: 内核使用了与 Jupyter 相同的所有键盘快捷键。


缺少的功能:


新增的功能:


数据集易用性:  

您可以从本地计算机,URL 或 GitHub 存储库将数据集上传到 Kaggle,它将由另一个名为 Datasets 的 Kaggle 服务免费托管。您可以将上传的数据集设为私有或公共。您上传的任何数据集以及其他 Kaggle 用户上传的任何公共数据集都可以被你的任何一个内核访问。每个数据集的最大大小为 20 GB,单个内核可以访问多个数据集。


网络访问: 允许。


保证工作私密性:支持。


公开分享: 

支持。如果您选择公开您的内核,则任何人都可以在不创建 Kaggle 帐户的情况下访问它,任何拥有 Kaggle 帐户的人都可以对您的内核发表评论或将其复制到自己的帐户。此外,Kaggle 还为您提供了一个公共的  profile page,其中显示了所有公共内核和数据集。


协作能力: 

支持。您可以保持内核私有,但可以邀请特定的 Kaggle 用户查看或编辑它。没有实时协作:它更像是在单独的内核副本上工作,除了所有提交都添加到相同的版本历史记录中。


免费计划的性能表现: 

您可以使用具有 17GB RAM 的 4 核 CPU,或具有 14GB RAM 和 GPU 的 2 核 CPU。虽然数据集使用的任何磁盘空间都不计入这些数字,但您将拥有 5 GB的 "已保存" 磁盘空间和 17 GB的 "临时" 磁盘空间。会话将在 60 分钟不活动后关闭,但它们可以运行长达 9 个小时。


性能升级:支持。


文档和技术支持: Kaggle 内核有大量丰富的文档。用户可通过表格的联系方式论坛获得支持。


结论:

只要您对稍微混乱的界面(在重新设计中已得到改进)感到满意,您就可以访问高性能环境,在该环境中可以轻松使用数据集并公开分享您的工作 (或保持私密)。Kaggle 包含的版本控制和协作功能也是很好的功能补充,但两者都不是功能很齐全。



3. Google Colaboratory (Colab)


image


Google Colaboratory,通常称为"Google Colab",适用于拥有 Google 帐户的任何人。只要您已登录 Google,就可以快速开始创建空笔记本,上传现有笔记本或从任何公共 GitHub 存储库导入笔记本。您的 Colab 笔记本会自动保存 在Google 云端硬盘中的特殊文件夹中,您甚至可以直接从云端硬盘创建新笔记本。


支持的语言: 

支持 Python(2 和 3)和 Swift(2019 年 1 月添加)。也可以为其他语言安装内核,但安装过程因语言而异,并且没有详细记录。


安装软件包:

已预先安装了数百个软件包,您可以使用 pip 安装其他软件包。但是,您安装的任何其他软件包都需要在每个会话开始时重新安装。


界面相似度: 

在视觉上,Colab 界面看起来非常类似于 Jupyter 界面。然而,在 Colab 工作实际上感觉与在Jupyter Notebook 中工作非常不同:


键盘快捷键: 

虽然 Colab 允许您自定义快捷方式,但在 Colab 中,Jupyter 使用的大多数单字母键盘快捷键(例如使用 "a" 快捷键实现 "insert cell above")都已经更改为多步骤的组合键("Ctrl + m" 后跟 "a")。


缺少的功能:


新增的功能:


数据集易用性: 

您可以上传数据集以在 Colab 笔记本中使用,但一旦结束会话,它将自动删除。或者,您可以允许 Colab 从您的 Google 云端硬盘读取文件,虽然它比较复杂。 Colab 还包括其他 Google 服务的连接器,例如 Google 表格和 Google 云端存储。


网络访问: 支持。


保证工作私密性的能力: 支持。


公开分享的能力:

支持。如果您选择公开您的笔记本并分享链接,则任何人都可以在不创建 Google 帐户的情况下访问该笔记本,并且拥有 Google 帐户的任何人都可以将其复制到他们自己的帐户。此外,您可以授权 Colab将 笔记本的副本保存到 GitHub 或 Gist,然后从那里共享。


协作能力:

支持。您可以将笔记本设置为私密,但可以邀请特定人员查看或编辑它(使用 Google 熟悉的共享界面)。您和您的协作者可以同时编辑笔记本并查看彼此的更改,并为彼此添加注释(类似于 Google 文档),尽管在您在执行更改和合作者看到它们之间有 30 秒的延迟。此外,您实际上并未与协作者共享您的环境(意味着没有同步运行的代码),这极大地限制了近实时协作的有用性。


免费计划的性能表现:

Colab 可以让您访问 GPU 或 TPU。然而,Google 不会为其环境提供任何规范。如果您将 Colab 连接到 Google 云端硬盘,那么您将获得最多 15 GB 的磁盘空间来存储数据集。Colab 会话将在 60 分钟不活动后关闭,但它们可以运行长达 12 小时。


性能升级: 

不允许。但是,您可以选择连接到 a local runtime,这允许您在本地硬件上执行代码并访问本地文件系统。


文档和技术支持:

Colab 拥有很少的文档,这些文档都包含在 FAQ 页面和各种示例笔记本中。用户可通过 GitHub issues,或者 Stack Overflow 社区获取支持。


结论:

Colab 的最大优势在于它易于上手,因为大多数人已经拥有 Google 帐户,并且共享笔记本很容易,因为共享功能与 Google Docs 相同。然而,繁琐的键盘快捷键和使用数据集的困难是显著的缺点。在同一笔记本上进行协作的能力很有用,但由于您没有共享环境,因此协作能力的作用也会有所降低。



4. Microsoft Azure Notebooks


image


要开始使用 Azure 笔记本,请先使用 Microsoft 或 Outlook 帐户登录(或创建一个帐户)。然后是创建一个 "项目",其结构与 GitHub 存储库相同:它可以包含一个或多个笔记本、Markdown 文件、数据集以及您要创建或上传的任何其他文件,所有这些都可以组织到文件夹中。与 GitHub 一样,您可以使用 README 文件初始化项目,该文件将自动显示在项目页面上。如果您的工作已存储在 GitHub 上,则可以将整个存储库直接导入到项目中。


支持的语言: Python (2 and 3), R, and F#.


安装软件包:

预先安装了数百个软件包,您可以使用 pip 或 conda 安装其他软件包,并且可以使用配置文件(例如 environment.yml 或 requirements.txt )指定明确的软件包要求。


界面相似度:

Azure 使用原生的 Jupyter Notebook 界面。


键盘快捷键:

Azure 使用与 Jupyter 相同的所有键盘快捷键。


缺少的功能:无。


新增的功能:


数据集易用性:

您可以从本地计算机或 URL 将数据集上传到项目中,并且项目中的任何笔记本都可以访问该数据集。Azure 还包括其他 Azure 服务的连接器,例如 Azure 存储和各种 Azure 数据库。


网络访问: 支持。


保证工作私密性的能力:支持。


公开分享的能力:

支持。如果您选择公开您的项目,则任何人都可以在不创建 Microsoft 帐户的情况下访问它,任何拥有 Microsoft 帐户的人都可以将其复制到自己的帐户。此外,Azure 还为您提供了一个公共配置文件页面(非常类似于 GitHub 配置文件),它显示了所有公共项目。


协作能力:暂不支持,虽然这是一个计划中的功能


免费计划的性能表现:

您可以访问 4 GB 的 RAM 和 1 GB 的磁盘空间(每个项目)。会话将在 60 分钟不活动后关闭,但它们可以运行 8 小时或更长时间。


性能升级: 

支持。您可以为 Azure 订阅付费,但设置过程非常琐细且价格计算很复杂。


文档和技术支持: 

Azure 提供了大量的文档。用户也可通过 GitHub issues 获得支持。


结论:

Azure Notebooks 的最大优势在于它的易用性:项目结构(从 GitHub 借用)使得使用多个笔记本和数据集变得简单,并且使用原生 Jupyter 界面意味着现有的 Jupyter 用户将拥有一个简单的过渡。但是,RAM 和磁盘空间并不是特别慷慨,缺乏协作是功能上的一个巨大差距。



5. CoCalc


image


CoCalc,是 "collaborative calculation" 的缩写,是用于 Python,R,Julia 和许多其他语言计算的在线工作空间。 它允许您创建和编辑 Jupyter 笔记本,Sage 工作表和 LaTeX 文档。创建 CoCalc 帐户后,第一步是创建一个 "项目",其中可以包含一个或多个笔记本、Markdown 文件、数据集以及您要创建或上传的任何其他文件,并且所有这些文件都可以组织到文件夹中。项目界面起初有点让人应接不暇,但是一旦你创建或打开笔记本,它看起来就会更加熟悉。


支持的语言:Python (2 and 3), R, Julia, 以及其他的语言。


安装软件包:

CoCalc 预先安装了数百个包。您可以使用 pip 安装其他软件包,但在使用免费套餐时无法使用这个功能。或者,您可以要求 CoCalc 在其默认安装中包含其他软件包。


界面相似度:

虽然 CoCalc 没有使用原生的 Jupyter Notebook 界面(他们使用 React.js 重写了它),但界面与 Jupyter 非常相似,只有少许修改。您实际上可以从 CoCalc 中切换到使用原生的 Jupyter Notebook,但不建议这样做,因为您将无法访问最有价值的 CoCalc 功能("time travel" 和实时协作,这将在下面讨论)。


键盘快捷键: 

CoCalc 几乎使用与 Jupyter 相同的所有键盘快捷键。


缺少的功能:

CoCalc 目前不支持交互式小部件。


新增的功能:


数据集易用性:

您可以从本地计算机将数据集上传到项目中,并且项目中的任何笔记本都可以访问该数据集。


网络访问:不,使用免费计划时无法使用此功能。


保证工作私密性的能力:允许。


公开分享的能力:

允许。如果您选择公开您的笔记本并分享链接,则任何人都可以在不创建 CoCalc 帐户的情况下访问该笔记本,并且拥有 CoCalc 帐户的任何人都可以将其复制到自己的帐户。


协作能力:

允许。您可以将笔记本保密,但可以邀请特定人员进行编辑。您和您的协作者可以同时编辑笔记本,并实时查看彼此的更改(和游标),以及在笔记本旁边的窗口中聊天(使用文本或视频)。所有计算的状态和结果也是同步的,这意味着所涉及的每个人都将以相同的方式体验笔记本。


免费计划的性能表现:

您将可以使用具有 1 GB 共享 RAM 和 3 GB 磁盘空间(每个项目)的 1 核共享 CPU。会话将在 30 分钟不活动后关闭,但它们可以运行长达 24 小时。


性能升级:

支持。您可以为 CoCalc 支付订阅费用,起价为每月 14 美元。或者,您可以在自己的计算机上安装 CoCalc Docker 镜像,这样您就可以免费运行多个私有用户的 CoCalc 服务器。


文档和技术支持:

CoCalc 拥有大量文档。用户可通过电子邮件和联系列表获得支持,并在 GitHub 上跟踪产品问题。


结论:

使用 CoCalc 的最有吸引力是它的实时协作和 "time travel" 版本控制功能,以及课程管理功能(如果您是教练)。 虽然界面有点混乱,但现有的 Jupyter 用户可以相对轻松地过渡到 CoCalc。但是,免费计划确实存在一些重要的限制(无法安装其他软件包或访问 Internet),另外,免费计划的性能也不高。



6. Datalore


image


Datalore 是由 JetBrains,一个制作 PyCharm(一种流行的 Python IDE)的公司创建的。它的入门就像创建帐户或使用 Google 或 JetBrains 帐户登录一样简单。您可以创建新的 Datalore "工作簿(workbook)" 或上传现有的 Jupyter Notebook。 Datalore 工作簿以专有格式存储,但它支持导入和导出标准 .ipynb 文件格式。


支持的语言:只支持 Python 3。


安装软件包:

Datalore 预安装了数百个软件包,您可以使用 pip 或 conda 安装其他软件包,也可以通过指定软件包的 GitHub 存储库来安装。


界面相似度:

当你打开 Datalore 时,界面确实类似于 Jupyter笔记本,因为有代码和 Markdown 单元格以及在这些单元格下方的输出。但是,Datalore 和 Jupyter 界面之间存在一些重要差异:


键盘快捷键:

键盘快捷键可用于 Datalore 中的大多数操作,但快捷方式与 Jupyter 使用的快捷方式截然不同。


缺少的功能:


新增的功能:


数据集易用性:

您可以从本地计算机或 URL 将数据集上传到工作簿,但只能由该特定工作簿访问。如果您在许多工作簿中使用相同的数据集,这将是一个大的烦恼。(但是,在工作簿之间共享数据集是一项计划的功能。)


网络访问:支持。


保证工作私密性的能力:支持。


公开分享的能力:不支持。


协作能力:

支持。您可以将工作簿保密,但可以邀请特定人员查看或编辑它。您和您的协作者可以同时编辑笔记本,并实时查看彼此的更改(和游标)。所有计算的状态和结果也是同步的,这意味着所涉及的每个人都将以相同的方式体验笔记本。


免费计划的性能表现:

您可以访问具有 4 GB RAM 和 10 GB 磁盘空间的 2 核 CPU。会话将在 60分 钟不活动后关闭,但对各个会话的长度没有特定限制。您可以每月使用该服务长达 120 小时。


性能升级:

暂不支持,虽然很快就会有一个付费计划,它提供更多的磁盘空间和更强大的 CPU(或 GPU)。


文档和技术支持: 

Datalore 具有比较少的文档,包含在示例工作簿中。用户可通过 Discourse 论坛获得支持。


结论:

Datalore 不再是对 Jupyter 笔记本的改编,而是更像是对笔记本的重塑。它包括一个创新的功能集,包括实时计算,依赖关系跟踪,实时协作和内置版本控制。但是,现有的 Jupyter 用户可能难以过渡到 Datalore,特别是因为强制执行单元格排序并且所有键盘快捷方式都完全不同。同样,Datalore 目前还包含一些值得注意的限制,即工作簿无法公开共享,上传的数据集无法在工作簿之间共享等。



如何选择合适的服务


在提出的六个选项中,没有一个明确的"赢家"。相反,正确的选择将取决于您的优先事项。以下是我根据您的特殊需求选择的建议。(注意:您也可以点击 comparison table 进行查看 。)


您使用 Python 以外的语言:

Binder 和 CoCalc 都支持大量语言。Azure 支持 Python,R 和 F#,Kernel 支持Python 和 R,Colab 支持 Python 和 Swift,Datalore 仅支持 Python。


您需要使用 Python 2:

Binder,Colab,Azure 和 CoCalc 都支持 Python 2 和 3,而 Kernel 和 Datalore 仅支持 Python 3。


您使用非标准软件包:

Binder 和 Azure 允许您使用配置文件指定确切的软件包要求。CoCalc 和 Datalore 允许您安装其他软件包,这些软件包将在会话期间保持不变,尽管这不适用于 CoCalc 的免费计划。Kernels 和 Colab 还允许您安装其他软件包,但它们不会跨会话持续存在。Kernels 和 CoCalc 可以接受哪一些包应包含在其默认安装中的用户请求。


您喜欢现有的 Jupyter Notebook 界面:

Binder 和 Azure 使用原生的 Jupyter Notebook 界面,而 CoCalc 使用了几乎相同的界面。Kernels 在视觉上与 Jupyter 不同,但效果与此类似,而 Colab 在视觉上类似于 Jupyter,但不像它那样工作。Datalore 离现有的 Jupyter Notebook 相差最远。


您是键盘快捷键的重度用户:

Binder,Kernels 和 Azure 使用与 Jupyter 相同的键盘快捷键,而 CoCalc 几乎使用了所有相同的快捷键。Datalore 使用完全不同的键盘快捷键,Colab 使用繁琐的多步键盘快捷键(尽管可以自定义)。


您更喜欢点击式界面:

Binder,Azure 和 CoCalc 允许您通过指向和单击执行所有操作,而 Kernels,Colab 和 Datalore 要求您使用键盘快捷键执行某些操作。


您需要集成版本控制系统:

CoCalc 和 Datalore为 版本控制提供了最佳接口。Kaggle 的版本控制系统有限,Colab 的系统的有限程度更大。 Binder 和 Azure 则不提供版本控制系统。


您需要使用大量数据集:

Kernels 与 Kaggle Datasets 无缝协作,Kaggle Datasets 是一个功能齐全(免费)的服务,用于托管每个最多 20 GB 的数据集。CoCalc 为每个项目提供 3 GB 的磁盘空间,您上传的任何数据集都可以被项目中的任何笔记本访问。Azure 具有类似的功能,但每个项目提供 1 GB 的磁盘空间。尽管您上传的每个数据集都必须链接到特定的工作簿,但 Datalore 提供 10 GB 的总磁盘空间。除非您将 Colab 链接到 Google 云端硬盘,否则 Colab 会丢弃您在会话结束时上传的所有数据集。Binder 最适用于存储在 Git 存储库中或位于公共 URL 的小型数据集。


您的项目已经托管在 GitHub 上:

Binder 可以直接从 GitHub 运行您的笔记本,Azure 将允许您导入整个 GitHub 存储库,Colab 可以从 GitHub 导入一个笔记本。Kernels、CoCalc 和 Datalore 不提供任何类似的功能。


您需要将您的工作保密: 除了 Binder 以外,其他的都支持私有选项。


您需要将数据保留在本地:

这些基于云的服务都不允许您将数据保留在本地。但是,您可以在自己的服务器上设置 Binder 或 CoCalc,因为 BinderHub 和 CoCalc Docker 镜像都是开源的,这样您就可以将数据保存在本地。


您希望公开分享您的工作:

在共享时 Binder 创建的步骤最少,因为人们无需创建帐户即可查看和运行您的笔记本。Kernels、Colab、Azure 和 CoCalc 允许您共享 URL 以进行只读访问,同时要求用户在想要运行笔记本时创建帐户。通过为您提供公共个人资料页面,Kernels 和 Azure 可以更轻松地进行共享。Datalore 不允许公开共享。


您需要与其他人协作:

CoCalc 和 Datalore 支持实时协作。Colab 支持在同一个文档上进行协作,虽然它不是很实时,而且你没有共享相同的环境。Kernels 支持一种您可以在其中共享版本历史记录协作形式。Binder 和 Azure 不包含任何协作功能,但使用 Binder 可以通过正常的 GitHub 拉取请求的工作流轻松实现。


您需要高性能环境:

Kernels 提供最强大的环境(4 核 CPU 和 17 GB RAM),其次是 Datalore(2 核 CPU 和 4 GB RAM),Azure(4  GB RAM),Binder(最多 2 GB RAM)和 CoCalc(1 核 CPU 和 1 GB RAM)。Colab 不提供其环境规范。


您需要访问GPU:

Kernels 和 Colab 都可以免费访问 GPU。 Azure 访问和(很快)Datalore 的付费客户也可以使用 GPU 访问。Binder 或 CoCalc 无法访问 GPU。


您更喜欢使用非商业工具:Binder 是由非商业实体管理的唯一选项。



其他类似的服务


以下服务与上述六个选项类似,但未包括在我的比较中:




我真实的核查过程


本文是 50 多个小时的研究,测试和写作的结果。 此外,我在 2019 年 3 月与 Binder,Kaggle,Google,Microsoft,CoCalc 和 Datalore 的相关团队分享了本文的草稿。我收到了来自所有六家公司/组织的详细反馈(谢谢!),我将其纳入 发表之前的文章。


话虽如此,这些服务也在不断变化,而且未来可能会有一些信息过时。如果您认为本文中的内容不再正确,请在下面留言,我很乐意考虑更新该文章。