-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
156 additions
and
149 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
# 在K8s集群中使用MLab HomePod | ||
在K8s集群上部署MLab HomePod,一方面可以获得更灵活和多元的功能,另外一方面也可以更好的对数据进行权限控制。 | ||
|
||
## 1. 部署 | ||
使用kubectl命令进行部署,部署后可以在vnc客户端和浏览器中访问图形界面。这种方式适合小团队的协作和管理。 | ||
```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元红包)。 | ||
|
||
然而,用户在HomePod上仍然会有一些合理的(或者半合理的)联网需求,我们总结如下: | ||
- 上传或者下载一些数据集到HomePod上(合理需求); | ||
- HomePod上使用包管理工具(pip、apt等)安装软件包(半合理需求); | ||
- 下载HomePod上训练结果的输出,分发给客户或其它测试人员(半合理需求)。 | ||
|
||
为了实现这些合理或者半合理需求,我们提供了**Airlock Pod**(ai5.gemfield.org:27031,该地址取决于你的实际部署)。Airlock Pod和HomePod共享一个docker镜像,且共享/opt/public/airlock目录。区别在于3点: | ||
- Airlock Pod可以访问外部网络; | ||
- Airlock Pod对/opt/public/airlock 目录有写权限; | ||
- 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挂载到本地,详情请咨询管理员)。 | ||
|
||
#### 2.2 HomePod上使用包管理工具(pip、apt等)安装软件包 | ||
软件包按照被使用的普及程度分为两类:基础型软件包、特定软件包。 | ||
基础性软件包就是几乎人人都会用到的,比如numpy、cmake、cv2等; | ||
特定软件包就是几乎只有自己的特定项目会使用到,比如fonttools。 | ||
|
||
基础软件包和特定软件包都提供了临时安装方法(所谓临时安装,就是在HomePod重启后会丢失): | ||
- pip包临时安装: | ||
```bash | ||
# 在airlock上 | ||
gemfield@airlock:/opt/public/airlock/pip$ pip download <pip-package> | ||
|
||
# 切换到homepod上 | ||
username@homepod:/opt/public/airlock/pip$ pip install * | ||
``` | ||
- apt包临时安装: | ||
``` | ||
# 在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> | ||
``` | ||
|
||
此外,基础软件包应该固化到HomePod的image中。用户按照如下的方法提交固化申请: | ||
- 将安装步骤封装为bash脚本,在Airlock Pod上测试成功(一定要测试成功!!!); | ||
- 然后该脚本连同安装需求描述提交到https://github.com/DeepVAC/MLab 的issues里,通知管理员。 | ||
|
||
#### 2.3 下载HomePod上训练结果的输出,分发给客户或其它测试人员 | ||
这个是罕见需求,目前只能: | ||
- 联系管理员。 | ||
|
||
## 3. 在HomePod上维护github项目 | ||
通常情况下,如果想要参与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 | ||
|
||
#### 3.2 在办公电脑上配置git | ||
- 在github上fork DeepVAC仓库; | ||
- 克隆你的fork:git clone https://github.com/<your_name>/deepvac | ||
- 在仓库中添加remote(注意,由于前述的clone仓库,git已经默认帮你配好了origin这个默认的remote): | ||
```bash | ||
#添加mlab remote | ||
git remote add mlab http://ai1.gemfield.org/deepvac/deepvac | ||
|
||
#添加upstream | ||
git remote add upstream https://github.com/DeepVAC/deepvac | ||
``` | ||
- 验证remote添加成功 | ||
```bash | ||
gemfield@ThinkPad-X1C:/github/deepvac$ git remote -v | ||
mlab http://ai1.gemfield.org/deepvac/deepvac (fetch) | ||
mlab http://ai1.gemfield.org/deepvac/deepvac (push) | ||
origin https://github.com/<your_name>/deepvac (fetch) | ||
origin https://github.com/<your_name>/deepvac (push) | ||
upstream https://github.com/DeepVAC/deepvac (fetch) | ||
upstream https://github.com/DeepVAC/deepvac (push) | ||
``` | ||
#### 3.3 在办公电脑上新建轻量级工作分支 | ||
假设你现在需要往deepvac提交feature1。则需要在办公电脑上(想想为什么?)按照如下的步骤: | ||
```bash | ||
#同步上游 | ||
git fetch upstream | ||
git rebase upstream/master | ||
#新建工作分支 | ||
git checkout -b feature_1 | ||
#同步到MLab | ||
git push mlab feature_1 | ||
``` | ||
注意:完成上述步骤后,办公电脑上该仓库就停留在feature_1分支上。 | ||
|
||
#### 3.4 在HomePod上开发、测试、提交 | ||
以下步骤在HomePod上: | ||
```bash | ||
#克隆代码 | ||
git clone http://ai1.gemfield.org/deepvac/deepvac | ||
|
||
#切换(注意不是新建) | ||
git checkout feature_1 | ||
|
||
#开发、测试 | ||
...... | ||
git add | ||
git commit -m "xxx" | ||
|
||
#将feature_1同步到mlab上 | ||
git push feature_1 | ||
``` | ||
|
||
#### 3.5 在办公电脑上同步feature_1分支 | ||
以下步骤在办公电脑上,且在之前停留的feature_1分支上: | ||
```bash | ||
#同步feature_1分支 | ||
git fetch mlab | ||
git rebase mlab/feature_1 | ||
|
||
#同步到自己fork的deepvac上 | ||
git push feature_1 | ||
``` | ||
|
||
#### 3.6 在github上创建PR | ||
在github网页上,切换到自己fork的deepvac项目上,创建PR。 | ||
|
||
**注意:自始至终,办公电脑上没有发生任何的开发。这不是必须的,但不这么做会增加git流程的复杂度。** |