Notebook
JupyterLab 是一款非常流行的机器学习开发工具,它通过友好易用的 Web 界面提供交互式计算环境,支持多种编程语言和执行环境,在机器学习、AI、数据处理、数值模拟、统计建模、数据可视化等领域被广泛使用。
用户可以使用 Notebook CRD 在集群中快速部署一个 JupyterLab 服务,同时本产品还提供 GPU 支持、SSH 访问支持等功能。
创建 Notebook
下面是一个基本的 Notebook 配置示例:
# notebook-tutorial.yaml
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
  name: tutorial
spec:
  type: jupyter
  template:
    spec:
      containers:
        - name: notebook
          image: t9kpublic/torch-2.1.0-notebook:1.77.1
          volumeMounts:
            - name: workingdir
              mountPath: /t9k/mnt
          resources:
            requests:
              cpu: '8'
              memory: 16Gi
              nvidia.com/gpu: 1
            limits:
              cpu: '16'
              memory: 32Gi
              nvidia.com/gpu: 1
      volumes:
        - name: workingdir
          persistentVolumeClaim:
            claimName: tutorial
在该例中,spec.template.spec 字段定义所要创建的 Pod 的规约:
- 指示 Pod 运行一个 
notebook容器 (spec.template.containers),该容器运行的镜像是t9kpublic/torch-2.1.0-notebook:1.77.1,这是一个 Notebook 镜像; - 通过 
spec.template.spec.volumes,spec.template.containers[].volumeMounts指示挂载网络文件系统 PVCtutorial到/t9k/mnt; - 通过 
spec.template.spec.containers[].resources指定使用的 CPU、memory、GPU 资源 。 
使用 GPU
Notebook 支持通过申请使用 GPU 资源,例如:
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
  name: tutorial
spec:
  type: jupyter
  template:
    spec:
      containers:
        - name: notebook
          image: t9kpublic/torch-2.1.0-notebook:1.77.1
          volumeMounts:
            - name: workingdir
              mountPath: /t9k/mnt
          resources:
            limits:
              cpu: '16'
              memory: 32Gi
              nvidia.com/gpu: 1
          command: []
      volumes:
        - name: workingdir
          persistentVolumeClaim:
            claimName: tutorial
在该例中:
- 申请使用 16 个 CPU、32Gi 内存以及一个 NVIDIA GPU;系统会自动将 Notebook 调度到集群中某个能提供这些资源的节点上。
 
SSH 访问
Notebook 提供运行 SSH Server 的支持。下面的 Notebook 示例运行一个支持 SSH 连接的 JupyterLab 镜像:
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
  name: tutorial
spec:
  type: jupyter
  template:
    spec:
      containers:
        - name: notebook
          image: t9kpublic/torch-2.1.0-notebook:1.77.1
          volumeMounts:
            - name: workingdir
              mountPath: /t9k/mnt
          resources:
            limits:
              cpu: '16'
              memory: 32Gi
              nvidia.com/gpu: 1
      volumes:
        - name: workingdir
          persistentVolumeClaim:
            claimName: tutorial
  ssh:
    authorized_keys:
      - example-user
    enabled: true
    serviceType: ClusterIP
在该例中,用户:
- 设置 
spec.ssh.enabled字段的值为true,T9k 系统将会自动创建一个处理 SSH 请求的Service; - 通过 
spec.ssh.serviceType字段指定服务类型为ClusterIP; - 设置自动挂载存放在 
Secret/example-user中的用户 SSH key; 
使用此 SSH 服务需要通过 t9k-pf 工具进行端口转发。
资源回收
T9k 系统提供空闲 Notebook 资源回收的支持。系统在检测到 Notebook 处于空闲状态并超过一定时长时,就会自动删除工作负载以释放计算资源。目前,资源回收仅针对 Jupyter 类型的 Notebook,其他类型(例如 RStudio)的 Notebook 不会被回收。
管理员可设置回收策略,使得:
- Notebook 没有活跃运行超过 1h (管理员可修改此时长)后,标记该 Notebook 为 
Idle。 - Notebook 进入 
Idle状态超过 24h (管理员可修改此时长)后,删除该 Notebook 底层工作负载。 
如果需要再次使用该 Notebook,你可以在模型构建控制台中手动点击恢复按钮。
Notebook 镜像
T9k 提供了一些预先构建的镜像,与 JupyterLab 原生镜像相比内置了更丰富的工具包,请参阅 Notebook 标准镜像列表。
在这些镜像中:
- 默认启动一个 JupyterLab 服务。
 - 预装了 Python3 以及 
tensorflow、pytorch、keras、pandas、scikit-learn等常用 Python 包。 - 身份是一个名为 
t9kuser的非root用户(用户 ID 为 1000,组 ID 为 1000),$HOME目录为/t9k/mnt。 - 预装了 
tensorboard插件,你可以在网页中创建 TensorBoard 以可视化数据。 
用户也可以自行构建镜像,并上载到镜像 registry 中供使用。
下一步
用户可尝试如下功能:
参考
- T9k 提供的 Notebook 标准镜像列表
 - JupyterLab 文档