使用 Kubeflow Notebooks
Kubeflow Notebooks 为数据科学家提供了一个 Kubernetes 原生的 Jupyter 环境,用于开发、训练和部署机器学习模型。每个 notebook server 都作为一个独立的 Pod 运行在你的 namespace 中,确保隔离性和专用资源。
注意:我们建议使用 Alauda AI Workbench,以获得更集成的体验,并提供更多功能,例如资源类型、配置以及与其他组件的更好集成。不过,如果你更倾向于更轻量的部署,或者需要上游项目中的某些特定功能,也可以使用原生的 Kubeflow Notebooks。
目录
概念创建 Notebook Server连接到 Notebook环境管理安装 Python 包使用自定义镜像管理配置(PodDefaults)创建 PodDefault应用配置访问数据使用挂载卷使用 Object Storage最佳实践概念
- Notebook Server:运行在容器中的 JupyterLab 实例。
- Custom Image:你可以使用标准的预构建镜像(例如包含 TensorFlow、PyTorch),也可以提供你自己的自定义 Docker 镜像,并包含特定的库。
- Persistent Storage:默认情况下,notebook server 会挂载到 Persistent Volume Claims (PVCs),用于存储你的工作区目录(通常是
/home/jovyan)。这样可以确保即使 server 重启或更新,你的 notebooks 和数据也会被保留。
创建 Notebook Server
-
访问监控面板: 导航到 Kubeflow 监控面板中的 Notebooks 部分。
-
新建 Notebook: 点击 New Notebook。请确保在监控面板顶部选择正确的 namespace,即你希望创建 notebook server 的位置。
-
配置 Server:
- 名称:为你的 notebook server 输入一个唯一名称。
- 镜像:
- 选择类型:选择镜像类型,包括 JupyterLab、Visual Studio Code 或 RStudio。
- 选择镜像:从预构建镜像列表中选择,或者通过提供 Docker 镜像 URL 来指定自定义镜像。
- CPU / RAM:根据工作负载分配 CPU 和内存资源。可以先从较小的配置开始(例如 1 CPU、2GB RAM),如有需要再增加。
- GPU:如果你计划运行需要加速的深度学习训练或推理任务,请申请 GPU(例如 NVIDIA)。
- Workspace Volume:此卷会挂载到你的主目录(
/home/jovyan)。你可以创建一个新卷(默认)或挂载一个现有卷,以访问之前的工作。 - Data Volumes:(可选)挂载额外的现有 PVC,以访问大型数据集,而无需将其复制到工作区。
- Configurations:(可选)选择 PodDefaults(如果可用),以注入通用配置,例如 S3 凭证、Git 配置或环境变量。
-
启动: 点击 Launch。系统将为该 server 进行配置。等待状态显示变为 Running(绿色)。
连接到 Notebook
当 server 状态为 Running 后:
- 点击 Connect。
- 这将会在新的浏览器标签页中打开 JupyterLab/VS Code/RStudio 界面。
- 现在你可以创建 Python 3 notebooks、打开终端或管理文件。
环境管理
安装 Python 包
虽然你可以将包安装到主目录中以便持久保存,但为了保证可复现性,最佳实践是使用自定义镜像。
在主目录中创建一个 "venv" 目录,并在其中安装包:
当你启动新的终端会话时,请记得激活虚拟环境,以便访问已安装的包。
要在 Jupyter notebooks 中使用虚拟环境,可以安装 ipykernel 并创建一个新的 kernel:
然后,在你的 Jupyter notebook 中,你可以选择 "Python (venv)" kernel 来使用安装在虚拟环境中的包。
虚拟环境会保存在你的主目录中,因此即使你停止并重新启动 notebook server,它们仍然可用。不过,如果你需要在多个 notebook server 之间共享环境,或者希望更好地保证可复现性,可以考虑构建一个预装所需包的自定义 Docker 镜像。
使用自定义镜像
对于生产环境或依赖较复杂的场景(例如系统库),请构建一个包含所有必需库的 Docker 镜像,并在创建 notebook 时将其用作 Custom Image。这样可以确保完全可复现。
管理配置(PodDefaults)
Kubeflow 使用 PodDefault 资源(在 UI 中通常标记为 Configurations)向 Notebooks 注入常见配置,例如环境变量、卷和卷挂载。这是安全提供 Object Storage 凭证的标准方式,无需在 notebook 中硬编码。
创建 PodDefault
你可以通过应用一个 YAML 清单来创建 PodDefault。
定义一个 PodDefault,选择带有特定标签的 pod。
应用配置
在创建新的 Notebook Server 时:
- 滚动到 Configurations 部分。
- 你会看到可用 PodDefaults 的列表(例如
s3-access)。 - 勾选复选框以应用它。
这会自动将指定的环境变量或卷注入到你的 Notebook 容器中。
访问数据
使用挂载卷
如果你在创建时附加了数据卷(PVC),它将可在指定的挂载点中使用。
使用 Object Storage
要访问 Object Storage 中的数据,可以使用 boto3 或 s3fs 等库。许多提供商都提供兼容 S3 的 API,因此如果你的管理员已为凭证配置了 PodDefaults,像 AWS_ACCESS_KEY_ID 这样的环境变量通常会自动注入。
最佳实践
- 停止未使用的 Server:即使处于空闲状态,Notebook Server 也会消耗集群资源(尤其是 GPU)。在你不再主动使用时,请将其停止。
- Git 集成:使用 JupyterLab 中的 Git 扩展(或终端)对 notebooks 进行版本控制。避免将大型数据集存储在 Git 中。
- 资源监控:监控你的资源使用情况。如果你的 kernel 经常崩溃(OOM),你可能需要停止 server,并使用更高的内存限制重新启动。
- 清理:如果旧的 notebook server 及其关联的 PVC 不再需要,请定期删除它们。