驱动和开发环境安装指南
前言
该文档为SVP__NPU向导性使用指导,主要介绍在板上运行SVP__NPU业务的主要步骤。
说明:
- Hi3519DV500/Hi3516DV500以musl库工具链aarch64-v01c01-linux-musl-gcc描述为例,使用glibc库工具链时,请使用aarch64-v01c01-linux-gnu-gcc替换aarch64-v01c01-linux-musl-gcc即可。
- Hi3516CV610/Hi3516CV608仅支持musl库工具链arm-v01c02-linux-musleabi-gcc。
- 本文如无特殊说明,Hi3519DV500与Hi3516DV500内容完全一致;Hi3516CV608与Hi3516CV610内容完全一致。
与本文档相对应的产品版本如下。
本文档主要适用于SVP___NPU开发人员。开发人员必须具备以下经验和技能:
- 了解图像分析工具的基本概念。
- 有一定的图像分析工具开发经验。
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
概述
Ascend SVP___NPU简介
Ascend SVP__NPU为新一代图像分析工具加速器,前端支持开源AI框架(Caffe/ONNX),后端支持SVP__NPU/CPU的异构计算,提供完整的软硬件计算加速方案。
部署架构
部署架构如图1所示。SVP__NPU环境包含PC端工具侧开发环境和单板侧板端环境,当一个训练好的模型过来后,首先可以经过AMCT(Advanced Model Compression Toolkit)进行量化,将模型中部分层量化为8bit计算,提升计算效率;其次使用ATC(Advanced Tensor Compiler)工具将量化后的模型或非量化的模型转换为Ascend SVP__NPU认识的离线模型;最后,离线模型放置在板端环境,即可进行推理。

板端环境中包含板端执行推理时需要的头文件、动态库、驱动ko以及sample。
命令行方式开发环境:
该场景下的开发环境需要单独部署CANN软件包,采用命令行的方式进行安装和使用,具体方法请参见“命令行方式开发环境安装”。
该环境可安装独立的AMCT工具,支持将原始的float32模型,量化为低bit,以提升推理性能。工具安装以及使用方法请参见《AMCT使用指南(Caffe)》、《AMCT使用指南(Pytorch)》等手册。
使用流程
本章节介绍原始训练好的模型如何在SVP___NPU上执行以及遇到问题的整体使用流程,运行流程如图1所示。

下面以Caffe原始网络模型为例,说明运行流程:
- 当训练好的Caffe模型准备好后,可以直接使用ATC工具进行模型转换,也可以使用AMCT先进行量化,然后将量化后的Caffe模型再传给ATC工具进行离线模型转换。
- ATC离线模型转换后生成的om模型,可以在板端环境上使用ACL(Advanced Computing Language)做推理。
- 推理后如果遇到精度问题,可以选择Dump网络的中间层数据,和Caffe的Dump结果做比较,来定位是哪一层的问题。为了缩小范围,可以使用MindCmd上的子模型导出功能(当前仅支持Caffe模型),将问题范围缩小,再使用导出的子模型复现问题。
- 当推理性能不满足要求时,可以通过Profiling工具查看网络中每个算子的耗时以及带宽数据,可能通过分析瓶颈点,修改网络来提升整网性能。
说明:
上述流程中涉及参考手册如下:
- AMCT:如果用户想使用量化特性提升推理性能,请参见《AMCT使用指南(Caffe)》、《AMCT使用指南(Pytorch)》,对训练好的模型进行量化,量化完成后再使用ATC工具进行模型转换。
- ATC工具模型转换:请参见《ATC工具使用指南》,将训练好的模型转换成平台识别的离线模型,应用程序指定模型资源后即可进行推理;具体支持的Caffe算子规格请参见《ATC工具使用指南》算子规格说明章节。
- 模型推理过程中精度或性能不达标:请参见《快速上手指南》“精度调优建议”和“性能问题分析及性能调优”章节。
SVP_NPU环境安装
板端环境安装
- SVP ACL接口使用说明请参见《应用开发指南》“SVP ACL API参考”章节。
- 需要将SVP_NPU相关库路径加入到系统环境变量LD_LIBRARY_PATH(如Hi3519DV500,库路径为/xxx(客户自定义)/smp/a55_linux/source/out/lib,其他解决方案类似参考)。
-
板端开发所依赖的文件清单如表1所示。
表 1 板端开发依赖的文件
libss_mpi_km.so(Hi3516CV610不依赖这个库)
libprotobuf-c.so -> libprotobuf-c.so.1.0.0
命令行方式开发环境安装
简介
CANN(Compute Architecture for Neural Networks)是针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建AI应用和业务。
本文档主要用于指导用户安装CANN开发环境,用于代码开发、编译等不依赖于设备的开发活动(例如ATC模型转换、算子和推理应用程序的纯代码开发)。开发环境搭建逻辑架构如图1所示。

安装流程如图2所示。

软件包获取
环境搭建前,请准备如表1所示CANN软件包,用户根据具体板端环境,选择其中一个软件包进行安装。
表 1 软件包说明
其中_<version>_表示软件版本号。
安装前准备
开发环境所要求的硬件及操作系统要满足以下条件。
表 1 Ubuntu系统所要求的环境信息
请从http://old-releases.ubuntu.com/releases/18.04.1/网站下载对应版本软件进行安装,可以下载桌面版:ubuntu-xxx-desktop-amd64.iso,或Server版:ubuntu-xxx-server-amd64.iso。 |
请从https://releases.ubuntu.com/22.04/网站下载对应版本软件进行安装,可以下载桌面版:ubuntu-xxx-desktop-amd64.iso,或Server版:ubuntu-xxx-server-amd64.iso。 |
||||
请参见“安装依赖”。 |
|||||
请参见“安装依赖”。 |
|||||
请参见“安装依赖”。 |
|||||
请参见“安装依赖”。 |
|||||
请参见“安装依赖”。 |
|||||
运行用户为实际运行推理业务的用户;安装用户为实际安装软件包的用户,针对安装用户:
- 若使用root用户安装,支持所有用户运行相关业务。
- 若使用非root用户安装,该场景下安装及运行用户必须相同。
- 若已有非root用户,则无需再次创建。
- 若想使用新的非root用户,则需要先创建该用户,请参见如下方法创建。
创建非root用户操作方法如下,如下命令请以root用户执行。
-
创建非root用户。
-
设置非root用户密码。
说明:
密码有效期为90天,您可以在/etc/login.defs文件中修改有效期的天数,或者通过chage命令来设置用户的有效期,详情请参见“设置用户有效期”。
安装过程需要下载相关依赖,请确保开发环境能够连接网络。
请在root用户下执行如下命令检查源是否可用。
如果命令执行报错,请检查网络是否连接或者把“/etc/apt/sources.list”文件中的源更换为可用的源。
如果使用非root用户安装,apt-get需要用到提权命令,请用户自行获取所需的sudo权限。使用完成后请取消涉及高危命令的权限,否则有sudo提权风险。
说明:
本文python软件以python3.7.5为例,实际请参考如下:
- Hi3519DV500/Hi3516DV500:python3.7.5
- Hi3516CV610/Hi3516CV608:python3.10.12
如果安装用户为root,即CANN软件包的使用者为所有用户,请使用root用户安装依赖的gcc、python3.7.5等软件。如果安装用户为非root,即CANN软件包的使用者仅限于指定的非root用户,请使用su - username命令切换到非root用户安装依赖软件。
-
检查系统是否安装python依赖以及gcc等软件。
分别使用如下命令检查是否安装gcc,make以及python依赖软件等。
gcc --version g++ --version cmake --version make --version unzip --version dpkg -l build-essential | grep build-essential | grep ii dpkg -l zlib1g-dev| grep zlib1g-dev| grep ii dpkg -l libbz2-dev| grep libbz2-dev| grep ii dpkg -l libsqlite3-dev| grep libsqlite3-dev| grep ii dpkg -l libssl-dev| grep libssl-dev| grep ii dpkg -l libxslt1-dev| grep libxslt1-dev| grep ii dpkg -l libffi-dev| grep libffi-dev| grep ii若分别返回如下信息则说明已经安装。
gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 cmake version 3.10.2 GNU Make 4.1 UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP. build-essential 12.4ubuntu1 amd64 Informational list of build-essential packages zlib1g-dev:amd64 1:1.2.11.dfsg-0ubuntu2 amd64 compression library - development libbz2-dev:amd64 1.0.6-8.1ubuntu0.2 amd64 high-quality block-sorting file compressor library - development libsqlite3-dev:amd64 3.22.0-1ubuntu0.2 amd64 SQLite 3 development files libssl-dev:amd64 1.1.1-1ubuntu2.1~18.04.5 amd64 Secure Sockets Layer toolkit - development files libxslt1-dev:amd64 1.1.29-5ubuntu0.2 amd64 XSLT 1.0 processing library - development kit libffi-dev:amd64 3.2.1-8 amd64 Foreign Function Interface library (development files)否则请执行如下安装命令(如果只有部分软件未安装,则如下命令修改为只安装还未安装的软件即可):
sudo apt-get install -y gcc g++ cmake make unzip build-essential zlib1g-dev libbz2-dev libsqlite3-dev libssl-dev libxslt1-dev libffi-devlibsqlite3-dev需要在python安装之前安装,如果用户操作系统已经安装python3.7.5环境,在此之后再安装libsqlite3-dev,则需要重新编译python环境。
-
检查系统是否安装python开发环境。(Ubuntu22.04 自带Python3.10.12,无需自行安装Python环境)
CANN软件包依赖python环境,分别使用命令python3.7.5 --version、python3.7 --version、pip3.7.5 --version检查是否已经安装,如果返回如下信息则说明已经安装。
否则请根据如下方式安装python3.7.5。
-
使用wget下载python3.7.5源码包,可以下载到开发环境任意目录,命令为:
-
进入下载后的目录,解压源码包,命令为:
-
进入解压后的文件夹,执行配置、编译和安装命令:
cd Python-3.7.5 ./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared make sudo make install其中“--prefix”参数用于指定python安装路径,用户根据实际情况进行修改。“--enable-shared”参数用于编译出libpython3.7m.so.1.0动态库,“--enable-loadable-sqlite-extensions”参数用于加载sqlite-devel依赖。
本手册以--prefix=/usr/local/python3.7.5路径为例进行说明。执行配置、编译和安装命令后,安装包在/usr/local/python3.7.5路径,libpython3.7m.so.1.0动态库在/usr/local/python3.7.5/lib/libpython3.7m.so.1.0路径。
-
执行如下命令设置软链接:
-
设置python3.7.5环境变量。
-
如果python安装用户为root:
该场景下CANN软件包使用root用户进行安装,请在当前终端窗口直接执行如下命令设置环境变量。
#用于设置python3.7.5库文件路径 export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH #如果用户环境存在多个python3版本,则指定使用python3.7.5版本 export PATH=/usr/local/python3.7.5/bin:$PATH
须知: 运行用户是root,不建议修改.bashrc,否则可能会影响其它系统提供的python工具的使用,如果仍想使用系统默认工具,请重新开启终端窗口。
-
如果python安装用户为非root:
该场景下CANN软件包使用非root用户进行安装,请以非root用户在任意目录下执行vi ~/.bashrc命令,打开.bashrc文件,在文件最后一行后面添加如下内容。
#用于设置python3.7.5库文件路径 export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH #如果用户环境存在多个python3版本,则指定使用python3.7.5版本 export PATH=/usr/local/python3.7.5/bin:$PATH执行:wq!命令保存文件并退出,执行source ~/.bashrc命令使其立即生效。
-
-
安装完成之后,执行如下命令查看安装版本,如果返回相关版本信息,则说明安装成功。
-
-
安装CANN软件包的相关依赖。
安装前请先使用pip3.7.5 list命令检查是否安装相关依赖,若未安装,则安装命令如下(如果只有部分软件未安装,则如下命令修改为只安装还未安装的软件即可)。
- 请在安装前配置好pip源,具体可参考“配置pip源”。
- 安装前,建议执行命令pip3 install --upgrade pip进行升级,避免因pip版本过低导致安装失败。
- 如下命令如果使用非root用户安装,需要在安装命令后加上--user,例如:pip3 install pathlib2 --user,安装命令可在任意路径下执行。
表 2 Hi3519DV500依赖列表
表 3 Hi3516CV610依赖列表
说明:
上述软件包安装成功后返回信息中的版本号只是样例,请以实际环境中的返回信息为准。
使用CANN软件包的安装用户将获取的软件包上传到开发环境任意路径下。软件包存放路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.(非相对路径))、单个/(文件名或目录不支持/)。
软件包安装
请参见“安装前准备”完成安装前准备。
如下命令中的*请替换为具体CANN软件包,命令中所涉及的${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。
- 以CANN软件包的安装用户登录开发环境,切换到软件包所在路径。
-
增加安装用户对软件包的可执行权限。
在软件包所在路径执行ls -l命令检查安装用户是否有该文件的执行权限,若没有,请执行如下命令。
-
校验软件包。
执行如下命令,校验软件包安装文件的一致性和完整性。
-
执行如下命令进行安装(以下命令支持--install-path=_<path>_等参数,具体参数说明请参见“参数说明/常用命令”)。
说明: - 如果以root用户安装,建议不要安装在非root用户目录下,否则存在被非root用户替换root用户文件以达到提权目的的安全风险。
- 如果要多个版本并存,请使用--install-path=<path>指定新版本的安装路径。
- 如果默认安装路径下已经安装了其他架构NPU的版本,请使用--install-path=<path>指定新的安装路径。否则安装和更新将覆盖原有版本。
若出现如下关键信息,则说明安装成功:
- 软件包默认安装路径:root用户/usr/local/Ascend;非root用户$HOME/Ascend。
- 安装详细日志路径:${INSTALL_DIR}/ascend_install.log。
- 安装后软件包的安装路径、安装命令以及运行用户信息记录路径:${INSTALL_DIR}/ascend_toolkit_install.info
${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。
-
配置环境变量。
执行如下命令配置环境变量。
${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。
-
链接交叉编译链依赖库
执行如下命令链接交叉编译链依赖库
安装后处理
开发环境安装完毕,如果用户使用应用工程开发了相关程序,需要进行工程的编译和运行,用于生成相关二进制文件,进行工程编译之前,请先配置交叉编译环境。
根据开发环境安装时选择的CANN软件包的形态不同,交叉编译环境配置方法不同,当前版本仅支持Linux操作系统SoC形态的CANN软件包。
若安装的CANN软件包为Linux操作系统SoC形态,需要搭建交叉编译环境,具体方法请参考交叉编译环境准备。
常用操作
查询软件包版本号
- 以CANN软件包的安装用户登录软件包的安装环境。
-
进入CANN软件包安装后文件存储路径。(如下以进入非root用户默认安装路径为例进行说明)
-
执行以下命令获取版本信息。
升级软件包
- 升级过程禁止进行其他维护操作动作,软件版本升级过程中会导致业务中断,升级软件包后,不会影响正常业务。
- 为了减少对业务的影响,请提前切走业务或在业务量低时进行升级操作。
- 升级后,请确保所有组件的版本保持一致。
- 升级过程中的日志信息输出在:${INSTALL_DIR}/ascend_install.log文件中,${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。
- 以CANN软件包的安装用户将新的软件包上传到开发环境任意目录。
-
增加安装用户对软件包的可执行权限。
在软件包所在路径执行ls -l命令检查安装用户是否有该文件的执行权限,若没有,请执行如下命令。
-
校验软件包。
下载软件包后,执行如下命令校验软件包安装文件的一致性和完整性。
-
执行如下命令进行升级。
*请替换为具体软件包名,如果升级过程中无错误信息提示,则表示升级成功。
说明: 当存在多个版本时,如果存在与升级版本相同的版本,则直接升级,否则报错,需要通过--install-path指定升级路径。
-
检查升级后的版本号。
升级后需要确保各组件的版本号一致。在软件包的安装路径下(例如,非root用户默认路径$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux),执行如下命令查看所升级软件包版本是否正确。
关于升级保留文件的说明:
- 如果用户在CANN软件包安装后文件存储路径有写权限的目录,自定义了文件,则升级时不会删除此类文件,保留的文件数据会继承到升级的版本中。
- 如果用户修改了安装路径下的有写权限的已有文件(非用户自定义的),则升级时会删除此类文件。
解压软件包
如果用户想要解压CANN软件包,查看软件包中文件的详细内容,则可以执行如下命令:
*请替换为具体软件包名,<path>表示解压后文件所在目录,该目录无需用户手动建立,解压过程中会自动创建,例如:
./*.run --noexec --extract=./package,则命令执行后会自动将解压后的内容放在package目录。
卸载软件包
支持两种方式卸载,请使用软件包的安装用户根据实际情况选择其中一个方式卸载即可。
如下命令中的*请替换为具体CANN软件包,命令中所涉及的${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。
- 以软件包的安装用户登录软件包所在安装环境。
-
进入软件包所在路径,执行以下命令进行卸载。
卸载完成后,若显示如下信息,则说明软件卸载成功:
_xxx_表示卸载的实际软件包名。
- 如果安装时使用了--install-path指定了安装路径,卸载时需要使用--install-path指定卸载路径。
- 如果安装路径包含多个版本,卸载时需要使用--install-path指定卸载版本的路径。
- 以CANN软件包的安装用户登录软件包所在安装环境。
-
在任意路径分别执行如下命令卸载软件包:
其中,
- ${INSTALL_PATH}为软件包基础安装路径,例如root用户默认安装路径/usr/local/Ascend;非root用户默认安装路径$HOME/Ascend,请根据实际情况进行替换。
- _<version>_表示软件版本号。
卸载完成后,若显示如下信息,则说明软件卸载成功:
_xxx_表示卸载的实际软件包名。卸载完成后,如果在原安装路径下存在未删除的软链接,则需要用户手动删除。
关于卸载保留文件的说明:
- 如果用户在CANN软件包安装后文件存储路径有写权限的目录,自定义了文件,则卸载时不会删除此类文件,保留的文件数据会继承到新安装的版本中。
- 如果用户修改了安装路径下的有写权限的已有文件(非用户自定义的),则卸载时会删除此类文件。
设置用户有效期
为保证用户的安全性,应设置用户的有效期,使用系统命令chage来设置用户的有效期。
命令为:
相关参数请参见设置用户有效期。
表 1 设置用户有效期
说明:
- 表1只列举出常用的参数,用户可通过chage --help命令查询详细的参数说明。
- 日期格式为YYYY-MM-DD,如chage -E 2020-12-01 _username_表示用户_username_的口令在2020年12月1日过期。
- _username_必须填写,填写时请替换为具体用户,默认为root用户。
举例说明:修改用户_username_的有效期为2020年12月01日。
配置pip源
配置pip源,配置方法如下:
-
使用软件包安装用户,执行如下命令:
如果提示目录不存在,则执行如下命令创建:
在.pip目录下创建pip.conf 文件,命令为:
-
编辑pip.conf文件。
使用vi pip.conf命令打开pip.conf文件,写入如下内容:
-
执行:wq!命令保存文件。
-
(可选)如果更换pip源之后,仍旧无法连接网络,则可能是域名服务器改变导致,需要更换域名服务器IP地址,方法如下:
-
在linux服务器执行如下命令获取新的域名服务器IP地址:
域名地址可以从更新后的pip源中获取,例如上述的trusted-host取值:
-
将4.a中获取到的新的域名服务器IP地址写入/etc/resolv.conf文件。
切换到root用户,执行vi /etc/resolv.conf命令打开/etc/resolv.conf,在该文件最后增加如下内容:
-
增加完成后,执行:wq!命令保存文件并退出。
-
附录
参数说明/常用命令
软件包支持根据命令行完成一键式安装,各个命令之间可以配合使用,用户根据安装需要选择对应参数完成安装,所有参数都是可选参数。
安装命令格式: ./*.run [options]
详细参数请参见表1。
须知:
如果通过./*.run --help命令查询出的参数未解释在如下表格,则说明该参数预留或适用于其他芯片版本,用户无需关注。
表 1 安装包支持的参数说明
SVP_NPU环境安装(Docker)
本章描述如何构建一个服务器侧Docker环境,支持SVP_NNN_PC软件包中的工具运行,当前宿主机仅支持Ubuntu 18.04 x86_64、Ubuntu 22.04 x86_64操作系统。
说明:
容器仅作为模型调试调优环境,不建议作为实际产品部署环境。
通过Dockerfile构建镜像
宿主机与容器操作系统兼容性关系
当前采用Ubuntu XX.XX x86_64 作为宿主机操作系统和容器的操作系统构建容器镜像,兼容性关系如表1所示。
表 1 宿主机与容器操作系统
说明:
容器内已提前装配好SVP_NPU工具(ATC、AMCT、MindCmd等)的运行环境依赖,无需在容器内重复安装对应组件的环境依赖。(详见Docker镜像软件清单)
前提条件
请按照表1所示,获取构建镜像所需的软件包、Dockerfile文件和其他相关文件。部分需要用户自行下载的第三方软件包,请参考表格中提供的链接进行下载,确保下载的软件版本和文件名与构建镜像所需软件版本和文件名一致。
表 1 所需软件包及文件说明
说明:
- 软件包名称中{version}表示版本号,{platform}表示指定编译的平台,可选CPU或GPU
- 请参考表1中提供的链接下载第三方软件包。为了确保镜像构建过程稳定,建议先执行 prebuild.sh 脚本下载镜像构建所需的第三方软件包。
- 用户构建镜像前需核对软件包下载是否正常,如出现网络问题导致软件包下载异常的情况,用户需重新下载对应的软件包。用户手动中断prebuild.sh脚本执行可能会导致部分软件包下载不全。
- 以上表1中的下载链接仅供参考,对上述参考下载链接的安全性不负责任。
- 由于镜像构建过程中使用的镜像源由基础镜像 Ubuntu XX.XX 决定,请用户根据基础镜像决定是否更换镜像源。更换镜像源可参考 Mirror_conf.sh 中提供的示例进行修改,示例仅供参考,并不适用所有环境,请用户根据环境需要自行设置合适的镜像源。
- 如果用户服务器环境和外部网络存在网络隔离,请自行配置Docker网络代理。
操作步骤
- 登录服务器。
-
上传Dockerfile文件至服务器,解决方案提供了CPU版本和GPU版本的Dockerfile文件,请用户根据实际情况选择使用。
以“/home/$USER”为例,将Dockerfile文件上传至服务器/home/$USER路径下。
-
在Dockerfile文件同级目录下创建Resources目录用于存放构建镜像所需软件包和相关文件。
将表1所示软件包及相关文件上传至服务器“/home/$USER/Resources”目录下。
或将prebuild.sh上传至Resources目录下,通过执行prebuild.sh脚本自动下载镜像构建所需的第三方软件包。
说明: 用户需根据选择的Dockerfile,更改prebuild.sh中软件包的下载版本,默认下载GPU版本依赖的第三方软件包。
-
检查镜像构建目录层级结构,Dockerfile文件和Resources目录要求位于同一层级,以“/home/$USER”为例,镜像构建目录的层级结构如下:
├── /home/$USER ├──Resources ├── gcc-{version}-aarch64-v01c01-linux-{suffix}.tgz ├── SVP_NNN_PC_{version}.tgz ├── Makefile.config ├── Mirror_conf.sh ├── ...... ├──Dockerfile
说明: - Hi3516CV610/Hi3516CV608形态下交叉编译链为gcc-{version}-arm-v01c02-linux-{suffix}.tgz
- $USER表示用户自定义的Docker镜像构建根目录,用户根据实际情况替换。
- 由于Dockerfile文件定义了解决方案所依赖的第三方软件包安装命令,针对这些第三方软件自身出现的漏洞或安全问题,请用户自行修复。
- 不允许在 /home/$USER/Resources目录下放置多个版本交付包SVP_NNN_PC_{version}.tgz 用于Docker镜像构建。
- 请检查Resources目录下是否存放表1中所列举的文件或软件包,引入额外软件包或软件包缺失可能导致镜像构建失败。
- 如果为非root用户登录,请使用如下命令检查用户是否在Docker用户组中,如果不在,后续构建和启动Docker镜像的命令前需加上sudo_。_
-
进入软件包所在目录,执行以下命令构建镜像,注意不要遗漏命令结尾的“.”。
其中 image 表示镜像名称,tag 表示标签,用户根据实际情况进行修改。
当出现“Successfully built xxx”表示镜像构建成功。
说明: 如使用docker build 命令进行镜像构建时,出现下载超时问题或无法下载的问题,请用户核对 Mirror_conf.sh 中的镜像源是否配置正确,或者更换更为合适的镜像源。
-
构建完成后,执行以下命令查看镜像信息。
显示示例:

编写示例
-
Dockerfile 编写示例
用户可直接使用解决方案提供的Dockerfile文件,或根据自身需求对解决方案提供的Dockerfile文件进行二次开发。
-
Mirror_conf.sh 编写示例
如用户Ubuntu XX.XX 中配置的镜像源在Docker镜像构建过程中无法正常下载所需软件包,请参考Mirror_conf.sh修改合适的镜像源。
下述示例中,设置了http://mirrors.aliyun.com为镜像源,该镜像源并不一定适用所有的环境,请用户选择适合的镜像源进行替换。
#!/bin/bash # Mirror source configuration # The following configuration of mirror sources is for reference only. # You need to configure proper mirror sources based on your environment requirements. # Configure the image source according to the following example to ensure that the software package can be downloaded during image construction. ############## Modify the following information as required .################## # cp -a /etc/apt/sources.list /etc/apt/sources.list.bak # sed -i "s@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list # sed -i "s@http://.*security.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list # mkdir -p /root/.pip/ # echo '[global]' >> /root/.pip/pip.conf # echo 'trusted-host=mirrors.aliyun.com' >> /root/.pip/pip.conf # echo 'index-url=http://mirrors.aliyun.com/pypi/simple' >> /root/.pip/pip.conf
部署容器
-
在运行环境中执行如下命令基于新的镜像运行一个容器,相关参数说明如表1所示。
CPU启动容器示例:
docker run -itd --shm-size=1g -v /tmp/.X11-unix:/tmp/.X11-unix -v ${host_mount_dir}:${host_mount_dir} -p ${port}:22 --name ${container_name} ${image_name}GPU启动容器示例:
docker run -itd --gpus all --shm-size=1g -v /tmp/.X11-unix:/tmp/.X11-unix -v ${host_mount_dir}:${host_mount_dir} -p ${port}:22 --name ${container_name} ${image_name}
说明: - 上下文参数中以变量符"${ }"形式描述的参数需要用户根据自己的环境进行填写,其他参数直接添加到执行命令中即可。 示例:如果用户挂载的数据卷为“/home/xxx”,那么对应填写的参数 -v ${host_mount_dir}:${host_mount_dir}为“-v /home/xxx:/home/xxx”。 示例:如果用户分配的端口为“40001”,那么对应填写的参数 :“-p ${port}:22”为“-p 40001:22”。 类似-itd、--gpus all等参数则直接拼接到命令当中,无需进行修改。
- 当容器中没有配置与宿主机同uid、gid的用户时,挂载目录会被修改权限,可通过“sudo chown -R ${user}:${group} ${mount_path}”的方式修改挂载目录权限。
- 上下文参数中以变量符"${ }"形式描述的参数需要用户根据自己的环境进行填写,其他参数直接添加到执行命令中即可。
- Docker启动命令参数有顺序限制,请勿自行调整参数顺序,否则在使用上可能受到影响。
表 1 运行容器命令参数说明
挂载文件夹,用于宿主机与容器文件资源共享。${host_mount_dir}路径要求为服务器侧已存在路径,且前后${host_mount_dir}填写的路径应该保持一致。如需在容器中使用MindCmd上板功能,该参数不可省略。
将容器ssh端口22映射到宿主机的某个端口,宿主机上的端口不能被占用,可执行“netstat -anp |grep 端口号 ”,如果没有回显,表示端口未被占用。
-
容器使用示例:
-
启动容器并进入容器(如容器关闭),其中${container_name}为启动容器时配置的容器名称。
执行该命令后,如果命令行显示带有“<SVP_Docker>”标识,则表示已经运行并进入该容器。
-
新建终端,登录宿主机服务器,以ssh方式连接容器,并输入步骤2设置的密码,其中${port}为启动时容器时分配的映射端口。
注意:

OpenSSH服务搭建
服务器侧交叉编译OpenSSH服务
依赖软件包准备
请按照表1所示,获取OpenSSH服务搭建所需软件包。
表 1 软件包说明
|
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.tar.gz |
交叉编译环境准备
获取发布包中的对应交叉编译器,本章节以musl交叉编译链为例。
- Hi3519DV500使用交叉编译链aarch64-v01c01-linux-musl,交叉编译环境建议使用基于x86_64的Ubuntu 18.04。
-
Hi3516CV610使用交叉编译链arm-v01c02-linux-musleabi,交叉编译环境建议使用基于x86_64的Ubuntu 22.04。
-
Hi3519DV500
前提条件
使用软件包的安装用户登录服务器,切换到/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin路径查看是否存在aarch64-v01c01-linux-musl-g++交叉编译器:
-
如果存在:
在当前目录执行./aarch64-v01c01-linux-musl-g++ --help命令检查交叉编译工具是否可用,若返回参数信息则说明可用。
-
如果不存在,则说明aarch64-v01c01-linux-musl-g++交叉编译器未安装,请参见如下步骤进行配置。
配置步骤
-
解压工具链aarch64-v01c01-linux-musl
-
执行安装脚本(可以参考readme指定其他安装路径):
-
查看安装情况:
此时交叉编译器已被安装至/opt/linux/x86-arm路径下,所需的环境变量也已自动更新到/etc/profile中。执行以下命令应该能正常显示gcc版本,如图1所示。

-
-
Hi3516CV610
前提条件
使用软件包的安装用户登录服务器,切换到/opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc/bin路径查看是否存在arm-v01c02-linux-musleabi-g++交叉编译器:
-
如果存在:
在当前目录执行./arm-v01c02-linux-musleabi-g++ --help命令检查交叉编译工具是否可用,若返回参数信息则说明可用。
-
如果不存在,则说明arm-v01c02-linux-musleabi-g++交叉编译器未安装,请参见如下步骤进行配置。
配置步骤
-
解压工具链arm-v01c02-linux-musleabi
-
执行安装脚本(可以参考readme指定其他安装路径):
-
查看安装情况:
此时交叉编译器已被安装至/opt/linux/x86-arm路径下,所需的环境变量也已自动更新到/etc/profile中。执行以下命令应该能正常显示gcc版本,如图2所示。

-
编译和安装OpenSSH
将OpenSSH服务搭建所需软件包下载到用户路径 "/home/$USER/ssh_install" 下进行编译和安装
zlib
-
解压zlib的源码压缩包,并进入解压后的目录
-
配置交叉编译器及安装路径:
Hi3519DV500:
Hi3516CV610:
-
编译及安装:
OpenSSL
-
解压OpenSSL的源码压缩包,并进入解压后的目录。
-
配置编译选项、交叉编译器及安装路径:
Hi3519DV500:
./config no-asm shared --cross-compile-prefix=aarch64-v01c01-linux-musl- --prefix=/home/$USER/ssh_install/opensslHi3516CV610:
-
替换Makefile中的编译选项
Hi3519DV500: 将生成的Makefile中的所有"-m64"修改为"-mabi=lp64"。如图1和图2所示。


Hi3516CV610: 将生成的Makefile中的所有"-m64"去除。
-
编译及安装:
注:make -j并行编译可能会失败,若失败可直接make
OpenSSH
-
解压OpenSSH的源码压缩包,并进入:
-
配置编译选项、交叉编译器及安装路径:
Hi3519DV500:
./configure --host=aarch64-linux --with-libs --with-zlib=/home/$USER/ssh_install/zlib --with-ssl-dir=/home/$USER/ssh_install/openssl CC=aarch64-v01c01-linux-musl-gcc AR=aarch64-v01c01-linux-musl-ar --prefix=/home/$USER/ssh_install/openssh --exec-prefix=/home/$USER/ssh_install/openssh --disable-etc-default-login --disable-stripHi3516CV610:
./configure --host=arm-linux --with-libs --with-zlib=/home/$USER/ssh_install/zlib --with-ssl-dir=/home/$USER/ssh_install/openssl CC=arm-v01c02-linux-musleabi-gcc AR=arm-v01c02-linux-musleabi-ar --prefix=/home/$USER/ssh_install/openssh --exec-prefix=/home/$USER/ssh_install/openssh --disable-etc-default-login --disable-strip --without-pie ac_cv_func_utimes=yes ac_cv_search_nanosleep= -
编译及安装:
注:install时若提示无权限创建/var/empty(privilege separation directory),则可以使用sudo创建后再使用chown改变owner,如果没有sudo权限,则修改Makefile文件中/var/empty路径为当前用户目录下的路径:如:/home/$USER/ssh_install/empty,只要在板端也有相同路径即可,如图1所示。

再次执行make install,此时若提示ssh-keygen执行失败,如下代码所示,这是由于arm架构的可执行文件不识别,可暂时忽略,因为所需的文件(sshd, scp, ssh-keygen等)都已安装至目标路径。
/bin/mkdir -p /home/$USER/ssh_install/openssh/etc /home/$USER/ssh_install/openssh/etc/ssh_config already exists, install will not overwrite /home/$USER/ssh_install/openssh/etc/sshd_config already exists, install will not overwrite /home/$USER/ssh_install/openssh/etc/moduli already exists, install will not overwrite /bin/sh: line 1: ./ssh-keygen: cannot execute binary file: Exec format error Makefile:388: recipe for target 'host-key' failed make: *** [host-key] Error 126 -
查看安装结果,包含sshd, scp, ssh-keygen等。如图2所示。

板端部署OpenSSH服务
挂载命令
-
由于板端硬件资源有限,因此需要使用mount命令将NFS服务器上的目录挂载到板端环境的指定目录。
-
以root用户登录Linux服务器(Ubuntu操作系统),安装NFS服务并配置共享目录。
确保网络环境可用,可参考如下命令安装NFS服务,如果安装过程中提示已安装NFS服务,则无需重复安装:
在“/etc/exports”文件中配置共享目录,参考如下配置段添加在文件的末尾,配置的“服务器绝对路径”即为共享目录,请根据实际情况替换,如过此目录不存在,请提前创建。配置完成后,执行/etc/init.d/nfs-kernel-server restart命令重启NFS服务使配置生效。
-
登录板端,参考如下命令示例将板端路径挂载到服务器共享目录,其中,“服务器绝对路径”为服务器侧共享目录,_“path”_为板端环境的目录,需根据实际情况修改。
-
首次部署操作
-
挂载
-
切换至挂载目录,部署zlib和OpenSSL相关产物
-
切换至挂载目录,部署OpenSSH所需的可执行文件
-
使用ssh-keygen生成密钥对
mkdir /etc/ssh ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 回车两次打印如下: Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_rsa_key. Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub. The key fingerprint is: SHA256:sirIxKjt/OtcVQh1bNSaHU6CQp7L6rI5tm8CtKznEF8 root@(none) The key's randomart image is: +---[RSA 3072]----+ | .o..+o. | | ..o.o+ + | | o....B . | | . . . .o o | |* . E + S | |oB . . + | |*+. . o | |++O+.o | | =B%O. | +----[SHA256]-----+ -
配置/etc/passwd
-
配置/etc/group
-
创建privilege separation directory
-
拷贝config至/etc并修改:
-
修改ssh密码不为空
-
启动sshd,需指定config和key的路径
快速部署操作
完成“服务器侧交叉编译OpenSSH服务”和“首次部署操作”操作后,下次启动sshd,可参考如下快速启动:
-
挂载
-
启动sshd,需指定config和key的路径
-
参考“配置环境变量”
配置环境变量
进行上板运行时依赖acllib的动态库,故以挂载路径/tmp/acllib/stub为例,假设acllib在此路径下,则按照如下方法配置LD_LIBRARY_PATH环境变量。
方法一:直接配置,但是退出当前终端后就失效
方法二: 修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile
# 1. 在文本中添加例如:
export LD_LIBRARY_PATH=/tmp/acllib/stub:$LD_LIBRARY_PATH
# 2. 执行命令生效
source ~/.bashrc
附录
公网URL
表 1 公网URL说明
Docker镜像软件清单
Ascend-cann-toolkit_{version}_linux.x86_64.run (根据用户传入的SVP包进行安装) |
|
Ascend-cann-toolkit_{version}_linux.x86_64.run (根据用户传入的SVP包进行安装) |
|