Skip to content

Commit

Permalink
update docs for version 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
gemfield committed Jun 25, 2021
1 parent 806a895 commit 485a569
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 70 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ jobs:
username: ${{ secrets.HUB_USERNAME }}
password: ${{ secrets.HUB_TOKEN }}
- name: Build the homepod base image
run: cd docker/11.0.3-cudnn8-devel-ubuntu20.04/ && docker build -t gemfield/homepod:11.0.3-cudnn8-devel-ubuntu20.04 .
run: cd docker/homepod/ && bash build_image.sh standard && bash build_image.sh pro
- name: Push Docker image
run: docker push gemfield/homepod:11.0.3-cudnn8-devel-ubuntu20.04
run: docker push gemfield/homepod
16 changes: 10 additions & 6 deletions HomePod/airlock.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ spec:
nodeName: ai05
containers:
- name: airlock
image: gemfield/homepod:1.1
image: gemfield/homepod:2.0
imagePullPolicy: IfNotPresent
workingDir: /opt/public/airlock
env:
Expand All @@ -19,18 +19,22 @@ spec:
value: /please_cd_to/opt/public/airlock
- name: DEEPVAC_USER
value: gemfield
- name: DEEPVAC_PASSWORD
value: gemfield
- name: GEMFIELD_MODE
value: VNCRDP
resources:
requests:
memory: "3Gi"
limits:
memory: "16Gi"
ports:
- name: tensorboard
containerPort: 6006
- name: vnc
containerPort: 5900
- name: novnc
containerPort: 7030
- name: sshd
containerPort: 22
livenessProbe:
httpGet:
path: /
Expand Down Expand Up @@ -65,14 +69,14 @@ spec:
externalIPs:
- 192.168.0.168
ports:
- port: 6007
targetPort: 6006
name: tensorboard
- port: 27031
targetPort: 7030
name: novnc
- port: 5901
targetPort: 5900
name: vnc
- port: 10022
targetPort: 22
name: sshd
selector:
app: airlock
13 changes: 7 additions & 6 deletions HomePod/homepod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ spec:
nodeName: ai03
containers:
- name: mlab-homepod
image: gemfield/homepod:1.1
image: gemfield/homepod:2.0
imagePullPolicy: IfNotPresent
workingDir: /home/gemfield
env:
Expand All @@ -20,14 +20,18 @@ spec:
value: /please_cd_to/home/gemfield
- name: DEEPVAC_USER
value: gemfield
- name: DEEPVAC_PASSWORD
value: gemfieldisacivilnetmaintainer
- name: GEMFIELD_MODE
value: VNCRDP
- name: MLAB_DNS
value: "192.168.0.114 ai1.gemfield.org"
resources:
requests:
memory: "6Gi"
limits:
memory: "24Gi"
ports:
- name: tensorboard
containerPort: 6006
- name: vnc
containerPort: 5900
- name: novnc
Expand Down Expand Up @@ -87,9 +91,6 @@ spec:
externalIPs:
- 192.168.0.34
ports:
- port: 6007
targetPort: 6006
name: tensorboard
- port: 27031
targetPort: 7030
name: novnc
Expand Down
139 changes: 94 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,76 +2,125 @@
“云上炼丹师”中的云。

# MLab构成
MLab是为云上炼丹师服务的云基础设施。由三个部分组成
MLab是为云上炼丹师服务的云基础设施。由两个部分组成
- MLab HomePod,迄今为止最先进的容器化PyTorch训练环境。
- MLab RookPod,迄今为止最先进的成本10万人民币以下存储解决方案。
- MLab HPC,适配MLab HomePod的硬件解决方案,版本号和HomePod保持一致。

以上三个MLab组件均为独立的产品,可以单独部署。这三个组件均由K8s进行编排,其宿主机OS基于Ubuntu Server LTS发行版(20.04)。
以上两个MLab组件均为独立的产品,可以单独使用docker进行部署,也可以使用k8s进行部署。其宿主机OS基于Ubuntu Server LTS发行版(20.04)。

# MLab HomePod
迄今为止最先进的容器化PyTorch训练环境。
MLab HomePod以Docker image形式封装,是我们的深度学习训练环境。 HomePod有着鲜明的特点:
- 基于最新的Ubuntu LTS(20.04);
- 基于最新的KDE Plasma(5.21.4);
- 基于最新的KDE Framework(5.82.0);
- 使用中国时区;
- 使用最新版本的PyTorch(1.8.1+);
- 使用最新版本的Conda(4.9.2);
- 使用比较新版本的CUDA(11.0.3);
- 使用比较新版本的MKL(2020.4.304);
- 使用最新版本的VS Code IDE(1.55);
- 使用最新版本的Firefox浏览器(87.0);
- 使用IBus sunpinyin中文输入法(1.5.22);
- 无缝使用Deepvac规范;
**迄今为止最先进的容器化PyTorch训练环境。**

目前只支持X86 + Linux。具体来说,支持如下的软硬件平台:
- X86 + Linux
- X86 + CUDA + Linux

因为MLab HomePod的首要目标是提供PyTorch模型训练环境,而MLab HomePod基于docker,因此,对于不支持PyTorch训练或者docker的软硬件平台,MLab HomePod不会去进行适配。

MLab HomePod以Docker image形式封装,是我们的深度学习训练环境。目前最新版本为2.0,分为标准版和pro版本。规格如下:

|参数项 |MLab HomePod 2.0 |MLab HomePod 2.0 pro |
|-------------------|----------------------|--------------------------|
|镜像 |gemfield/homepod:2.0 |gemfield/homepod:2.0-pro |
|OS |Ubuntu 20.04 |Ubuntu 20.04 |
|PyTorch |1.9.0 |1.9.0 |
|PyTorch CUDA运行时 |11.1 |11.1 |
|PyTorch CUDNN运行时|8.0.5 |8.0.5 |
|torchvision |0.10.0 |0.10.0 |
|torchaudio |0.9.0a0+33b2469 |0.9.0a0+33b2469 |
|torchtext |0.10.0 |0.10.0 |
|Conda |4.10.1 |4.10.1 |
|Python |3.8.8 |3.8.8 |
|numpy |1.20.2 |1.20.2 |
|cv2 |4.5.2 |4.5.2 |
|onnx |1.8.1 |1.8.1 |
|g++ |9.3.0 |9.3.0 |
|cmake |3.16.3 |3.16.3 |
|KDE Plasma |5.22.1 |5.22.1 |
|KDE Framework |5.83.0 |5.83.0 |
|时区 |中国 |中国 |
|protobuf-dev |3.6.1.3 |3.6.1.3 |
|protobuf python包 |3.17.3 |3.17.3 |
|pybind11-dev |2.4.3 |2.4.3 |
|xrdp |0.9.12 |0.9.12 |
|tigervnc |1.10.1 |1.10.1 |
|VS CODE IDE |1.57.1 |1.57.1 |
|Firefox |89.0.1 |89.0.1 |
|中文输入法 |IBus sunpinyin 2.0.3 |IBus sunpinyin 2.0.3 |
|coremltools |4.1 |4.1 |
|NCNN转换器 |20210525 |20210525 |
|TNN转换器 |0.3.0 |0.3.0 |
|MNN转换器 |1.2.0 |1.2.0 |
|tensorrt(转换器) ||8.0.0.3 |
|libboost-dev ||1.71.0 |
|CUDA开发库 ||11.3.1 |
|MKL静态库 ||2020.4-912 |
|pycuda包 ||2020.1 |

除了这些核心软件,MLab HomePod还有如下鲜明特色:
- 无缝使用DeepVAC规范;
- 无缝构建和测试libdeepvac;
- 包含有kdiff3、kompare、kdenlive、Dolphin、Kate、Gwenview、Konsole等诸多工具。

另外,标准版和pro版内容完全一致,除了pro版本增加了如下内容:
- tensorrt python包,可以用来将PyTorch模型转换为TensorRT模型;
- libboost-dev,用于C++开发者;
- CUDA开发库,用于基于cuda的开发,或者pytorch的源码编译;
- MKL静态库,用于基于mkl的开发,或者libtorch的静态编译;
- pycuda python包,用于运行TensorRT模型。

为了支持上述功能,pro版本的镜像足足增加了10个GB。也正是因为此,homepod从2.0版本开始拆分成了标准版和pro版。

## 1. 部署
MLab HomePod有三种部署方式:
- 纯粹的Docker命令行方式,部署且运行后只能在命令行里工作。
1. 纯粹的Docker命令行方式,部署且运行后只能在命令行里工作。
```bash
docker run --gpus all -it --entrypoint=/bin/bash gemfield/homepod:1.1
#有cuda设备
docker run --gpus all -it --entrypoint=/bin/bash gemfield/homepod:2.0
#没有cuda设备
docker run -it --entrypoint=/bin/bash gemfield/homepod:2.0
```

- 图形化的Docker部署方式,部署后可以在vnc客户端和浏览器中访问图形界面
2. 图形化的Docker部署方式,部署后可以在vnc客户端、rdp客户端、浏览器中访问图形界面
```bash
docker run --gpus all -it -p 7030:7030 -p 5900:5900 gemfield/homepod:1.1
#有cuda设备
docker run --gpus all -it -eGEMFIELD_MODE=VNCRDP -p 3389:3389 -p 7030:7030 -p 5900:5900 -p 20022:22 gemfield/homepod:2.0
#没有cuda设备
docker run -it -eGEMFIELD_MODE=VNCRDP -p 3389:3389 -p 7030:7030 -p 5900:5900 -p 20022:22 gemfield/homepod:2.0
```
参数中的端口号用途:
|端口号 | 协议 | 用途 |
|-------|------|------|
|3389 |rdp |用于rdp客户端,Windows远程桌面连接客户端|
|5900 |vnc |用于vnc客户端|
|7030 |http |用于浏览器|
|20022 |ssh |用于ssh客户端、sftp客户端、KDE Dolphin等|


- k8s集群部署方式(需要k8s集群运维经验,适合小团队的协作管理)。
请访问[基于k8s部署HomePod](./docs/k8s_usage.md)以获得更多注意事项
3. k8s集群部署方式(需要k8s集群运维经验,适合小团队的协作管理)。
请访问[基于k8s部署HomePod](./docs/k8s_usage.md)以获得更多部署信息

## 2. 登录
三种部署方式中的第一种无需赘述,后两种部署成功后使用图形界面进行登录和使用。支持两种使用方式:
三种部署方式中的第一种无需赘述,使用```docker exec -it```登录即可。后两种部署成功后使用图形界面进行登录和使用。支持两种使用方式:
- 1,浏览器(http://your_host:7030);
- 2,realvnc客户端:https://www.realvnc.com/en/connect/download/viewer/ 。realvnc公司承诺viewer永远免费使用。

其中,浏览器方式的优点是方便;VNC客户端方式的优点是流畅,且功能更多。
- 2,vnc客户端,比如realvnc客户端:https://www.realvnc.com/en/connect/download/viewer/ 。realvnc公司承诺viewer永远免费使用。
- 3,rdp客户端,比如KRDC、remmina、Windows远程桌面等。

## 3. 密码与登出
HomePod默认提供了用户:gemfield,初始密码:gemfield
## 3. 账户信息
MLab HomePod默认提供了如下账户信息:
- 用户:gemfield
- 密码:deepvac
- HOME:/home/gemfield

如果要改变该默认行为,请在docker命令行上(或者k8s yaml中)注入以下环境变量:
- DEEPVAC_USER=your_name
- DEEPVAC_PASSWORD=your_password
- HOME=/home/your_name
- DEEPVAC_USER=<my_name>
- DEEPVAC_PASSWORD=<my_password>
- HOME=<my_home_path>

为了安全,用户在初始登录HomePod后,需要:
- 修改自己的用户密码;
- 使用sudo命令修改root用户的密码;
- 公司和家庭以外环境使用HomePod需要提前报备;
- 离开电脑5分钟以上,需要手工锁定屏幕(KDE -> Leave -> Lock(Lock screen))。
## 4. 账户安全
为了安全,用户在初始登录MLab HomePod后,最好使用```passwd```命令来修改账户密码。并在日常使用中,做到离开电脑5分钟以上手工锁定屏幕(KDE -> Leave -> Lock(Lock screen))。

## 4. 文件权限问题解决
在HomePod中工作的时候,默认都在自己的用户下工作。如果遇到历史遗留文件的权限问题,那么可以使用sudo命令(1.1版本及以后):
- 如果该文件是自己所有,则使用chown命令将文件的owner更改为自己;
- 如果该文件是公共所有,则使用chmod命令将文件的read权限为所有人打开。

# MLab RookPod
迄今为止最先进的成本10万人民币以下存储解决方案。
(待补充)

# MLab HPC
适配MLab HomePod的硬件解决方案,版本号和HomePod保持一致。
(待补充)
21 changes: 10 additions & 11 deletions docs/k8s_usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,37 @@
在K8s集群上部署MLab HomePod,一方面可以获得更灵活和多元的功能,另外一方面也可以更好的对数据进行权限控制。

## 1. 部署
使用kubectl命令进行部署,部署后可以在vnc客户端和浏览器中访问图形界面。这种方式适合小团队的协作和管理
使用kubectl命令进行部署,部署后可以在vnc客户端、rdp客户端、浏览器中访问图形界面。这种方式适合团队的协作和管理
```bash
#针对自身的集群环境修改yaml后
kubectl apply -f HomePod/homepod.yaml
kubectl apply -f HomePod/airlock.yaml
kubectl apply -f HomePod/uploadmlab.yaml
kubectl apply -f HomePod/network.yaml
```

## 2. 网络策略
HomePod为组织内部使用的开发环境,因此默认配有较为严格的防火墙策略。在HomePod上,用户**只能连接MLab代码服务**。除此之外,用户无法访问(也不应该访问)**其它任何服务器**(首次发现某个漏洞的人,发30元红包)。
当MLab HomePod作为组织内部使用的开发环境时,默认配有较为严格的防火墙策略。在HomePod上,用户**只能连接MLab代码服务**。除此之外,用户无法访问(也不应该访问)**其它任何服务器**(首次发现某个漏洞的人,发30元红包)。

然而,用户在HomePod上仍然会有一些合理的(或者半合理的)联网需求,我们总结如下:
- 上传或者下载一些数据集到HomePod上(合理需求);
- 上传/下载一些数据集到HomePod上(合理需求);
- HomePod上使用包管理工具(pip、apt等)安装软件包(半合理需求);
- 下载HomePod上训练结果的输出,分发给客户或其它测试人员(半合理需求)。

为了实现这些合理或者半合理需求,我们提供了**Airlock Pod**(ai5.gemfield.org:27031,该地址取决于你的实际部署)。Airlock Pod和HomePod共享一个docker镜像,且共享/opt/public/airlock目录。区别在于3点:
为了实现这些合理或者半合理需求,我们提供了**Airlock Pod**(ai5.gemfield.org:27031,该地址取决于你的实际部署)。Airlock Pod和HomePod共享一个docker镜像(gemfield/homepod:$version),且共享/opt/public/airlock目录。区别在于3点:
- Airlock Pod可以访问外部网络;
- Airlock Pod对/opt/public/airlock 目录有写权限;
- Airlock Pod可以通过sftp挂载到本地(比如你的Dolphin);
- Airlock Pod没有隐私可言。

#### 2.1 上传或者下载一些数据集到HomePod上
使用Airlock Pod。一旦数据来到Airlock Pod的/opt/public/airlock目录下,用户可以从自己的HomePod中拷贝到自己的HomePod本地。
那么数据如何来到Airlock Pod的/opt/public/airlock目录下呢?有多种方法:
- 在Airlock Pod上使用ftp、wget、scp、git等工具,从外部环境下载到此目录;
- 使用http://ai5.gemfield.org:5212 (该地址取决于你的实际部署)上传服务上传(该服务支持webdav挂载到本地,详情请咨询管理员)。
- 使用sftp://ai5.gemfield.org:10022 (该地址取决于你的实际部署)上传(该服务支持sftp挂载到本地,详情请咨询管理员)。

#### 2.2 HomePod上使用包管理工具(pip、apt等)安装软件包
软件包按照被使用的普及程度分为两类:基础型软件包、特定软件包。
基础性软件包就是几乎人人都会用到的,比如numpy、cmake、cv2等;
基础性软件包就是几乎大部分炼丹人员都会用到的,比如numpy、cmake、cv2等;
特定软件包就是几乎只有自己的特定项目会使用到,比如fonttools。

基础软件包和特定软件包都提供了临时安装方法(所谓临时安装,就是在HomePod重启后会丢失):
Expand All @@ -45,15 +45,14 @@ gemfield@airlock:/opt/public/airlock/pip$ pip download <pip-package>
username@homepod:/opt/public/airlock/pip$ pip install *
```
- apt包临时安装:
```
```bash
# 在airlock上(这种方式下载deb包到当前目录)
gemfield@airlock:/opt/public/airlock/apt$ apt-get download <apt-package>
# 或者(这种方式下载该包及所有的依赖包到/var/cache/apt/archives)
gemfield@airlock:/opt/public/airlock/apt$ apt-get install --download-only <apt-package>

# 切换到homepod上
root@homepod:/opt/public/airlock/apt$ dpkg -i <apt-package>
username@homepod:/opt/public/airlock/apt$ sudo dpkg -i <apt-package>
```

此外,基础软件包应该固化到HomePod的image中。用户按照如下的方法提交固化申请:
Expand All @@ -65,7 +64,7 @@ root@homepod:/opt/public/airlock/apt$ dpkg -i <apt-package>
- 联系管理员。

## 3. 在HomePod上维护github项目
通常情况下,如果想要参与github项目的开发维护,则直接在自己的私人电脑或者办公电脑上完成即可。但有时候,这些项目的开发维护需要借助MLab HomePod上的资源(比如CUDA设备、数据集、已训练模型等),但由于HomePod的网络策略,我们并没有办法直接在HomePod上访问github这样的外网。那则么办呢?借助MLab代码服务。
通常情况下,如果想要参与github项目的开发维护,则直接在自己的私人电脑或者办公电脑上完成即可。但有时候,这些项目的开发维护需要借助MLab HomePod上的资源(比如CUDA设备、数据集、已训练模型等),但由于HomePod的网络策略,我们并没有办法直接在HomePod上访问github这样的外网。那怎么办呢?借助MLab代码服务。
#### 3.1 申请在HomePod上维护某github项目
只有符合产品研发需要的github项目才会被批准。批准的标志就是该github项目会出现在MLab代码服务上。下文我们就以DeepVAC项目为例(https://github.com/DeepVAC/deepvac)。
HomePod用户向管理员发出在HomePod上维护DeepVAC的申请,管理员批准,DeepVAC项目出现在MLab代码服务上:http://ai1.gemfield.org/deepvac/deepvac
Expand Down

0 comments on commit 485a569

Please sign in to comment.