-
Notifications
You must be signed in to change notification settings - Fork 822
在线开发
在云原生里面,所有的调度都是基于容器的。但是这一部分的门槛就比较高
1、算法工程师并不熟悉docker技术,另外部分环境在转化为dockerfile中浪费了很多时间,并且可能在编写dockerfile时比较难,比如在一个镜像中安装多个cuda的场景。
2、基础镜像封装太多,用户也不知道该选择什么镜像。

对于有很多基础镜像的问题,cube采用的方案是仅封装cuba/python这类基础环境,对于再上层的环境,在任务运行时现场安装。也就是在基本的模板中都保留了能够让用户自定义初始化环境的命令的功能。毕竟对于长期运行的任务,安装环境的时间成本并不高。
在线开发是一个很重要的功能,对于大部分用户来说,在线的IDE比命令vim是要方便很多。cube主要提供了vscode和jupyter两种在线ide。并没有将代码和数据进行分割存储。所以在notebok中打开的就是完全用户自己的代码和数据,可以方便的进行调试。

需要说明的是,由于theia的功能中有些进程,例如rg进程,会不停的搜索扫描目录下的所有文件。由于个人目录下包含了用户的代码和用户的数据,文件可能非常多(千万到亿级别的文件数量)。这些进程扫描会严重拖慢分布式存储的性能。所以cube做了定时检杀的功能。
数据挖掘的用户使用jupyter会更多一些。在jupyter里面跟vscode里面相同,也安装了一些实用的插件,比如tensorboard,用户可以在jupyter里面打开pipeline中tf的log目录,然后使用tensorboard按钮启动tensorboard查看该训练的情况。
cube采用了两种方案,一种是独占资源同时定时清理,一种是只设置notebook的pod的limit,而不设置request,这种方案就对不资源进行独占,这样也就不用清理notebook,只是允许了notebook中的资源干扰。
如果notebook因为oom,定时清理,机器故障,主动reset等可能原因而重启,notebook中的环境就会丢失。所以cube添加了notebook启动后自动执行/mnt/$username/init.sh脚本,用户只需要在init.sh中定义notebook特定的环境,就可以在启动notebook后拥有自己独特的环境了。
每个用户可以配置多个notebook,可以自己配置资源,镜像,类型。每个notebook是通过istio virtualservice来代理的。所以只要notebook支持url prefix,就可以被加进来做为notebook。每个notebook实例,都有独立的以名称为prefix的url地址,在virtualservice配置绑定istio ingressgateway,这样来实现多实例。
