官方提供了modelbox webUI教程,但是,该教程有以下缺点:
- 在容器刚启动时,配置中的访问控制列表没有包含本地PC的IP,这导致如果想从本地PC访问远程服务器上容器的webUI,需要登入容器修改配置文件,再重启modelbox,费时费力。
- 新增项目对宿主机不可见。新增项目会保存在容器内,如果不手动复制的话,宿主机无法看到。
- ssh登陆麻烦。官方教程会让你登陆到容器,但有时你只想登陆到宿主机开发。可是,让新增项目对宿主机可见是一个问题。
- 重启命令冗长。单纯执行
modelbox restart
会导致报错,所以需要复制输入整个路径$HOME/modelbox-service/modelbox restart
才能重启。
为了能开箱即用,本文稍微调整了Dockerfile,并附加了脚本,便于使用。
基础构建脚本
首先,为modelbox开发容器编写Dockerfile:
FROM registry-cbu.huawei.com/modelbox/euler/modelbox-develop-mindspore_2.1.0-cann_6.3.2-d910b-euler-aarch64:latest# install ytorch and npu plugin
COPY torch-1.11.0-cp37-cp37m-linux_aarch64.whl /root/torch-1.11.0-cp37-cp37m-linux_aarch64.whl
COPY torch_npu-1.11.0.post1-cp37-cp37m-linux_aarch64.whl /root/torch_npu-1.11.0.post1-cp37-cp37m-linux_aarch64.whlRUN pip install /root/torch-1.11.0-cp37-cp37m-linux_aarch64.whl
RUN pip install /root/torch_npu-1.11.0.post1-cp37-cp37m-linux_aarch64.whl# edit conf file
COPY ./res/add_acl.py /root/add_acl.py
COPY ./res/restart_modelbox.sh /root/restart_modelbox.sh
RUN pip install tomlRUN modelbox-tool develop -s \&& python add_acl.py \&& $HOME/modelbox-service/modelbox restart
其中:
- 在Dockerfile内需要先执行
modelbox-tool develop -s
,这之后才会生成modelbox的配置文件,然后才能修改ACL属性。 res/add_acl.py
用于替换conf文件里的acl配置项,添加本地PC IP,读者可以替换成自己的PC IP。
在当前目录创建res目录,创建add_acl.py
脚本
import toml
import oshome = os.environ['HOME']# 读取文件
with open(f'{home}/modelbox-service/conf/modelbox.conf') as file:config = toml.load(file)# 获取[acl]的值
acl = config['acl']# 添加新元素
acl['allow'].append('10.78.8.148') # 将这个替换成你的本地PC IP# 将修改后的值写回文件
with open(f'{home}/modelbox-service/conf/modelbox.conf', 'w') as file:toml.dump(config, file)
然后添加res/restart_modelbox.sh
,内容简洁如下,是用于快速重启modelbox的。
$HOME/modelbox-service/modelbox restart
然后启动脚本start.sh
如下,
sudo docker build -t modelbox_dev:latest .
sudo docker run --rm -it -v ./projects:/root/projects -e ASCEND_VISIBLE_DEVICES=2-3 --net=host modelbox_dev:latest /bin/bash
其中:
-v ./projects:/root/projects
会把宿主机的projects目录挂到容器内,这样在容器里可以新建项目,在宿主机可以用vscode+ssh修改项目。-e ASCEND_VISIBLE_DEVICES=2-3
是用于挂载npu的2和3号卡。--net=host
会同步宿主机和容器的网络,便于登陆访问容器web UI的1104端口
使用方法
使用方式很简单:
- 在Dockerfile所在目录执行
bash start.sh
,就会启动modelbox容器。 - 在容器内执行
bash restart_modelbox.sh
确保modelbox重启并生效配置。 - 访问webUI的1104端口,新建项目,之后在宿主机的projects目录可见