diff --git a/docs/admin.md b/docs/admin.md new file mode 100644 index 00000000..4bb7478e --- /dev/null +++ b/docs/admin.md @@ -0,0 +1,123 @@ +管理员管理注意事项: + +# 权限管理 + + - oa登录开发。登录方式可通过project.py文件定义的方式自行修改,或自行添加管理员专用接口。 + - rbac的权限管理方式。所有菜单或者模块的增删改查以及所有的后端接口都是有权限控制的,可以在Security中自由控制 + - 用户登录后会自动创建以及绑定用户名同名的角色。同时绑定gamma角色,加入public项目组 + +# 项目组->模板分类 + +expand字段 +```bash +{ + "index":2 # index 控制该分组下面的job模板在pipeline编排界面左侧的显示顺序 +} +``` + +# 项目组->项目分组 +### 跨k8s集群调度的支持: + +需要在config.py文件中配置CLUSTERS,并通过ENVIRONMENT环境变量指定控制台所在的集群。其他集群为训练集群。 + +项目组/项目分组中,可通过项目组的expand字段控制项目组的调度集群 + + { + "cluster": "dev" + } + +### 机器划分项目组 +机器通过label进行管理,所有的调度机器由平台控制,不由用户直接控制。 + +- 对于cpu的train/notebook/service会选择cpu=true的机器 +- 对于gpu的train/notebook/service会选择gpu=true的机器 + +- 训练任务会选择train=true的机器 +- notebook会选择notebook=true的机器 +- 服务化会选择service=true的机器 +- 不同项目的任务会选择对应org=xx的机器。默认为org=public + +管理标注哪些机器属于哪些项目后,可通过项目组的expand字段控制项目组的调度机器 + + { + "node_selector": "org=public" + } + +# 在线开发->notebook + +定时任务中配置了notebook的定时清理和提醒用户续期,没有及时续期的notebook会被删除。容器消失后环境丢失 + +# 在线开发->镜像调试 + +在线调试镜像,保存按钮会自动commit/push到仓库,当晚也会自动释放 + +# 训练->仓库 + +仓库中的k8s hubsecret 以及账号密码,在保存时会更新到配置的所有集群中的各个命名空间下。并且发生用户拉起pod的情况也会附带上用户配置的k8s hubsecret以及config.py中配置的公共k8s hubsecret。 + +建议仓库拉取秘钥均在config.py中全局配置 + +# 训练->任务模板 + +### 版本: + +模板的release版本才能被用户看到 + +### 工作目录/启动命令: + +如果配置,则会覆盖镜像的启动目录和启动命令 + +### 挂载目录: + +会在task创建时添加模板的挂载项,一般用户需要固定挂载的模板会配置该参数(比如docker in docker 需要 docker.socket)。目前支持hostpath/pvc/memory/configmap几种挂载的配置方式 + +```bash +kubeflow-user-workspace(pvc):/mnt pvc的挂载方式,会自动在pvc下挂载个人子目录 +/data/k8s/kubeflow/pipeline/workspace/xxxx(hostpath):/mnt 挂载主机目录的方式 +4G(memory):/dev/shm 内存挂载为磁盘的书写方式 +kubernetes-config(configmap):/root/.kube 挂载configmap成文件夹 +``` + +### 环境变量: + +会附加给每个使用该模板的task + +模板中特殊的环境变量 +```bash +NO_RESOURCE_CHECK=true 使用该模板的task不会进行资源配置的自动校验 +TASK_RESOURCE_CPU=4 使用该模板的task 忽略用户的资源配置,cpu固定配置资源为4核 +TASK_RESOURCE_MEMORY=4G 使用该模板的task 忽略用户的资源配置,mem固定配置资源为4G +TASK_RESOURCE_GPU=0 使用该模板的task 忽略用户的资源配置,gpu固定配置资源为0卡 +``` +### k8s账号 + +为模板配置k8s账号,主要为那些需要操控k8s集群的模板而设定的。比如临时分布式训练集群的launcher端 + +### 扩展 + +```bash +{ + "index": 7, index控制在pipeline编排界面同一个模板分组中每个模板的显示顺序 + "help_url": "http://xx.xx.xx.xx/xx" help_url 为pipeline编排界面每个模板的帮助文档的地址显示 +} +``` + + +# 训练->任务流 + + - 先调试单独的task,再调试pipeline的原则。 + - task包含debug/run/log/clear等功能,通过run-id串联对应的pod和crd + - pipeline包含run/log/运行实例/定时调度记录/pod等功能。使用run-id串联所有的task + - 手动运行pipeline会先清空之前手动运行的pipeline实例(workflow) + - myapp/task/scheduler.py中会定时清理运行结束的pod,避免pod堆积过多 + - 在pieline正常运行10次以后,定时任务会取其中真实使用的资源最大值,再预留一定的空间,动态的修改用户配置的资源项,防止资源配置不合理而浪费算力 + + +# 训练->定时调度记录 + +手动运行和定时运行同一个pipeline相互之间不干扰。 + + + + + diff --git a/docs/develop.md b/docs/develop.md new file mode 100644 index 00000000..d00fe730 --- /dev/null +++ b/docs/develop.md @@ -0,0 +1,25 @@ +# 开发框架 +平台控制端为fab框架,可以参考https://github.com/tencentmusic/fab + +# 登录方式/首页内容/消息推送 +myapp/project.py中包含web首页的配置方式、登录的方式、推送消息的方式 + +# 定时任务的开发 +启动配置:config.py中CeleryConfig +代码开发:myapp/tasks/schedules.py + +# 监听crd变化 +代码开发:myapp/tools/watch_xx.py + +# 数据库的更新迭代 +myapp/migrations/versions + +# 数据库结构和视图(增删改查界面) +myapp/models +myapp/views + +# pipline编排界面前端 +myapp/vision + +# 权限管理的基础逻辑 +myapp/security.py \ No newline at end of file diff --git a/docs/example/images/readme.md b/docs/example/images/readme.md index 419d0e30..74b92491 100644 --- a/docs/example/images/readme.md +++ b/docs/example/images/readme.md @@ -10,13 +10,6 @@ ln -s /usr/bin/pip3 /usr/bin/pip pip install pip --upgrade -# 容器内使用git clone - - git clone [http://userName:password@](http://userName:password@/)链接 - 示例 - git clone http://pengluan:xxxx@git.code.oa.com/tme-data-infra/dev.git - - # ubuntu 容器基础工具的封装 RUN apt update @@ -72,64 +65,3 @@ cuda10.1-cuda10.0-cuda9.0-cudnn7.6 - ai.tencentmusic.com/tme-public/gpu:ubuntu18.04-python3.6-cuda10.1-cuda10.0-cuda9.0-cudnn7.6-base - -### tlinux - - mirrors.tencent.com/star_library/tlinux-64bit-v2.2.20170418:latest - -### python2.7 -##### cuda - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda9.0-cudnn7.6:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.4:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.6:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.1-cudnn7.6:latest -##### ttensorflow - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.1-cudnn7.6-nccl2.5.6-ttf1.15.2.1:latest -##### tensorflow - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda9.0-cudnn7.6-tf1.12:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.4-tf1.13:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.4-tf1.14:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.6-tf1.15:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.6-tf2.0:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.1-cudnn7.6-tf2.1:latest -##### pytorch1.4 - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.1-cudnn7.6-pytorch1.4-torchvision0.5:latest -##### horovod - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda9.0-cudnn7.6-tf1.12-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.4-tf1.13-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.4-tf1.14-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.0-cudnn7.6-tf2.0-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.1-cudnn7.6-tf2.1-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python2.7-cuda10.1-cudnn7.6-pytorch1.4-torchvision0.5-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - -### python3.6 -##### cuda - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda9.0-cudnn7.6:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.4:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.6:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6:latest -##### cuda10.1-cuda10.0-cuda9.0-cudnn7.6 - - csighub.tencentyun.com/tme-kubeflow/gpu:python3.6-cuda10.1-cuda10.0-cuda9.0-cudnn7.6-base - -##### ttensorflow - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-nccl2.5.6-ttf1.15.2.1:latest -#### tensorflow - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda9.0-cudnn7.6-tf1.12:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.4-tf1.13:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.4-tf1.14:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.6-tf1.15:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.6-tf2.0:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-tf2.1:latest -##### pytorch - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-pytorch1.4-torchvision0.5:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-pytorch1.5-torchvision0.6:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-pytorch1.6-torchvision0.7:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.2-cudnn8.0-pytorch1.6-torchvision0.7:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.2-cudnn8.0-pytorch1.5-torchvision0.6:latest -##### horovod - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda9.0-cudnn7.6-tf1.12-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.4-tf1.13-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.4-tf1.14-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.0-cudnn7.6-tf2.0-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-tf2.1-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - - mirrors.tencent.com/star_library/g-tlinux2.2-python3.6-cuda10.1-cudnn7.6-pytorch1.4-torchvision0.5-openmpi4.0.3-nccl2.5.6-ofed4.6-horovod:latest - diff --git a/docs/example/notebook/readme.md b/docs/example/notebook/readme.md deleted file mode 100644 index 85f4bf5c..00000000 --- a/docs/example/notebook/readme.md +++ /dev/null @@ -1,38 +0,0 @@ -# 在线notebook开发 - -### notebook支持类型 -1. Jupyter (cpu/gpu) -2. vscode(cpu/gpu) - -### 支持功能 -1. 代码开发/调试,上传/下载,命令行,git工蜂/github,内网/外网,tensorboard,自主安装插件 - -### 添加notebook -路径:在线开发->notebook->添加 - -![](../pic/tapd_20424693_1630648630_29.png) - -备注: -1. Running状态下,方可进入 -2. 无法进去时,reset重新激活 -3. notebook会自动挂载一下目录 - - a)个人工作目录到容器 /mnt/$username - - b)个人归档目录到容器/archives/$username - -### jupyter示例: - -![](../pic/tapd_20424693_1611142088_15.png) - -### vscode示例: - -![](../pic/tapd_20424693_1615455976_85.png) - -### 切换归档目录示例: - -![](../pic/tapd_20424693_1619156218_75.png) - -### tensorboard示例: - -进入到对应的日志目录,再打开tensorboard按钮 - -![](../pic/tapd_20424693_1630381219_76.png) diff --git a/docs/example/pipeline/readme.md b/docs/example/pipeline/readme.md deleted file mode 100644 index 62ac1bc9..00000000 --- a/docs/example/pipeline/readme.md +++ /dev/null @@ -1,69 +0,0 @@ -# 配置/调试/定时运行pipeline - -### 创建pipeline - -路径:训练->任务流->新建 - -![](../pic/tapd_20424693_1630650436_41.png) - -主要配置: 参考每个配置参数的描述 - -### 编排pipeline - -![](../pic/tapd_20424693_1630651816_13.png) - -task公共参数:参考每个配置的描述 -task的模板参数:参考每个模板的链接教程文档 - -### 运行调试 - -##### task运行调试: - -使用task的run按钮和log按钮可单独调试一个task - -![](../pic/tapd_20424693_1630652726_69.png) - -##### pipeline运行调试: - -pipeline的运行按钮发起调度 - -![](../pic/tapd_20424693_1630652948_17.png) - -##### pipeline日志效果: - -![](../pic/tapd_20424693_1606994509_86.png) - -### pod查看示意图 - -![](../pic/tapd_20424693_1630652786_45.png) - -pod效果: - -![](../pic/tapd_20424693_1630652346_97.png) - -### 实例记录 - -![](../pic/tapd_20424693_1630652888_5.png) - -调度实例记录。停止可以清除调度容器 - -![](../pic/tapd_20424693_1630652863_77.png) - -### 定时调度 - -配置定时:pipeline编辑界面 - -![](../pic/tapd_20424693_1630653430_19.png) - -查看路径:训练-定时调度记录 - -![](../pic/tapd_20424693_1630567772_14.png) - -字段说明:执行时间为这个pipeline本次调度该发起的时间点 -状态:comed,为调度配置已经产生。created为调度已经发起。 - -##### 操作说明 - - 1、平台会根据pipeline的配置决定是否发起调度。 - 2、状态链接中可以看到本地调度发起的workflow的运行情况 - 3、日志链接中可以看到本地调度发起的日志 diff --git a/docs/example/readme.md b/docs/example/readme.md index f9e57226..eed7eec2 100644 --- a/docs/example/readme.md +++ b/docs/example/readme.md @@ -1,16 +1,11 @@ -# 新手文档 - -### 平台地址: -http://kubeflow.tke.woa.com/ - -### 文档目录 +# 文档目录 example - notebook # 在线notebook使用 - job-template # 模板制作与使用 - - pipeline: # 任务流使用 + - pipeline: # 任务流使用 - images # 镜像制作 && 常用基础镜像 -### 基础认识: +# 基础认识: __容器__:对于建模人员,可以认为容器是一个轻量的虚拟机,一个机器可以同时启动多个容器,容器之间资源是隔离的。在平台上运行的任务,最终都会以容器内进程的形式运行在实体机上。所有容器的/mnt目录下都是自己的个人工作目录,容器重启后环境消失。 @@ -24,23 +19,159 @@ __运行实例__:任务流的一次运行。 __notebook__:开启一个jupyter-notebook,自动挂载个人工作目录。有jupyter、vscode两种模式 -### 加入项目组 +# 加入项目组 + +### 申请加入项目组 + 路径:项目组->项目分组,oa联系creator将自己加入到项目组中 ![](./pic/tapd_20424693_1630649794_35.png) + 备注: - 每个人自动都在public项目组中 - 可自行创建项目组 - -项目组控制调度集群(管理员学习) +- 每个人自动都在public项目组中 +- 可自行创建项目组 - 平台支持跨集群调度。需要管理员创建集群并配置到系统配置后,可通过项目组的expand字段控制项目组的调度集群 +### creator添加用户 + +路径:项目组->项目分组。编辑项目组,添加组成员。creator角色的组成员可以添加其他用户进组 + +### 项目组控制调度集群(管理员学习) + +平台支持跨集群调度。需要管理员创建集群并配置到系统配置后,可通过项目组的expand字段控制项目组的调度集群 + { "cluster": "dev" } -项目组控制调度机器(管理员学习) - 平台支持单集群中划分资源组。需要管理员配置不同机器所属的资源组后,可通过项目组的expand字段控制项目组的调度机器 +### 项目组控制调度机器(管理员学习) + +平台支持单集群中划分资源组。需要管理员配置不同机器所属的资源组后,可通过项目组的expand字段控制项目组的调度机器 + { "node_selector": "org=public" } + + +# 在线notebook开发 + +### notebook支持类型 +1. Jupyter (cpu/gpu) +2. vscode(cpu/gpu) + +### 支持功能 +1. 代码开发/调试,上传/下载,命令行,git工蜂/github,内网/外网,tensorboard,自主安装插件 + +### 添加notebook +路径:在线开发->notebook->添加 + +![](./pic/tapd_20424693_1630648630_29.png) + +备注: +1. Running状态下,方可进入 +2. 无法进去时,reset重新激活 +3. notebook会自动挂载一下目录 + - a)个人工作目录到容器 /mnt/$username + - b)个人归档目录到容器/archives/$username + +### jupyter示例: + +![](./pic/tapd_20424693_1611142088_15.png) + +### vscode示例: + +![](./pic/tapd_20424693_1615455976_85.png) + +### 切换归档目录示例: + +![](./pic/tapd_20424693_1619156218_75.png) + +### tensorboard示例: + +进入到对应的日志目录,再打开tensorboard按钮 + +![](./pic/tapd_20424693_1630381219_76.png) + + +# 在线构建镜像 + +![](./pic/tapd_20424693_1630748567_87.png) + +### 常用基础镜像 + +### ubuntu +- ai.tencentmusic.com/tme-public/ubuntu-gpu:cuda10.1-cudnn7 +- ai.tencentmusic.com/tme-public/ubuntu-gpu:cuda10.1-cudnn7-python3.6 +- ai.tencentmusic.com/tme-public/ubuntu-gpu:cuda10.1-cudnn7-python3.7 +- ai.tencentmusic.com/tme-public/ubuntu-gpu:cuda10.1-cudnn7-python3.8 +- ai.tencentmusic.com/tme-public/gpu:ubuntu18.04-python3.6-cuda10.1-cuda10.0-cuda9.0-cudnn7.6-base + + +# 配置/调试/定时运行pipeline + +### 创建pipeline + +路径:训练->任务流->新建 + +![](./pic/tapd_20424693_1630650436_41.png) + +主要配置: 参考每个配置参数的描述 + +### 编排pipeline + +![](./pic/tapd_20424693_1630651816_13.png) + + - task公共参数:参考每个配置的描述 + - task的模板参数:参考每个模板的链接教程文档 + +### 运行调试 + +##### task运行调试: + +使用task的run按钮和log按钮可单独调试一个task + +![](./pic/tapd_20424693_1630652726_69.png) + +##### pipeline运行调试: + +pipeline的运行按钮发起调度 + +![](./pic/tapd_20424693_1630652948_17.png) + +##### pipeline日志效果: + +![](./pic/tapd_20424693_1606994509_86.png) + +### pod查看示意图 + +![](./pic/tapd_20424693_1630652786_45.png) + +pod效果: + +![](./pic/tapd_20424693_1630652346_97.png) + +### 实例记录 + +![](./pic/tapd_20424693_1630652888_5.png) + +调度实例记录。停止可以清除调度容器 + +![](./pic/tapd_20424693_1630652863_77.png) + +### 定时调度 + +配置定时:pipeline编辑界面 + +![](./pic/tapd_20424693_1630653430_19.png) + +查看路径:训练-定时调度记录 + +![](./pic/tapd_20424693_1630567772_14.png) + +字段说明:执行时间为这个pipeline本次调度该发起的时间点 +状态:comed,为调度配置已经产生。created为调度已经发起。 + +##### 操作说明 + + 1、平台会根据pipeline的配置决定是否发起调度。 + 2、状态链接中可以看到本地调度发起的workflow的运行情况 + 3、日志链接中可以看到本地调度发起的日志 diff --git a/docs/module.md b/docs/module.md new file mode 100644 index 00000000..6161f2a0 --- /dev/null +++ b/docs/module.md @@ -0,0 +1,8 @@ +# 各pod功能 +平台控制端为fab框架,可以参考https://github.com/tencentmusic/fab + + - deploy.yaml为前后端服务的容器 + - deploy-schedule.yaml为产生平台celery任务的pod(非pipeline任务) + - deploy-worker.yaml为执行平台celery任务的pod(非pipeline任务) + - deploy-watch.yaml为监听容器,会监听平台中的crd的状态变化,进而更新数据库和推送消息 +