# ascend-deployer
**Repository Path**: TDlining/ascend-deployer
## Basic Information
- **Project Name**: ascend-deployer
- **Description**: 提供离线安装的Ansible运维示例,用于部署Ascend任务。
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 79
- **Created**: 2021-03-01
- **Last Updated**: 2021-03-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 简介
## 功能描述
离线安装工具提供系统组件、python第三方依赖自动下载以及一键式安装的功能,并支持驱动、固件以及CANN软件包的安装。tools目录额外放置了Device IP配置脚本,若有需要可取用。
## 环境要求
离线安装工具现支持如下操作系统的组件下载及安装。
|操作系统|版本|CPU架构|安装类型|
|:----:|:----:|:----:|:----:|
|CentOS|7.6|aarch64|镜像默认Minimal模式|
|CentOS|7.6|x86_64|镜像默认Minimal模式|
|CentOS|8.2|aarch64|镜像默认Minimal模式|
|CentOS|8.2|x86_64|镜像默认Minimal模式|
|ubuntu|18.04|aarch64|镜像默认Server模式、SmartKit默认Standard模式|
|ubuntu|18.04|x86_64|镜像默认Server模式、SmartKit默认Standard模式|
|Debian|9.9|aarch64|镜像默认Server模式、SmartKit默认Standard模式|
|Debian|9.9|x86_64|镜像默认Server模式、SmartKit默认Standard模式|
|BigCloud|7.6|aarch64|镜像默认Minimal模式|
|BigCloud|7.6|x86_64|镜像默认Minimal模式|
|BigCloud|7.7|aarch64|镜像默认Minimal模式|
|SLES|12.4|x86_64|镜像默认Minimal模式|
|Kylin|V10Tercel|aarch64|镜像默认Minimal模式|
|EulerOS|2.0SP8|aarch64|镜像默认Minimal模式|
|EulerOS|2.0SP9|aarch64|镜像默认Minimal模式|
|EulerOS|2.0SP9|x86_64|镜像默认Minimal模式|
## 注意事项
- 操作系统必须安装tar, cd, ls, find, grep, chown, chmod等基本命令。OpenSSH Server用于ansible通过SSH连接登录,Ubuntu系统安装时需要选择安装。
- 离线安装工具仅支持OS镜像安装成功后的默认环境,请不要在安装OS后额外安装或卸载软件。若已卸载某些系统软件,导致与安装默认系统包不一致,需手动配置网络,通过apt、yum、dnf等工具安装配置缺失软件。
- 离线安装工具只能安装最基本的库,确保TensorFlow和PyTorch能够运行。若需运行较为复杂的推理业务或模型训练,模型代码中可能包含具体业务相关的库,这些库需用户自行安装。
- EulerOS系统需要确保源存在与系统内核版本(可通过 `uname -r` 命令查看)一致的kernel-headers和kernel-devel软件包。若不存在,需自行准备相应的kernel-headers和kernel-devel软件包。
- CentOS 8.2安装时,需要勾选“Additioanl Software for Selected Environment”中的Standard,若未勾选,系统安装完成后可能缺少tar等基本命令。
- EulerOS等操作系统默认禁止root用户远程连接。因此,对于这类操作系统,远程安装时需提前配置sshd_config中PermitRootLogin为yes,安装完成后再配置为no。
# 操作指导
## 下载系统组件及python第三方依赖
支持windows或linux系统使用下载功能。
### 须知
- 如需配置代理、通过修改配置文件的方式调整为下载所需OS的组件等,可编辑“downloader/config.ini”文件,具体可参考配置说明。
- 离线安装工具已提供源配置文件,默认使用华为源,用户可根据需要进行替换。具体可参考源配置。
- 下载好的软件会自动存放于resources目录下。
- 安装完成后,建议卸载系统中可能存在安全风险的gcc、g++等第三方组件。
### 下载操作
- windows
1. windows环境需安装python3,推荐使用python3.7版本以上。
下载链接:[python3.7.5](https://www.python.org/ftp/python/3.7.5/python-3.7.5-amd64.exe)
请根据界面提示完成安装。注意安装时在“Advanced Options"界面勾选” Add Python to environment variables",否则需手动添加环境变量。
2. 启动下载。
运行start_download.bat或start_download_ui.bat(推荐使用,可在弹出的简易UI界面上勾选需要下载的OS组件)。
- linux
执行`./start_download.sh --os-list=,`启动下载。
## 安装操作
### 安装须知
- 离线安装工具在安装驱动、CANN软件包过程中,会默认创建HwHiAiUser用户作为软件包运行用户,若用户需自行指定运行用户和用户组,可自行修改inventory_file文件。文件内容如下:
```
[ascend:vars]
user=HwHiAiUser
group=HwHiAiUser
```
- 由于需要安装大量开源软件,离线安装工具下载的开源软件均来自操作系统源,开源软件的漏洞和修复需要用户自行根据情况修复,强烈建议使用官方源定期更新。
### 准备软件包
根据实际需要准备待安装软件包(支持驱动、固件、CANN软件包的安装)。
- 驱动和固件:[获取链接](https://ascend.huawei.com/#/hardware/firmware-drivers)
- CANN软件包:[获取链接](https://ascend.huawei.com/#/software/cann)
将待安装软件包放置于resources目录下。参考如下:
软件包支持zip包和run包2种格式,如果resources目录下存在这2种格式的同一软件包,优先安装zip格式的软件包。
```
ascend-deployer
|- ...
|- install.sh
|- inventory_file
|- ...
|- playbooks
|- README.md
|- resources
|- A300-3010-npu_xxx.zip
|- A300-3010-npu-driver_xxx.run
|- A300-3010-npu-firmware_xxx.run
|- Ascend-cann-nnrt-xxx.zip
|- Ascend-cann-nnrt-xxx.run
|- ...
|- Ascend-cann-toolkit-xxx.run
|- ...
|- BigCloud_7.6_aarch64
|- BigCloud_7.6_x86_64
|- ...
```
### 单机安装
1. 配置单机的inventory_file文件。
编辑inventory_file文件,格式如下:
```
[ascend]
localhost ansible_connection='local' # root用户
localhost ansible_connection='local' ansible_become_pass='password' # 非root用户
```
注意:支持root和非root用户;其中root用户不需要配置ansible_become_pass参数,非root用户必须配置ansible_become_pass参数,该参数与非root用户密码相同,且非root用户必须有sudoer权限;离线部署工具会对配置有密码的inventory文件采用ansible-vault机制加密;配置完成后须执行./install.sh --check或者install、test等命令才能完成对该文件的加密,否则可能导致账户密码的泄露;非root用户使用离线部署工具时,需拥有ascend-deployer目录的操作权限。
2. 执行安装脚本,可根据需要选择安装方式(指定软件安装或指定场景安装)。
- 指定软件安装
`./install.sh --install=`
可选范围可通过执行`./install.sh --help`查看。命令示例如下:
`./install.sh --install=npu //安装driver和firmware`
注意事项:
- 请按照“driver>firmware>CANN软件包(toolkit、nnrt等)”或“npu>CANN软件包(toolkit、nnrt等)”的顺序进行安装。
- 安装driver或firmware后,需执行`reboot`重启设备使驱动和固件生效。
- 部分组件存在运行时依赖,如pytorch需要toolkit提供运行时依赖,tensorflow + npubridge需要tfplugin提供运行时依赖。
- 指定场景安装
`./install.sh --install-scene=`
离线部署工具提供几个基本安装场景,具体可参考安装场景介绍。命令示例如下:
`./install.sh --install-scene=auto //自动安装所有能找到的软件包`
3. 安装后检查,可通过以下命令检查指定组件能否正常工作。
`./install.sh --test=`
可选范围可通过执行`./install.sh --help`查看。命令示例如下:
`./install.sh --test=driver //测试driver是否正常`
### 批量安装
1. 配置待安装的其他设备的ip地址、用户名和密码。
编辑inventory_file文件,格式如下:
```
[ascend]
ip_address_1 ansible_ssh_user='root' ansible_ssh_pass='password1' # root用户
ip_address_2 ansible_ssh_user='username2' ansible_ssh_pass='password2' ansible_become_pass='password2' # 非root用户
ip_address_3 ansible_ssh_user='username3' ansible_ssh_pass='password3' ansible_become_pass='password3' # 非root用户
```
注意:inventory文件中会配置远程设备的用户名和密码,支持root和非root用户;其中root用户不需要配置ansible_become_pass参数,非root用户必须配置ansible_become_pass参数,该参数与ansible_ssh_pass参数相同,且非root用户必须有sudoer权限;离线部署工具会对配置有密码的inventory文件采用ansible-vault机制加密;配置完成后须执行./install.sh --check或者install、test等命令才能完成对该文件的加密,否则可能导致账户密码的泄露;非root用户使用离线部署工具时,需拥有ascend-deployer目录的操作权限。
2. 执行ansible ping测试待安装设备连通性。
```
#配置环境变量
export PATH=/usr/local/python3.7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#测试待安装设备连通性
ansible all -i ./inventory_file -m ping # inventory_file未加密时
ansible all -i ./inventory_file -m ping --ask-vault-pass # inventory_file已加密时
```
若当前环境未安装ansible,可执行`./install.sh --check`
若inventory_file已加密,测试待安装设备连通性时需要添加--ask-vault-pass参数
确保所有设备都能正常连接,若存在设备连接失败情况,请检查该设备的网络连接和sshd服务是否开启。
3. 执行安装脚本,可根据需要选择安装方式(指定软件安装或指定场景安装)。
- 指定软件安装
`./install.sh --install=`
可选范围可通过执行`./install.sh --help`查看。命令示例如下:
`./install.sh --install=npu //安装driver和firmware`
注意事项:
- 请按照“driver>firmware>CANN软件包(toolkit、nnrt等)”或“npu>CANN软件包(toolkit、nnrt等)”的顺序进行安装。
- 安装driver或firmware后,需执行`reboot`重启设备使驱动和固件生效。
- 部分组件存在运行时依赖,如pytorch需要toolkit提供运行依赖,tensorflow + npubridge需要tfplugin提供运行依赖。
- 指定场景安装
`./install.sh --install-scene=`
离线部署工具提供几个基本安装场景,具体可参考安装场景介绍。命令示例如下:
`./install.sh --install-scene=auto //自动安装所有能找到的软件包`
4. 安装后检查,可通过以下命令检查指定组件能否正常工作。
`./install.sh --test=`
可选范围可通过执行`./install.sh --help`查看。命令示例如下:
`./install.sh --test=driver //测试driver是否正常`
# 配置环境变量
安装过程会自动给待安装设备安装python3.7.5,为不影响系统自带python(python2.x or python3.x), 在使用python3.7.5之前,需配置如下环境变量:
```
export PATH=/usr/local/python3.7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
```
# 后续任务
- 推理场景
开发者可以参见《[CANN 应用软件开发指南 (C&C++)](https://www.huaweicloud.com/ascend/cann)》或《[CANN 应用软件开发指南 (Python)](https://www.huaweicloud.com/ascend/cann)》在开发环境上开发应用程序。
- 训练场景
若需进行网络模型移植和训练,请参考《[TensorFlow网络模型移植&训练指南](https://www.huaweicloud.com/ascend/pytorch-tensorflow)》或《[PyTorch网络模型移植&训练指南](https://www.huaweicloud.com/ascend/pytorch-tensorflow)》。
- 删除工具
本工具属于安装部署类工具,系统安装完成后应立即删除以释放磁盘空间。
# 升级
可执行以下命令,升级指定软件:
`./install.sh --upgrade=`
可选范围可通过执行`./install.sh --help`查看。命令示例如下:
`./install.sh --upgrade=npu //升级driver和firmware`
注意事项:
- 请按照“firmware>driver>CANN软件包(toolkit、nnrt等)“或“npu>CANN软件包(toolkit、nnrt等)”的顺序进行升级。
- 升级driver或firmware后,需执行`reboot`重启设备使驱动和固件生效。
# 卸载
可执行以下命令,卸载指定软件:
`./install.sh --uninstall=`
可选范围可通过执行`./install.sh --help`查看。命令示例如下:
`./install.sh --uninstall=npu //卸载driver和firmware`
注意事项:
请按照“CANN软件包(toolkit、nnrt等)>driver和firmware(driver和firmware无卸载顺序要求)“的顺序进行卸载。
# 更新离线部署工具
能够通过以下操作实现离线安装工具自我更新。
- windows
运行upgrade_self.bat启动更新。
- linux
执行命令`./upgrade_self.sh`启动更新。
# 参考信息
## 参数说明
用户根据实际需要选择对应参数完成安装、升级或卸载,命令格式如下:
`./install.sh [options]`
参数说明请参见下表。表中各参数的可选参数范围可通过执行`./install.sh --help`查看。
| 参数 | 说明 |
| :--------------------------- | ------------------------------------------------------------ |
| --help -h | 查询帮助信息。 |
| --check | 检查环境,确保控制机安装好python3.7.5、ansible等组件,并检查与待安装设备的连通性。 |
| --clean | 清理待安装设备用户家目录下的resources目录。 |
| --nocopy | 在批量安装时不进行资源拷贝。 |
| --debug | 开发调测使用。 |
| --output-file | 重定向命令执行的输出结果到指定文件。 |
| --stdout_callback=| 设置命令执行的输出格式,可用的参数通过"ansible-doc -t callback -l"命令查看。 |
| --install= | 指定软件安装。若指定“--install=npu”,将会安装driver和firmware。 |
| --install-scene= | 指定场景安装。安装场景请参见安装场景介绍。 |
| --uninstall= | 卸载指定软件。若指定“--uninstall=npu”,将会卸载driver和firmware。 |
| --upgrade= | 升级指定软件。若指定“--upgrade=npu”,将会升级driver和firmware。 |
| --test= | 检查指定组件能否正常工作。 |
## 安装场景介绍
离线部署工具提供几个基本安装场景。
| 安装场景 | 安装的组件 | 说明 |
| --------- | ------------------------------------------------------------ | ---------------------- |
| auto | all | 安装所有能找到的软件包 |
| infer_dev | driver、firmware、 nnrt、toolbox、toolkit、 torch、tfplugin、tensorflow | 推理开发场景 |
| infer_run | driver、 firmware、nnrt、toolbox | 推理运行场景 |
| train_dev | driver、firmware、nnae、toolbox、toolkit、torch、tfplugin、tensorflow | 训练开发场景 |
| train_run | driver、firmware、nnae、toolbox、torch、tfplugin、tensorflow | 训练运行场景 |
| vmhost | driver、firmware、toolbox | 虚拟机host场景 |
| edge | driver、firmware、atlasedge、ha | 安装MindX中间件、HA |
上述安装场景的配置文件位于scene目录下,如推理开发场景的配置文件scene/scene_infer_run.yml:
```
- hosts: '{{ hosts_name }}'
- name: install system dependencies
import_playbook: ../playbooks/install/install_sys_pkg.yml
- name: install python3.7.5
import_playbook: ../playbooks/install/install_python375.yml
- name: install driver and firmware
import_playbook: ../playbooks/install/install_npu.yml
- name: install nnrt
import_playbook: ../playbooks/install/install_nnrt.yml
- name: install toolbox
import_playbook: ../playbooks/install/install_toolbox.yml
- name: install toolkit
import_playbook: ../playbooks/install/install_toolkit.yml
- name: install torch
import_playbook: ../playbooks/install/install_torch.yml
- name: install tfplugin
import_playbook: ../playbooks/install/install_tfplugin.yml
- name: install tensorflow
import_playbook: ../playbooks/install/install_tensorflow.yml
- name: install protobuf
import_playbook: ../playbooks/install/install_protobuf.yml
```
如需自定义安装场景,可参考上述配置文件进行定制。
## 配置说明
### 代理配置
如需使用http代理,其一是在环境变量中配置代理(推荐),其二是在downloader/config.ini文件中配置代理
1. 环境变量中配置代理,参考如下
```
# 配置环境变量
export http_proxy="http://user:password@proxyserverip:port"
export https_proxy="http://user:password@proxyserverip:port"
```
其中user为用户在内部网络中的用户名,password为用户密码(特殊字符需转义),proxyserverip为代理服务器的ip地址,port为端口。
2. 在downloader/config.ini文件中配置代理,内容如下:
```
[proxy]
enable=false # 是否开启代理配置参数
verify=true # 是否校验https证书
protocol=https # HTTP协议
hostname= # 代理服务器
port= # 端口
username=none # 代理账号
userpassword=none # 代理密码
```
需将enable参数改为true,并配置可用的hostname、port、username、userpassword。
安全起见,如果在downloader/config.ini文件中配置过代理账号及密码,下载完成后应清理掉config.ini
### 下载行为配置
在downloader/config.ini文件中可进行下载行为配置,将其调整为下载所需OS的组件。
```
[download]
os_list=CentOS_7.6_aarch64, CentOS_7.6_x86_64, CentOS_8.2_aarch64, CentOS_8.2_x86_64, Ubuntu_18.04_aarch64, Ubuntu_18.04_x86_64, BigCloud_7.6_aarch64, BigCloud_7.6_x86_64, ... # 待安装部署的环境OS信息
```
### 源配置
离线安装工具已提供源配置文件,用户可根据实际进行替换。
- Python源配置
在downloader/config.ini文件中配置python源,默认使用华为源。
```
[pypi]
index_url=https://repo.huaweicloud.com/repository/pypi/simple
```
- 系统源配置
系统源配置文件downloader/config/*{os}\__{version}\__{arch}*/source.*xxx*
以CentOS 7.6 aarch64为例,源配置文件downloader/config/CentOS_7.6_aarch64/source.repo内容如下:
```
[base]
baseurl=https://mirrors.huaweicloud.com/centos-altarch/7/os/aarch64
[epel]
baseurl=https://mirrors.huaweicloud.com/epel/7/aarch64
```
表明同时启用base源和epel源,下载系统组件时会从这两个源中查询和下载。默认使用华为源,可根据需要修改。若修改,请选择安全可靠的源,并测试下载和安装行为是否正常,否则可能造成组件下载不完整或安装异常。若删除源,可能造成组件下载不完整。