使用 JupyterLab 进行数据科学
Docker 和 JupyterLab 是两个强大的工具,可以增强您的数据科学工作流程。在本指南中,您将学习如何一起使用它们来创建和运行可重复的数据科学环境。本指南基于 使用 JupyterLab 和 Docker 进行 Supercharging AI/ML 开发。
在本指南中,您将学习如何:
- 在本地计算机上使用 JupyterLab 运行个人 Jupyter 服务器
- 自定义您的 JupyterLab 环境
- 与其他数据科学家共享您的 JupyterLab 笔记本和环境
什么是 JupyterLab?
JupyterLab是一个围绕计算笔记本文档概念构建的开源应用程序。它支持共享和执行代码、数据处理、可视化,并提供一系列用于创建图形的交互功能。
为什么要一起使用 Docker 和 JupyterLab?
通过结合 Docker 和 JupyterLab,您可以受益于这两种工具的优势,例如:
- 容器化可确保所有部署中的 JupyterLab 环境保持一致,从而消除兼容性问题。
- 容器化 JupyterLab 无需手动环境设置,从而简化了共享和协作。
- 容器为 JupyterLab 提供可扩展性,支持 Kubernetes 等平台的工作负载分配和高效资源管理。
先决条件
要遵循本指南,您必须安装最新版本的 Docker Desktop。
运行并访问 JupyterLab 容器
在终端中,运行以下命令来运行 JupyterLab 容器。
$ docker run --rm -p 8889:8888 quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
以下是该命令的值得注意的部分:
-p 8889:8888
:将主机的 8889 端口映射到容器上的 8888 端口。start-notebook.py --NotebookApp.token='my-token'
:设置访问令牌而不是使用随机令牌。
有关更多详细信息,请参阅 Jupyter 服务器选项和 docker run CLI 参考。
如果这是您第一次运行该映像,Docker 将下载并运行它。下载图像所需的时间会根据您的网络连接而有所不同。
镜像下载并运行后,您就可以访问容器了。要访问容器,请在 Web 浏览器中导航至 localhost:8889/lab?token=my-token。
要停止容器,请在终端中按ctrl
+ c
。
要访问系统上现有的笔记本,您可以使用 绑定安装。打开终端并将目录更改为现有笔记本所在的位置。然后,根据您的操作系统运行以下命令。
$ docker run --rm -p 8889:8888 -v "$(pwd):/home/jovyan/work" quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
$ docker run --rm -p 8889:8888 -v "%cd%":/home/jovyan/work quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
$ docker run --rm -p 8889:8888 -v "$(pwd):/home/jovyan/work" quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
$ docker run --rm -p 8889:8888 -v "/$(pwd):/home/jovyan/work" quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
该-v
选项告诉 Docker 将当前工作目录挂载到
/home/jovyan/work
容器内。默认情况下,Jupyter 映像的根目录是/home/jovyan
,您只能访问或将笔记本保存到容器中的该目录。
现在您可以访问 localhost:8889/lab?token=my-token并打开绑定安装目录中包含的笔记本。
要停止容器,请在终端中按ctrl
+ c
。
Docker 还具有卷,这是保存 Docker 容器生成和使用的数据的首选机制。虽然绑定挂载取决于主机的目录结构和操作系统,但卷完全由 Docker 管理。
保存和访问笔记本
当您删除容器时,该容器中的所有数据都将被删除。要将笔记本保存在容器外部,您可以使用 卷。
运行带有卷的 JupterLab 容器
要使用卷启动容器,请打开终端并运行以下命令
$ docker run --rm -p 8889:8888 -v jupyter-data:/home/jovyan/work quay.io/jupyter/base-notebook start-notebook.py --NotebookApp.token='my-token'
该-v
选项告诉 Docker 创建一个名为 的卷jupyter-data
并将其挂载到位于 的容器中/home/jovyan/work
。
要访问容器,请在 Web 浏览器中导航至 localhost:8889/lab?token=my-token。笔记本现在可以保存到该卷中,即使容器被删除也可以访问。
将笔记本保存到卷中
在本示例中,您将使用 scikit-learn 中的Iris 数据集示例。
打开 Web 浏览器并访问位于localhost:8889/lab?token=my-token 的JupyterLab 容器 。
在启动器中的Notebook下,选择Python 3。
在笔记本中,指定以下内容以安装必要的软件包。
!pip install matplotlib scikit-learn
选择播放按钮来运行代码。
在笔记本中,指定以下代码。
from sklearn import datasets iris = datasets.load_iris() import matplotlib.pyplot as plt _, ax = plt.subplots() scatter = ax.scatter(iris.data[:, 0], iris.data[:, 1], c=iris.target) ax.set(xlabel=iris.feature_names[0], ylabel=iris.feature_names[1]) _ = ax.legend( scatter.legend_elements()[0], iris.target_names, loc="lower right", title="Classes" )
选择播放按钮来运行代码。您应该看到 Iris 数据集的散点图。
在顶部菜单中,选择“文件”,然后选择“保存笔记本”。
指定目录中的名称
work
以将笔记本保存到卷。例如,work/mynotebook.ipynb
。选择重命名以保存笔记本。
笔记本现已保存在卷中。
在终端中,按ctrl
+c
停止容器。
现在,只要您使用该卷运行 Jupyter 容器,您就可以访问保存的笔记本。
当您运行新容器,然后再次运行数据绘图代码时,它将需要运行!pip install matplotlib scikit-learn
并下载包。通过使用已安装的软件包创建自己的映像,您可以避免每次运行新容器时重新安装软件包。
自定义您的 JupyterLab 环境
您可以创建自己的 JupyterLab 环境并使用 Docker 将其构建为映像。通过构建自己的映像,您可以使用所需的包和工具自定义 JupyterLab 环境,并确保它在不同部署中保持一致和可重现。构建您自己的映像还可以更轻松地与其他人共享您的 JupyterLab 环境,或将其用作进一步开发的基础。
在 Dockerfile 中定义您的环境
在前面的将笔记本保存到卷中的 Iris 数据集示例中
,每次运行新容器时,您都必须安装依赖项matplotlib
和。scikit-learn
虽然这个小示例中的依赖项可以快速下载和安装,但随着依赖项列表的增长,它可能会成为一个问题。您的环境中可能还存在您始终需要的其他工具、包或文件。
在这种情况下,您可以将依赖项安装为映像中环境的一部分。然后,每次运行容器时,都会安装依赖项。
您可以在 Dockerfile 中定义您的环境。 Dockerfile 是一个文本文件,指示 Docker 如何创建 JupyterLab 环境的映像。镜像包含运行 JupyterLab 时您想要和需要的所有内容,例如文件、包和工具。
在您选择的目录中,创建一个名为Dockerfile
.在 IDE 或文本编辑器中打开Dockerfile
,然后添加以下内容。
# syntax=docker/dockerfile:1
FROM quay.io/jupyter/base-notebook
RUN pip install --no-cache-dir matplotlib scikit-learn
此 Dockerfile 使用quay.io/jupyter/base-notebook
镜像作为基础,然后运行pip
以安装依赖项。有关 Dockerfile 中的说明的更多详细信息,请参阅
Dockerfile 参考。
在继续之前,请将更改保存到Dockerfile
.
将您的环境构建成图像
Dockerfile
定义环境后,您可以docker build
使用Dockerfile
.
打开终端,将目录更改为您所在的目录Dockerfile
,然后运行以下命令。
$ docker build -t my-jupyter-image .
Dockerfile
该命令根据您的上下文构建 Docker 映像。该
-t
选项指定图像的名称和标签,在本例中为
my-jupyter-image
。表示.
当前目录是上下文,也就是说在镜像创建过程中可以使用该目录下的文件。
Images
您可以通过查看Docker Desktop 中的视图或docker image ls
在终端中运行命令来验证映像是否已构建。您应该看到一个名为 的图像my-jupyter-image
。
将图像作为容器运行
要将映像作为容器运行,请使用以下docker run
命令。在
docker run
命令中,您将指定您自己的图像名称。
$ docker run --rm -p 8889:8888 my-jupyter-image start-notebook.py --NotebookApp.token='my-token'
要访问容器,请在 Web 浏览器中导航至 localhost:8889/lab?token=my-token。
您现在可以使用这些软件包,而无需将它们安装在笔记本中。
在启动器中的Notebook下,选择Python 3。
在笔记本中,指定以下代码。
from sklearn import datasets iris = datasets.load_iris() import matplotlib.pyplot as plt _, ax = plt.subplots() scatter = ax.scatter(iris.data[:, 0], iris.data[:, 1], c=iris.target) ax.set(xlabel=iris.feature_names[0], ylabel=iris.feature_names[1]) _ = ax.legend( scatter.legend_elements()[0], iris.target_names, loc="lower right", title="Classes" )
选择播放按钮来运行代码。您应该看到 Iris 数据集的散点图。
在终端中,按ctrl
+c
停止容器。
使用 Compose 运行容器
Docker Compose 是一个用于定义和运行多容器应用程序的工具。在这种情况下,应用程序不是多容器应用程序,但 Docker Compose 可以通过docker run
在文件中定义所有选项来使其更易于运行。
创建撰写文件
要使用 Compose,您需要一个compose.yaml
文件。在与您的目录相同的目录中
Dockerfile
,创建一个名为compose.yaml
.
在 IDE 或文本编辑器中打开该compose.yaml
文件并添加以下内容。
services:
jupyter:
build:
context: .
ports:
- 8889:8888
volumes:
- jupyter-data:/home/jovyan/work
command: start-notebook.py --NotebookApp.token='my-token'
volumes:
jupyter-data:
name: jupyter-data
此 Compose 文件指定您在命令中使用的所有选项docker run
。有关 Compose 指令的更多详细信息,请参阅
Compose 文件参考。
在继续之前,请保存对compose.yaml
文件的更改。
使用 Compose 运行容器
打开终端,将目录更改为文件所在位置compose.yaml
,然后运行以下命令。
$ docker compose up --build
此命令构建您的映像并使用文件中指定的说明将其作为容器运行compose.yaml
。该--build
选项可确保重建您的映像,如果您对Dockefile
.
要访问容器,请在 Web 浏览器中导航至 localhost:8889/lab?token=my-token。
在终端中,按ctrl
+c
停止容器。
分享你的工作
通过共享您的图像和笔记本,您可以创建一个便携式且可复制的研究环境,其他数据科学家可以轻松访问和使用该环境。此过程不仅促进协作,还确保您的工作保存在可以运行而不会出现兼容性问题的环境中。
要共享您的图像和数据,您将使用 Docker Hub。 Docker Hub 是一种基于云的注册表服务,可让您共享和分发容器映像。
分享您的图片
注册或登录 Docker Hub。
重命名您的映像,以便 Docker 知道将其推送到哪个存储库。打开终端并运行以下
docker tag
命令。替换YOUR-USER-NAME
为您的 Docker ID。$ docker tag my-jupyter-image YOUR-USER-NAME/my-jupyter-image
运行以下
docker push
命令将镜像推送到 Docker Hub。替换YOUR-USER-NAME
为您的 Docker ID。$ docker push YOUR-USER-NAME/my-jupyter-image
验证您是否已将映像推送到 Docker Hub。
- 转到 Docker 中心。
- 选择存储库。
- 查看存储库的上次推送时间。
其他用户现在可以使用该命令下载并运行您的映像docker run
。它们需要替换YOUR-USER-NAME
为您的 Docker ID。
$ docker run --rm -p 8889:8888 YOUR-USER-NAME/my-jupyer-image start-notebook.py --NotebookApp.token='my-token'
分享您的音量
此示例使用 Docker Desktop Volumes Backup & Share扩展。或者,您可以在 CLI 中 备份卷,然后 使用 ORAS CLI 推送它。
安装卷备份和共享扩展。
- 打开 Docker 仪表板并选择Extensions。
- 搜索
Volumes Backup & Share
。 - 在搜索结果中,选择安装扩展。
在 Docker 仪表板中打开卷备份和共享扩展。
在jupyter-data卷旁边,选择导出卷图标。
在“导出内容”窗口中,选择“注册表”。
在“注册表”下的文本框中,指定您的 Docker ID 和卷的名称。例如,
YOUR-USERNAME/jupyter-data
。选择导出。
验证您是否将卷导出到 Docker Hub。
- 转到 Docker 中心。
- 选择存储库。
- 查看存储库的上次推送时间。
其他用户现在可以下载并导入您的卷。要导入该卷,然后使用您的映像运行它:
在卷备份和共享扩展中,选择导入到新卷。
在“导入到新卷”窗口中,选择“注册表”。
在“注册表”下的文本框中,指定您的 Docker ID 和卷的存储库名称。例如,
YOUR-USERNAME/jupyter-data
。在卷名称中,指定要为卷指定的名称。本示例使用
jupyter-data
名称。选择导入。
在终端中,运行
docker run
以使用导入的卷运行您的映像。替换YOUR-USER-NAME
为您的 Docker ID。$ docker run --rm -p 8889:8888 -v jupyter-data:/home/jovyan/work YOUR-USER-NAME/my-jupyter-image start-notebook.py --NotebookApp.token='my-token'
概括
在本指南中,您学习了如何利用 Docker 和 JupyterLab 创建可重复的数据科学环境,促进数据科学项目的开发和共享。这包括运行个人 JupyterLab 服务器、使用必要的工具和软件包自定义环境,以及与其他数据科学家共享笔记本和环境。
相关信息: