Golden Job 构建流程

Posted by Ivens on July 3, 2020

写给谁看:

  • 项目运维人员
  • 项目开发人员
  • 平台管理员

业务流程

简介

人工智能实训平台 是一个基于 Microsoft 开源的 pai 项目,以此作为资源调度工具,在其上封装了一些常用的 to B 服务,以此完成一个面向机构的人工智能实训平台。

核心功能

  • 为普通用户提供一个可以一键启动的 AI 开发环境。

优势

  • 与 Microsoft 的 pai 并非强耦合关系
  • 对 Azure 云服务不是强需求,可以用其他公有云、私有云、混合云、物理机替代
  • 一键启动环境,确实方便多了

项目架构图

技术栈选型

名词解释

每一个学生创建环境后,open pai 平台会创建对应的 Job,这个 Job 对应的则是一个 docker container,而每个 Job 都是互相独立的,他们从哪里来的呢?项目中设置了一种 Golden Job,可以理解为普通 Job 的模板。而这每一个 Golden Job 则对应了一个包含了特殊数据集,课件,环境的 docker image。

1. Job:

Platform for AI 中的任务,对应实训平台课程中的环境

2. Golden Job:

Platform for AI 中用户环境创建的 Job 的模板。

3. Docker Image

Golden Job 的数据集,课件,环境的镜像。

操作步骤

1、 找到需要替换的文件

下文以修改 Jupyter Notebook & VSCode 中的主题 logo 举例。

首先我们进入 Platform for AI 中,找到一个正在 RunningGolden Job,点击进入详情。

我们可以看到有一个 IP 和 一个 Port, 我们把这两个值输入到地址栏,如果这个 Job 是正在进行中的,那么我们可以看到如下的页面。

image-20200703214008948

可能之前用过 Jupyter Notebook 的人,看到这个就会觉得还挺亲切的了。

那么现在我们先找一下对应的这个 logo,存放在什么路径中,做一个同名替换即可。

就是如下路径,我们直接在这里替换,这只会是一次性的,下次当我们重置环境后,这些改动又会消失,注意,我们现在是在一个普通的 Job 中,要永久性地改动,那就要改动 Job 的爸爸—— Golden job, 然而 Golden Job 要想让他也持久化,那还是得找到根源——docker image

2、修改 DockFile & 打包

由于在此之前我们将 docker image 相关的文件夹利用 git 初始化了,所以找个服务器,clone 一下,这是文件目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[shaiic@vm01 openpai]$ tree
├── build.sh																	 # 这是一键 build + push 脚本
├── dockerfiles																 # 这里存放几个 docker image 的 DockerFile
│   ├── OOB1
│   │   ├── Dockerfile.bartu
│   │   ├── readme.txt
│   │   └── requirements.bartu.txt
│   ├── OOB2
│   │   └── Dockerfile.miniailab
│   ├── OOB3
│   │   └── Dockerfile.aiedu
│   └── OOB4
│       ├── Dockerfile.sjtu
│       ├── readme.txt
│       └── requirements.txt
├── README.md
└── yamls																				# 这个文件夹是用来存放 Golden Job 的配置文件
    ├── old
    │   ├── GoldenJupyterJobTemplate.yaml
    │   └── GolderJupyterReal_NotAdmin.yaml
    ├── OOB1-pythonBartu.yaml
    ├── OOB2-miniailab.yaml
    ├── OOB3-aiedu.yaml
    └── OOB4-tf.keras.gpu.yaml

哪里是我们要修改的地方呢?

  • dockerfiles/

本项目所有的 docker image 都存放在这个目录下,以 OOB1 举例,其中核心是 Dockerfile.bartu, 打开看看里面什么样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ cat dockerfiles/OOB1/Dockerfile.bartu

# the base image
#FROM openpai/standard:python_3.6-tensorflow_2.0.0-cpu
FROM shaiic/standard:ddebby.ai.v0.1.0

ADD requirements.bartu.txt /

# to support nfs share
RUN apt-get update
RUN apt-get install nfs-common -y

# install tensorflow packages we specified into the base environment
RUN pip install --trusted-host pypi.python.org -r requirements.bartu.txt

# download the coder binary, untar it, and allow it to be executed
RUN git clone https://github.com/bartuer/training_notebook.git /root/courses

# ==========================================================================
# 以上是一个 AI 学习课程的环境安装,从这里开始 定制logo的替换,分为两步:
# 	1. 删除之前的 logo 原文件
#		2. wget 下载自定义文件 & 重命名为 logo.png 或 favicon.ico 等

# remove logo and icons
RUN rm -f /opt/conda/lib/python3.7/site-packages/notebook/static/base/images/logo.png /opt/conda/lib/python3.7/site-packages/notebook/static/base/images/favicon.ico /opt/conda/lib/python3.7/site-packages/notebook/static/base/images/favicon-terminal.ico

# download images
RUN wget https://shaiictestblob01.blob.core.chinacloudapi.cn/share-all/logo.png -O /opt/conda/lib/python3.7/site-packages/notebook/static/base/images/logo.png
RUN wget https://shaiictestblob01.blob.core.chinacloudapi.cn/share-all/icon.png -O /opt/conda/lib/python3.7/site-packages/notebook/static/base/images/favicon.ico
RUN wget https://shaiictestblob01.blob.core.chinacloudapi.cn/share-all/icon.png -O /opt/conda/lib/python3.7/site-packages/notebook/static/base/images/favicon-terminal.ico

好了,按下 Esc, 输入 :wq 保存退出。

接下来是打包镜像了,输入以下命令:

1
docker build -f <要build的DockerFile文件名称> -t <Docker Hub用户名>/<image名>:<tag号> .

然后输入以下指令查看是否打包成功:

1
$ sudo docker images | grep <image名>

看看打印出的列表是否有你之前打包好的 image,如果有,那代表 build 成功了,现在就到下一步,把 image 推送到 Docker Hub 上。输入以下指令:

1
2
3
4
sudo docker login -u <你的Docker Hub用户名>
... input password ...
sudo docker push <Your Docker Hub Account>/<image name>:<tag name>
example: sudo docker push shaiic/ai-edu:v1.0

最后,登录 Docker Hub 查看一下有没有更新即可。