其他
云原生的弹性 AI 训练系列之三:借助弹性伸缩的 Jupyter Notebook,大幅提高 GPU 利用率
高策,腾讯高级工程师,Kubeflow 训练和自动机器学习工作组 Tech Lead,负责腾讯云 TKE 在 AI 场景的产品研发和支持工作。
Jupyter Notebooks 在 Kubernetes 上部署往往需要绑定一张 GPU,而大多数时候 GPU 并没有被使用,因此利用率低下。为了解决这一问题,我们开源了 elastic-jupyter-operator[1],将占用 GPU 的 Kernel 组件单独部署,在长期空闲的情况下自动回收,释放占用的 GPU。这篇文章主要介绍了这一开源项目的使用方式以及工作原理。
资源利用率的问题
jupyter notebook $CODE_PATH
等命令,在本地运行 Jupyter Notebook Server,随后访问浏览器中的 Jupyter 交互式开发界面。当代码需要执行时,Notebook Server 会创建一个独立的 Kernel 进程,这一进程会使用 GPU 等运行。在 Kernel 长期空闲,没有代码需要执行时,这一进程会被终止,GPU 也就不再会被占用。解决方案
简单的例子
apiVersion: kubeflow.tkestack.io/v1alpha1
kind: JupyterNotebook
metadata:
name: jupyternotebook-elastic
spec:
gateway:
name: jupytergateway-elastic
namespace: default
auth:
mode: disable
apiVersion: kubeflow.tkestack.io/v1alpha1
kind: JupyterGateway
metadata:
name: jupytergateway-elastic
spec:
cullIdleTimeout: 3600
image: ccr.ccs.tencentyun.com/kubeflow-oteam/enterprise-gateway:2.5.0
cullIdleTimeout
指定了经过多久的空闲时间后,其管理的 Kernel Pod 会被系统回收释放。$ kubectl apply -f ./examples/elastic/kubeflow.tkestack.io_v1alpha1_jupyternotebook.yaml
$ kubectl apply -f ./examples/elastic/kubeflow.tkestack.io_v1alpha1_jupytergateway.yaml
$ kubectl port-forward deploy/jupyternotebook-elastic 8888:8888
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
jovyan-219cfd49-89ad-428c-8e0d-3e61e15d79a7 1/1 Running 0 170m
jupytergateway-elastic-868d8f465c-8mg44 1/1 Running 0 3h
jupyternotebook-elastic-787d94bb4b-xdwnc 1/1 Running 0 3h10m
设计与实现
在介绍完使用方式后,我们简单介绍其设计与实现。
总结
License
This article is licensed under CC BY-NC-SA 3.0[3].
Please contact me for commercial use.
参考资料
elastic-jupyter-operator: 【https://github.com/tkestack/elastic-jupyter-operator/】
[2]elastic-jupyter-operator: 【https://github.com/tkestack/elastic-jupyter-operator/】
[3]CC BY-NC-SA 3.0: 【https://creativecommons.org/licenses/by-nc-sa/3.0/】
互动赢好礼
精读文章,回答问题赢好礼
Q1:elastic-jupyter-operator 的优势是什么?
Q2:elastic-jupyter-operator 一共有几个 CRD 构成?10月16日下午3点,由作者选出回答最佳的3位读者,送腾讯超可爱粉鹅一只。
往期精选推荐