Match-id-6e1b38f2f1ae74d3d9fe0ab6ad371d9e92e9e497

This commit is contained in:
BianTanggui
2023-01-31 14:06:54 +08:00
parent d60330edb7
commit c86088687f
4 changed files with 41 additions and 219 deletions

9
OWNERS Normal file
View File

@@ -0,0 +1,9 @@
approvers:
- songxiangbing
- luorui
reviewers:
- songxiangbing
- luorui
- biantanggui
- kangfuan
- lining

238
README.md
View File

@@ -1,17 +1,18 @@
# Ascend Docker Runtime.zh
[组件介绍](##"组件介绍")
[编译Ascend Docker Runtime](##"编译Ascend Docker Runtime")
[组件安装](##"组件安装")
[更新日志](##"更新日志")
# 简介
## 组件介绍
容器引擎插件Ascend Docker又叫昇腾容器是CANN的基础组件为所有的AI训练/推理作业提供Ascend NPU昇腾处理器容器化支持使用户AI作业能够以Docker容器的方式平滑运行在昇腾设备之上如图1-1所示。
图1-1 Ascend Docker
![image](assets/20210329102949456.png)
## Ascend Docker价值
- 充分解耦与Docker解耦无需修改Docker代码Runtime可以独立演进。
- 后向兼容提供可选装的Runtime不影响原生Docker使用方式。
- 易适配与客户现有平台和系统平滑适配不影响原Docker的命令接口。
- 易部署提供run包部署用户安装后即可用Docker创建挂载Ascend NPU的容器。
## Ascend Docker设计简介
### Ascend Docker设计简介
Ascend Docker本质上是基于OCI标准实现的Docker Runtime不修改Docker引擎对Docker以插件方式提供Ascend NPU适配功能。
如图1-2所示Ascend Docker通过OCI接口与原生Docker对接。在原生Docker的runc启动容器过程中会调用prestart-hook对容器进行配置管理。
@@ -26,231 +27,36 @@ Ascend Docker在prestart-hook这个钩子函数中对容器做了以下配置
3.将Host上的CANN Runtime Library挂载到容器的namespace。
***
# 安装、使用和卸载
*注意目前Ascend Docker Runtime只支持root用户安装Ascend Docker Runtime*
## 安装前准备
* 安装大于18.03版本的docker请进入[安装详情](https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/)。
* 宿主机已安装驱动和固件,详情请参见[《CANN 软件安装指南 (开发&运行场景, 通过命令行方式)》](https://support.huawei.com/enterprise/zh/doc/EDOC1100180788?idPath=23710424|251366513|22892968|251168373) 的“准备硬件环境”章节。
## 安装步骤
### 下载源码
## 编译Ascend Docker Runtime
执行以下步骤进行编译
```shell
# 下载Ascend Docker Runtime源码
# 1、下载Ascend Docker Runtime源码
git clone https://gitee.com/ascend/ascend-docker-runtime.git
# 下载安全函数库
# 2、下载安全函数库
cd ascend-docker-runtime/platform
git clone https://gitee.com/openeuler/libboundscheck.git
# 下载makeself
# 3、下载makeself
cd ../opensource
git clone https://gitee.com/src-openeuler/makeself.git
tar -zxvf makeself/makeself-2.4.2.tar.gz
```
### 编译
```shell
# 4、编译
cd ../build
# 编译
bash build.sh
```
### 安装
编译完成后会在output文件夹看到相应的二进制run包
```shell
cd ../output
chmod +x Ascend-docker-runtime_{version}_linux-{arch}.run
./Ascend-docker-runtime_{version}_linux-{arch}.run --install
```
### 安装成功后需要运行以下命令让Ascend Docker Runtime生效
```shell
systemctl daemon-reload && systemctl restart docker
```
### 组件状态确认
安装完成之后验证Ascend Docker Runtime是否安装成功可执行如下步骤:
* 安装Ascend-docker-runtime后配置文件“/etc/docker/daemon.json”中的内容会被修改其中"default-runtime"与"runtimes"字段如下所示:
```json
{
"default-runtime": "ascend",
root@#:ascend-docker-runtime/output# ll
...
"runtimes": {
"ascend": {
"path": "/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime",
"runtimeArgs": []
}
}
}
```
* 执行docker info查看默认Runtime是否为ascend若是则表示Ascend Docker Runtime安装成功示例如下:
```shell
$docker info
...
Runtimes: ascend runc
Default Runtime: ascend
...
```
***
### 说明
```text
· Atlas 200 AI加速模块RC场景、Atlas 200I SoC A1核心板和Atlas 500 智能小站支持Ascend-Docker-Runtime工具
安装时需指定--install-type=<type>用于设置Ascend-Docker-Runtime的默认挂载
Atlas 200 AI加速模块RC场景安装时执行如下命令
./Ascend-docker-runtime_{version}_linux-{arch}.run --install --install-type=A200
Atlas 200I SoC A1核心板安装时执行如下命令
./Ascend-docker-runtime_{version}_linux-{arch}.run --install --install-type=A200ISoC
Atlas 500 智能小站安装时执行如下命令:
./Ascend-docker-runtime_{version}_linux-{arch}.run --install --whitelist=docker-runtime --install-type=A500
· 如果以root用户安装建议不要安装在非root用户目录下否则存在被非root用户替换root用户文件以达到提权目的的安全风险。
· 如果用户指定路径安装时,请确认指定路径符合所在组织的安全要求。
· 如果用户未指定安装路径,则软件会安装到默认路径下,默认安装路径为:/usr/local/Ascend
```
***
## 使用
### 在Docker客户端使用
* 示例1启动容器时挂载物理芯片ID为0的芯片。
```shell
docker run -it -e ASCEND_VISIBLE_DEVICES=0 image-name:tag /bin/bash
```
* 示例2启动容器时仅挂载NPU设备和管理设备不挂载驱动相关目录。
```shell
docker run --rm -it -e ASCEND_VISIBLE_DEVICES=0 -e ASCEND_RUNTIME_OPTIONS=NODRV image-name:tag /bin/bash
```
* 示例3启动容器时挂载物理芯片ID为0的芯片读取自定义配置文件hostlog中的挂载内容。
```shell
run --rm -it -e ASCEND_VISIBLE_DEVICES=0 -e ASCEND_RUNTIME_MOUNTS=hostlog image-name:tag /bin/bash
```
* 示例4启动容器时挂载虚拟芯片ID为100的芯片。
```shell
docker run -it -e ASCEND_VISIBLE_DEVICES=100 -e ASCEND_RUNTIME_OPTIONS=VIRTUAL image-name:tag /bin/bash
```
* 示例5启动容器时从物理芯片ID为0的芯片上切分出4个AI Core作为虚拟设备并挂载至容器中。
```shell
docker run -it --rm -e ASCEND_VISIBLE_DEVICES=0 -e ASCEND_VNPU_SPECS=vir04 image-name:tag /bin/bash
```
容器启动后,可使用
*ls /dev | grep davinci\* && ls /dev | grep devmm_svm && ls /dev | grep hisi_hdc && ls /usr/local/Ascend/driver && ls /usr/local/ |grep dcmi && ls /usr/local/bin*
命令来检查相应设备和驱动是否挂载成功每台机型具体的挂载目录参考Ascend Docker Runtime[默认挂载内容](##"默认挂载内容")。如下所示(具体内容因机型而异):
```shell
root@ee30eeda9058:/# ls /dev | grep davinci* && ls /dev | grep devmm_svm && ls /dev | grep hisi_hdc && ls /usr/local/Ascend/driver && ls /usr/local/ |grep dcmi && ls /usr/local/bin
davinci0
davinci1
davinci2
davinci4
davinci_manager
devmm_svm
hisi_hdc
include lib64
dcmi
npu-smi
-rwxr-xr-x ... Ascend-docker-runtime_3.0.0_linux-x86_64.run*
```
## 默认挂载内容
## 组件安装
请参考[《MindX DL用户指南》](https://www.hiascend.com/software/mindx-dl)中的“集群调度用户指南 > 安装部署指导 > 安装集群调度组件 > 典型安装场景 > 集群调度场景”进行。
### Atlas 200 AI加速模块 RC场景
| 挂载项 | 备注 |
|:------------------------------:|:-----------------------:|
| /dev/davinciX | NPU设备X是ID号例如davinci0 |
| /dev/davinci_manager | 管理设备 |
| /usr/local/Ascend/driver/tools | 目录,驱动提供的工具包 |
| /usr/local/Ascend/driver/lib64 | 目录,驱动提供的用户态库 |
| /usr/local/sbin/npu-smi | 文件npu-smi工具 |
| /etc/hdcBasic.cfg | 文件hdc基础文件 |
| /etc/sys_version.conf | 文件,驱动的版本信息 |
### Atlas 200I SoC A1核心板
| 挂载项 | 备注 |
|:------------------------------------------------:|:-------------------------:|
| /dev/davinciX | NPU设备X是ID号例如davinci0 |
| /dev/davinci_manager | 管理设备 |
| /usr/local/bin/npu-smi | 文件npu-smi工具 |
| /etc/hdcBasic.cfg | 文件hdc基础文件 |
| /etc/sys_version.conf | 文件,驱动的版本信息 |
### Atlas 500 智能小站
| 挂载项 | 备注 |
|:-----------------------------:|:-----------------------:|
| /dev/davinciX | NPU设备X是ID号例如davinci0 |
| /dev/davinci_manager | 管理设备 |
| /dev/hisi_hdc | 管理设备 |
| /dev/devmm_svm | 管理设备 |
| /home/data/miniD/driver/lib64 | 目录,驱动提供的用户态库 |
| /usr/local/lib/libdcmi.so | 文件DCMI的动态库 |
| /usr/local/bin/npu-smi | 文件npu-smi工具 |
### 其他设备
| 挂载项 | 备注 |
|:---------------------------------:|:-----------------------:|
| /dev/davinciX | NPU设备X是ID号例如davinci0 |
| /dev/davinci_manager | 管理设备 |
| /dev/hisi_hdc | 管理设备 |
| /dev/devmm_svm | 管理设备 |
| /home/data/miniD/driver/lib64 | 目录,驱动提供的用户态库 |
| /usr/local/Ascend/driver/include | 目录,驱动提供的头文件 |
| /usr/local/dcmi | 目录DCMI头文件和库 |
| /usr/local/bin/npu-smi | 文件npu-smi工具 |
## 卸载
当不需要使用Ascend Docker Runtime时可使用如下两种方法进行卸载
***
方法一:软件包卸载
* 首先进入安装包run包所在路径
```shell
cd <path to run package>
```
* 用户可通过以下命令卸载Ascend Docker Runtime
```shell
./Ascend-docker-runtime_{version}_linux-{arch}.run --uninstall
```
***
方法二:脚本卸载
* 首先进入Ascend Docker的安装路径下的“script”目录默认安装路径为“/usr/local/Ascend/Ascend-Docker-Runtime”
```shell
cd /usr/local/Ascend/Ascend-Docker-Runtime/script
```
* 运行卸载的脚本进行卸载
```shell
./uninstall.sh
```
***
卸载后需要运行以下命令使用默认的runc
```shell
systemctl daemon-reload && systemctl restart docker
```
## 升级
在升级Ascend Docker Runtime时可执行如下步骤升级
* 安装包下载完成后首先进入安装包run包所在路径。
```shell
cd <path to run package>
```
* 可通过以下命令安装Ascend Docker Runtime。
```shell
chmod +x Ascend-docker-runtime_{version}_linux-{arch}.run
./Ascend-docker-runtime_{version}_linux-{arch}.run --upgrade
```
* 安装成功后需要运行以下命令让Ascend Docker Runtime生效。
```shell
systemctl daemon-reload && systemctl restart docker
```
## 版本更新记录
## 更新日志
| 版本 | 发布日期 | 修改说明 |
|:------:|:----:|:-----:|
| v3.0.0 | 2023-01-18 | 第一次发布 |

View File

@@ -50,7 +50,14 @@ RUNTIMESRCPATH=$(find ${RUNTIMEDIR} -name "${RUNTIMESRCNAME}")
RUNTIMESRCDIR=${RUNTIMESRCPATH%/${RUNTIMESRCNAME}}
PACKAGENAME="Ascend-docker-runtime"
VERSION="3.0.0"
VERSION="v3.0.0"
version_file="${TOP_DIR}"/service_config.ini
if [ -f "$version_file" ]; then
line=$(sed -n '4p' "$version_file" 2>&1)
#cut the chars after ':'
VERSION=${line#*:}
fi
CPUARCH=$(uname -m)
@@ -127,6 +134,7 @@ function copy_file_output()
RUN_PKG_NAME="${PACKAGENAME}_${VERSION}_linux-${CPUARCH}.run"
DATE=$(date -u "+%Y-%m-%d")
sed -i "s/REPLACE_VERSION/${VERSION}/g" run_pkg/run_main.sh
bash ${OPENSRC}/makeself-release-2.4.2/makeself.sh --nomd5 --nocrc --help-header scripts/help.info --packaging-date ${DATE} \
--tar-extra "--mtime=${DATE}" run_pkg "${RUN_PKG_NAME}" ascend-docker-runtime ./run_main.sh
mv ${RUN_PKG_NAME} ${OUTPUT}

View File

@@ -20,8 +20,7 @@ set -e
ASCEND_RUNTIME_CONFIG_DIR=/etc/ascend-docker-runtime.d
DOCKER_CONFIG_DIR=/etc/docker
INSTALL_PATH=/usr/local/Ascend/Ascend-Docker-Runtime
readonly PACKAGE_VERSION=3.0.0
readonly PACKAGE_VERSION=REPLACE_VERSION
function save_install_args() {
if [ -f "${INSTALL_PATH}"/ascend_docker_runtime_install.info ]; then