Notebook¶
JupyterLab 是一款非常流行的机器学习开发工具,它通过友好易用的 Web 界面提供交互式计算环境,支持多种编程语言和执行环境,在机器学习、AI、数据处理、数值模拟、统计建模、数据可视化等领域被广泛使用。
您可以使用 Notebook 在集群中一键部署 JupyterLab 服务,同时本产品还提供 GPU 支持、SSH 访问支持等补充功能。
创建 Notebook¶
下面是一个基本的 Notebook 配置示例:
# notebook-example.yaml
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
name: notebook-sample
spec:
runMode: running
template:
spec:
containers:
- image: t9kpublic/tensorflow-2.11.0-notebook-cpu:latest
name: tensorflow
type: jupyter
在该例中,template
字段定义所要创建的 Pod 的规约,指示 Pod 运行一个 tensorflow
容器,该容器运行的镜像是 t9kpublic/tensorflow-2.11.0-notebook-cpu:latest
,这是一个预先编译好的镜像。
预先编译好的镜像¶
模型构建模块提供了一些预先编译好的镜像,与 JupyterLab 原生镜像相比内置了更丰富的工具包,请参阅Notebook 标准镜像列表。
在这些镜像中:
- 默认启动一个 JupyterLab 服务。
- 预装了 Python3 以及
tensorflow
、pytorch
、keras
、pandas
、scikit-learn
等常用 Python 包。 - 身份是一个名为
t9kuser
的非root
用户(用户 ID 为 1000,组 ID 为 1000),$HOME
目录为/t9k/mnt
。 - 预装了
tensorboard
插件,您可以在网页中创建 TensorBoard 以可视化数据。 - 预装了
notebook2workflow
插件,您可以在网页中创建 WorkflowTemplate 用于在工作流模块中运行一个.ipynb
文件。
使用 GPU¶
Notebook 支持通过 T9k Scheduler 进行调度并申请使用一定量的 GPU 资源,例如:
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
name: notebook-gpu-sample
spec:
scheduler:
t9kScheduler:
queue: default
template:
spec:
containers:
- image: t9kpublic/tensorflow-2.11.0-notebook-gpu:latest
name: gpu
resources:
requests:
cpu: "0.5"
memory: 1.0Gi
tensorstack.dev/nvidia-gpu-percent: 30
在该例中:
- 所创建的 Pod 使用 T9k Scheduler 作为调度器(通过
scheduler
字段指定),并放在名为 default 的队列 中。 - 所创建的 Pod 申请使用 0.5 个 CPU、1Gi 内存 以及一个 GPU 的 30% 显存,T9k Scheduler 会将 Pod 调度到某个能提供这些资源的节点上。
SSH 访问¶
Notebook 提供运行 SSH Server 的支持。下面的 Notebook 示例运行一个支持 SSH 连接的 JupyterLab 镜像:
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
name: notebook-sample
spec:
ssh:
authorized_keys:
- my-public-key
enabled: true
serviceType: NodePort
template:
spec:
containers:
- image: t9kpublic/tensorflow-2.11.0-notebook-cpu:latest
name: tensorflow
在该例中,Notebook 控制器检测到 spec.ssh.enabled
字段的值为 true
,然后创建一个处理 SSH 请求的 Service,其名称前缀为 managed-notebook-ssh
。Service 的 targetPort
为固定的 2222
,Service 类型通过 spec.ssh.serviceType
字段指定为 NodePort
。
注意
Notebook 控制器会为所有 Notebook 创建名称前缀为 managed-notebook-http
的 Service,帮助您访问 Juypter Notebook 的服务。而前缀为 managed-notebook-ssh
的 Service 只会为 spec.ssh.enabled
字段的值为 true
的 Notebook 创建。
信息
SSH 访问支持允许您直接在本地连接到 Notebook 环境,从而可以使用惯用的本地 IDE 进行开发工作。
资源回收¶
Notebook 提供空闲资源回收的支持,在检测到 Notebook 处于空闲状态并超过一定时长时,删除工作负载以释放计算资源。目前,资源回收仅针对 Jupyter 类型的 Notebook,其他类型(例如 RStudio)的 Notebook 不会被回收。
默认情况下(管理员可修改配置):
- Notebook 没有活跃运行超过 1h 后,标记该 Notebook 为
Idle
。 - Notebook 进入
Idle
状态超过 24h 后,删除该 Notebook 底层工作负载。
如果需要再次使用该 Notebook,您可以在模型构建控制台中手动点击恢复按钮。
如何判定 Notebook 是否活跃?
满足以下任一条件即为活跃:
- Jupyter ipykernel 存在任务运行(即 .ipynb 文件中有代码块在运行)。
- 前端网页存在活动。
- Notebook SSH 存在连接。
如果有非上述场景的任务运行,同时不希望 Notebook 空闲超时被回收,如何保持 Notebook 活跃?
- 参考使用 Jupyter Notebook 创建
active.ipynb
文件并执行以下代码块:
import time
while True:
time.sleep(60)
如果您的任务运行完成,您可以手动停止该代码块的执行,以恢复空闲资源回收的功能。