diff --git "a/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" "b/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" index 50620af77a3bd2fbc474e73b5981c091ed30d5ae..c6ff1268c8aa4df8b53e19528c1794f384f83bd5 100644 --- "a/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" +++ "b/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" @@ -26,6 +26,8 @@ | 0011 | S,I | [openEuler多版本内核支持](oEEP-0011%20openEuler多版本内核支持.md) | 刘恺 kai.liu at xfusion.com | 2023-08-09 | | 0012 | P,I | [openEuler软件包非upstream支持多架构代码提交规则](oEEP-0012%20openEuler软件包非upstream支持多架构代码提交规则.md) | 叶青龙 yeqinglong@kylinsec.com.cn,胡欣蔚 shinwell_hu at openeuler.sh | 2023-08-17 | | 0013 | P,I | [openEuler SIG 组孵化流程优化](oEEP-0013%20openEuler%20SIG%20组孵化流程优化.md) | 熊伟 (xiongwei888 at huawei dot com) 胡欣蔚 (shinwell_hu at openeuler dot sh) +| 0014 | P,I | [openEuler AI容器镜像软件栈规范](oEEP-0014%20openEuler%20AI容器镜像软件栈规范.md) | 鲁卫军(wjunlu217 at gmail.com)| 2023-10-23 | +| 0015 | P,I | [openEuler官方虚拟机镜像发布流程](oEEP-0015%20openEuler官方虚拟机镜像发布流程.md) | 鲁卫军(wjunlu217 at gmail.com)| 2023-10-24 | ## oEEP 类型分类: - D (Document, 信息整理): 信息梳理形成的文档。此类 oEPP 包含社区索引,指南,规范或其他和 openEuler 相关的信息。 diff --git "a/oEEP/oEEP-0005 openEuler\345\256\230\346\226\271\345\256\271\345\231\250\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" "b/oEEP/oEEP-0005 openEuler\345\256\230\346\226\271\345\256\271\345\231\250\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" index 5071d6274f3bea1a941f8b8dcdb8be7b42f2e632..fa699dbde232d3b4a2feab066c1db5f327e9aaab 100644 --- "a/oEEP/oEEP-0005 openEuler\345\256\230\346\226\271\345\256\271\345\231\250\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" +++ "b/oEEP/oEEP-0005 openEuler\345\256\230\346\226\271\345\256\271\345\231\250\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" @@ -6,13 +6,13 @@ 状态: 活跃 编号: oEEP-0005 创建日期: 2023-05-10 -修订日期: 2023-05-10 +修订日期: 2023-10-23 --- ## 动机/问题描述: ### 初衷 -openEuler官方网站目前仅在发布了容器镜像的原始文件,如果未上传至任何三方docker镜像仓,开发者们不得不通过如下命令进行加载: +目前仅在openEuler官方网站发布了容器镜像的原始文件,如果未上传至任何三方docker镜像仓,开发者们不得不通过如下命令进行加载: ``` wget https://repo.openeuler.org/openEuler-20.03-LTS/docker_img/aarch64/openEuler-docker.aarch64.tar.xz docker load < openEuler-docker.aarch64.tar.xz @@ -36,7 +36,7 @@ docker run -ti openeuler-20.03-lts bash - 作为OpenStack的上游开发者,我希望基于openEuler容器镜像定制OpenStack Kolla(容器组件)。 - 作为HPC领域的运维人员,部分软件依赖容器镜像(例如[Warewulf 4](https://warewulf.org/docs/development/quickstart/el7.html#pull-and-build-the-vnfs-container-and-kernel)),我希望通过容器镜像快速部署HPC集群。 -### 相关SIG组及指责 +### 相关SIG组及职责 - openEuler Release SIG:发布原始容器镜像的版本及更新版本,协助集成容器官方发布至Release流程中,随版本推送容器镜像,由每个版本的Release Manager负责发布至https://repo.openeuler.org/。 - openEuler Infra SIG:负责一键发布组件的设计、开发与维护,集成容器官方发布至Release流程中,由Infra SIG的维护者进行代码审核和最终镜像发布到容器镜像仓。 - openEuler Cloud Native SIG:负责原始容器镜像的裁剪、发布及代码审核。 @@ -44,6 +44,7 @@ docker run -ti openeuler-20.03-lts bash ### 本oEEP解决的问题 - 问题1:当前容器镜像发布至第三方仓流程未集成至Release流程,需要在版本发布后一天,人为触发。 - 问题2:当前Release发布的原始文件(openEuler-docker.aarch64.tar.xz),仅在首个版本进行发布,而update版本未进行发布。 +- 问题3:当前缺少AI容器发布到第三方仓库的流程,需要进行规范。 ## 方案的详细描述: ### 1. 命名、标签规则 @@ -73,7 +74,14 @@ docker run -ti openeuler-20.03-lts bash https://gitee.com/openeuler/openeuler-docker-images ### 3. 代码合入与审核 -1. 上传:上传dockerfile、脚本至openeuler-docker-images仓库。 +1. 上传:上传dockerfile、meta.yml、脚本至openeuler-docker-images仓库。 + +特殊地,meta.yml用于制作AI容器镜像,其中每一对的内容如下: +- tag: 镜像的标签 +- file: 制作镜像的Dockerfile + +因此,AI容器镜像的标签不遵循上文对原始容器镜像的标签规范。 + 2. 审核:由Cloud Native SIG Maintainer进行审核后合入。 ### 4. 发布流程 @@ -86,7 +94,7 @@ https://repo.openeuler.org/openEuler-{VERSION}/docker_img/update/YYYY-MM-DD/ ;最新update版本覆盖拷贝至:https://repo.openeuler.org/openEuler-{VERSION}/docker_img/update/current/。 2. 通过"一键发布工具"获取发布的容器原始文件,发布至第三方容器仓库。 -- "一键发布工具" [eulerpublisher](https://gitee.com/openeuler/eulerpublisher)已经上线,由openEuler Infrastructure SIG维护,形式如下: +- "一键发布工具"——[EulerPublisher](https://gitee.com/openeuler/eulerpublisher)已经上线,由openEuler Infrastructure SIG维护,形式如下: ``` - 获取: eulerpublisher container prepare --version ${VERSION} @@ -98,5 +106,11 @@ eulerpublisher container check --version ${VERSION} --repo openeuler/openeuler - 一键获取、测试、推送 eulerpublisher container publish --version ${VERSION} --repo openeuler/openeuler ``` -- 目前[eulerpublisher](https://gitee.com/openeuler/eulerpublisher)通过Jenkins任务进行容器进行镜像发布(例如20.03、22.03维护版本的update[发布](https://jenkins.osinfra.cn/job/luweijun/job/eulerpublisher/47/))。 +- 目前EulerPublisher通过Jenkins任务进行容器进行镜像发布(例如20.03、22.03维护版本的update[发布](https://jenkins.osinfra.cn/job/luweijun/job/eulerpublisher/47/))。 + +3. 通过"一键发布工具",基于原始容器制作AI容器镜像,发布至第三方容器仓库。 +``` +# EulerPulisher一键发布AI容器镜像 +eulerpublisher container publisher --meta meta.yml +``` diff --git "a/oEEP/oEEP-0014 openEuler AI\345\256\271\345\231\250\351\225\234\345\203\217\350\275\257\344\273\266\346\240\210\350\247\204\350\214\203.md" "b/oEEP/oEEP-0014 openEuler AI\345\256\271\345\231\250\351\225\234\345\203\217\350\275\257\344\273\266\346\240\210\350\247\204\350\214\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..42dc20211fddbb4d74fb733d8434e53c6eb80427 --- /dev/null +++ "b/oEEP/oEEP-0014 openEuler AI\345\256\271\345\231\250\351\225\234\345\203\217\350\275\257\344\273\266\346\240\210\350\247\204\350\214\203.md" @@ -0,0 +1,58 @@ +--- +标题: openEuler AI容器镜像软件栈规范 +类别: 流程设计 +摘要: 描述openEuler AI容器镜像软件栈分层、tag规范 +作者: 鲁卫军(wjunlu217 at gmail.com) +状态: 初始化 +编号: oEEP-0014 +创建日期: 2023-10-20 +修订日期: 2023-10-20 +--- + +## 动机与目标 +NVIDIA、AMD、昇腾等不同算力供应方分别推出各自的SDK以及各种AI加速库,但是多样性的算力和软件环境差异给用户部署AI应用带来了诸多不便。为了改善这一问题,不同厂商分别发布了对应各自算力的AI容器镜像,用户只需要在目标环境中加载镜像并启动容器,这大大减少了应用部署和环境配置的时间,使得AI模型的使用过程更加高效。 + +在此背景之下,制作和发布基于openEuler的AI容器镜像变得越来越迫切。但是目前对开发者制作相应AI容器镜像的指导非常匮乏,不同场景的容器镜像应该预装哪些软件?镜像Tag如何规范? + +### 现状 +目前主流厂商发布AI容器镜像的预装软件内容及Tag示例如下表所示 +| | NVIDIA | AMD | +|-----------|------------|---------| +| Softwares | `base`: CUDA runtime (cudart)
`runtime`: `base` + CUDA math libraries + NCCL + cuDNN
`devel`: `runtime` + tools for building CUDA images | ROCm + pytorch
ROCm + tensorflow | +| Tags | `-base/runtime/devel-`
for example, `12.2.0-runtime-ubuntu20.04` | - `rocm__py_pytorch_`
- `rocm--tf-dev`
for example, `rocm5.7_ubuntu22.04_py3.10_pytorch_2.0.1` | + +1. 软件栈 + +- NVIDIA提供的`base`镜像(见[https://hub.docker.com/r/nvidia/cuda](https://hub.docker.com/r/nvidia/cuda))中封装的CUDA和cuDNN来自于[gitlab.com/nvidia/cuda](https://gitlab.com/nvidia/container-images/cuda) ,`runtime`镜像中的nvidia-container-runtime来自于 https://github.com/NVIDIA/nvidia-container-runtime。 +- AMD的镜像(见https://hub.docker.com/r/rocm/pytorch、https://hub.docker.com/r/rocm/tensorflow)中预装了ROCm(https://github.com/RadeonOpenCompute/ROCm)、pytorch或tensorflow、以及配套的python版本。 + +尽管不同厂商镜像中预装的软件内容存在差异,但软件栈分层基本相似,加上大模型应用,则AI容器镜像可归纳为以下几层 +```mermaid +graph LR; +A[(
LLMs
Tools
AI Framework
SDK)] +``` +- LLMs: 大模型应用 +- Tools: 模型配套工具 +- AI Framework: AI框架,如pytorch, tensorflow等 +- SDK: 提供不同算力的SDK + + +2. 镜像TAG + +综合来看,NVIDIA和AMD的AI容器镜像tag一般由镜像中预装软件和版本信息组合而成,通常为:`--` + +### 本oEEP的目的 +指导不同算力设备的开发者,如何制作基于openEuler的AI容器镜像。 + +## 方案描述 + +### 镜像内容及Tag规则 +- 基础SDK镜像:包含不同算力SDK的基础镜像,Tag为`-oe`,例如,cann7.0.RC1.alpha002-oe2203sp2 +- AI框架镜像:在基础SDK镜像之上,包含AI框架的镜像,Tag为`--oe`,例如,pytorch2.1.0-cann7.0.RC1.alpha002-oe2203sp2 +- 大模型应用镜像:在AI框架镜像之上,包含AI应用的镜像`---oe`,例如,chatglm6b-cann7.0.RC1.alpha002-pytorch2.1.0-oe2203sp2表示部署chatglm-6b大模型、包含cann-7.0.RC1.alpha002和pytorch 2.1.0的openEuler-22.03-LTS-SP2容器镜像 + +对应开发环境的容器镜像,其Tag除上述信息外在尾部增加`-dev`字段显式标明,如:pytorch2.1.0-cann7.0.RC1.alpha002-oe2203sp2-dev。 + +### 镜像发布(参考[oEEP-0005](./oEEP-0005%20openEuler%E5%AE%98%E6%96%B9%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E5%8F%91%E5%B8%83%E6%B5%81%E7%A8%8B.md)) +- AI容器镜像构建依赖meta.yml文件,文件内每一对指明构建镜像的Tag和Dockerfile +- AI容器镜像由EulerPublisher根据meta.yml构建并发布到对应的镜像仓库 diff --git "a/oEEP/oEEP-0015 openEuler\345\256\230\346\226\271\350\231\232\346\213\237\346\234\272\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" "b/oEEP/oEEP-0015 openEuler\345\256\230\346\226\271\350\231\232\346\213\237\346\234\272\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..d9fbe8c32a7c6c22a3fd2d573f527414e6ca3a50 --- /dev/null +++ "b/oEEP/oEEP-0015 openEuler\345\256\230\346\226\271\350\231\232\346\213\237\346\234\272\351\225\234\345\203\217\345\217\221\345\270\203\346\265\201\347\250\213.md" @@ -0,0 +1,50 @@ +--- +标题: openEuler官方虚拟机镜像发布流程 +类别: 流程设计 +摘要: 官方虚拟机镜像发布流程定义 +作者: 鲁卫军 (wjunlu217 at gmail.com) +状态: 活跃 +编号: oEEP-0015 +创建日期: 2023-10-24 +修订日期: 2023-10-24 +--- + +## 动机/问题描述: +目前发布在openEuler官方网站的虚拟机镜像存在以下问题: +1. 发布镜像预安装的基础软件缺失,如wget, hostname, unzip等,导致用户首次在openEuler上部署应用时经常失败。 +2. 发布镜像没有针对云场景进行适配,发布的虚拟机镜像因缺乏关键的cloud-init组件在导入公有云平台时经常失败。 +3. 除此以外,没有update发布流程,使得用户无法体验openEuler每个版本的最新特性。 + +如何决策虚拟机镜像中预安装软件的内容、用户如何按照自身需求定制镜像,以及如何发布更新版本这一系列流程需要被规范。 + +### 本oEEP解决的问题 +- 问题1:虚拟机镜像发布版本如何决策预置软件的内容、用户如何根据发布的镜像进行私有化定制。 +- 问题2:当前Release发布的虚拟机镜像,仅在首个版本进行发布,而update版本未进行发布。 + +## 方案的详细描述: +### 1. 相关SIG组及职责 +1. openEuler Gate Keeper SIG:负责官方虚拟机镜像的构建、裁剪,以及构建组件的代码合入,代码仓库为 https://gitee.com/openeuler/openeuler-os-build 和 https://gitee.com/openeuler/CreateImage/ +2. openEuler Release SIG:负责发布虚拟机镜像的原始版本及更新版本,由每个版本的Release Manager发布镜像至 https://repo.openeuler.org/;同时,由Release Manager负责每个版本镜像预装软件范围变更的审核 +3. openEuler Infra SIG:负责一键发布组件EulerPublisher的设计、开发与维护,基于 https://repo.openeuler.org/ 发布的镜像,向用户提供不同使用场景下镜像预安装软件的定制能力 + + +### 2. 预置软件变更 +1. 虚拟机镜像内预安装软件清单rpmlist保存在 https://gitee.com/openeuler/release-management 仓库,形式如下 +``` +# rpmlist示例 +kexec-tools +net-tools +iproute +... + +``` +2. 镜像预置软件范围需要变更时,通过提交PR来修改rpmlist文件,并由Release Manager审核合入后生效 + +### 3. 发布流程 +由Release SIG发布"openEuler-{VERSION}-{ARCH}.qcow2.xz"至repo.openeuler.org。 +- (已有发布) 对于首个版本发布,发布至: +https://repo.openeuler.org/openEuler-{VERSION}/virtual_machine_img/ + +- (未有发布) 对于update版本发布,发布至: +https://repo.openeuler.org/openEuler-{VERSION}/virtual_machine_img/update/YYYY-MM-DD/ +;最新update版本覆盖拷贝至:https://repo.openeuler.org/openEuler-{VERSION}/virtual_machine_img/update/current/。