跳转至

驱动和开发环境安装指南

前言

概述

该文档为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内容完全一致。

产品版本

与本文档相对应的产品版本如下。

产品名称

产品版本

Hi3519D

V500

Hi3516D

V500

Hi3516C

V608

Hi3516C

V610

读者对象

本文档主要适用于SVP___NPU开发人员。开发人员必须具备以下经验和技能:

  • 了解图像分析工具的基本概念。
  • 有一定的图像分析工具开发经验。

修订记录

修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。

文档版本

发布日期

修改说明

00B02

2026-09-30

第2次临时版本发布

2.2.4小节添加步骤6

00B01

2026-06-30

第1次临时版本发布

概述

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认识的离线模型;最后,离线模型放置在板端环境,即可进行推理。

图 1 部署架构

板端环境

板端环境中包含板端执行推理时需要的头文件、动态库、驱动ko以及sample。

开发环境

命令行方式开发环境:

该场景下的开发环境需要单独部署CANN软件包,采用命令行的方式进行安装和使用,具体方法请参见“命令行方式开发环境安装”。

该环境可安装独立的AMCT工具,支持将原始的float32模型,量化为低bit,以提升推理性能。工具安装以及使用方法请参见《AMCT使用指南(Caffe)》、《AMCT使用指南(Pytorch)》等手册。

使用流程

本章节介绍原始训练好的模型如何在SVP___NPU上执行以及遇到问题的整体使用流程,运行流程如图1所示。

图 1 运行流程

下面以Caffe原始网络模型为例,说明运行流程:

  1. 当训练好的Caffe模型准备好后,可以直接使用ATC工具进行模型转换,也可以使用AMCT先进行量化,然后将量化后的Caffe模型再传给ATC工具进行离线模型转换。
  2. ATC离线模型转换后生成的om模型,可以在板端环境上使用ACL(Advanced Computing Language)做推理。
  3. 推理后如果遇到精度问题,可以选择Dump网络的中间层数据,和Caffe的Dump结果做比较,来定位是哪一层的问题。为了缩小范围,可以使用MindCmd上的子模型导出功能(当前仅支持Caffe模型),将问题范围缩小,再使用导出的子模型复现问题。
  4. 当推理性能不满足要求时,可以通过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 板端开发依赖的文件

    文件类型

    文件名称

    头文件

    svp_acl.h

    svp_acl_base.h

    svp_acl_ext.h

    svp_acl_mdl.h

    svp_acl_prof.h

    svp_acl_rt.h

    库文件

    libsvp_acl.a

    libsvp_acl.so

    libsvp_aicpu.so

    libss_mpi_sysmem.so

    libss_mpi_km.so(Hi3516CV610不依赖这个库)

    libprotobuf-c.a

    libprotobuf-c.so -> libprotobuf-c.so.1.0.0

    libprotobuf-c.so.1 -> libprotobuf-c.so.1.0.0

    libprotobuf-c.so.1.0.0

    ko文件

    ot_svp_npu.ko

    ot_km.ko (执行加密模型需要依赖,Hi3516CV610不依赖这个模块)

命令行方式开发环境安装

简介

CANN(Compute Architecture for Neural Networks)是针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建AI应用和业务。

本文档主要用于指导用户安装CANN开发环境,用于代码开发、编译等不依赖于设备的开发活动(例如ATC模型转换、算子和推理应用程序的纯代码开发)。开发环境搭建逻辑架构如图1所示。

图 1 开发环境

安装流程如图2所示。

图 2 安装流程

软件包获取

环境搭建前,请准备如表1所示CANN软件包,用户根据具体板端环境,选择其中一个软件包进行安装。

表 1 软件包说明

形态

包名

说明

Linux操作系统SoC形态软件包

Ascend-cann-toolkit_<version>_linux.x86_64.run

主要用于用户开发应用、自定义算子和模型转换。包含开发应用程序所需的库文件、开发辅助工具如ATC模型转换工具等。

其中_<version>_表示软件版本号。

安装前准备

环境要求

开发环境所要求的硬件及操作系统要满足以下条件。

表 1 Ubuntu系统所要求的环境信息

类别

版本限制

获取方式

注意事项

Hi3519DV500

Hi3516CV610

Hi3519DV500

Hi3516CV610

硬件

内存:最小4GB

-

-

  • 若Linux宿主机内存为4G,使用ATC工具进行模型转换时,建议Model文件大小不超过350M,如果超过此规格,操作系统可能会因为超过安全内存阈值而工作不稳定。
  • 若Linux宿主机配置升级,比如8G内存,则相应支持的操作对象规格按比例提升。

    例如,内存由4G升级到8G,则Model文件建议大小不超过700M。

操作系统

Ubuntu 18.04 x86_64

Ubuntu 22.04 x86_64

请从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。

-

Python

3.7.5

3.10.12

请参见“安装依赖”。

-

gcc

7.4.0

11.4.0

请参见“安装依赖”。

-

g++

7.4.0

11.4.0

请参见“安装依赖”。

-

cmake

3.10.2

3.22.1+

请参见“安装依赖”。

-

protobuf

3.13.0+

请参见“安装依赖”。

该依赖为精度比对工具和Profiling工具使用,为python版本的软件。

创建安装及运行用户

运行用户为实际运行推理业务的用户;安装用户为实际安装软件包的用户,针对安装用户:

  • 若使用root用户安装,支持所有用户运行相关业务。
  • 若使用非root用户安装,该场景下安装及运行用户必须相同。
    • 若已有非root用户,则无需再次创建。
    • 若想使用新的非root用户,则需要先创建该用户,请参见如下方法创建。

创建非root用户操作方法如下,如下命令请以root用户执行。

  1. 创建非root用户。

    groupadd usergroup
    useradd -g usergroup -d /home/username -m username -s /bin/bash
    
  2. 设置非root用户密码。

    passwd username
    

说明:

密码有效期为90天,您可以在/etc/login.defs文件中修改有效期的天数,或者通过chage命令来设置用户的有效期,详情请参见“设置用户有效期”。

检查源

安装过程需要下载相关依赖,请确保开发环境能够连接网络。

请在root用户下执行如下命令检查源是否可用。

apt-get update

如果命令执行报错,请检查网络是否连接或者把“/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用户安装依赖软件。

  1. 检查系统是否安装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-dev
    

    libsqlite3-dev需要在python安装之前安装,如果用户操作系统已经安装python3.7.5环境,在此之后再安装libsqlite3-dev,则需要重新编译python环境。

  2. 检查系统是否安装python开发环境。(Ubuntu22.04 自带Python3.10.12,无需自行安装Python环境)

    CANN软件包依赖python环境,分别使用命令python3.7.5 --version、python3.7 --version、pip3.7.5 --version检查是否已经安装,如果返回如下信息则说明已经安装。

    Python 3.7.5
    pip 19.2.3 from /usr/local/python3.7.5/lib/python3.7/site-packages/pip (python 3.7)
    

    否则请根据如下方式安装python3.7.5。

    1. 使用wget下载python3.7.5源码包,可以下载到开发环境任意目录,命令为:

      wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
      
    2. 进入下载后的目录,解压源码包,命令为:

      tar -zxvf Python-3.7.5.tgz 
      
    3. 进入解压后的文件夹,执行配置、编译和安装命令:

      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路径。

    4. 执行如下命令设置软链接:

      sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/local/python3.7.5/bin/python3.7.5
      sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/local/python3.7.5/bin/pip3.7.5
      
    5. 设置python3.7.5环境变量。

      1. 如果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工具的使用,如果仍想使用系统默认工具,请重新开启终端窗口。

      2. 如果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命令使其立即生效。

    6. 安装完成之后,执行如下命令查看安装版本,如果返回相关版本信息,则说明安装成功。

      python3.7.5 --version
      pip3.7.5 --version
      python3.7 --version
      pip3.7  --version
      
  3. 安装CANN软件包的相关依赖。

    安装前请先使用pip3.7.5 list命令检查是否安装相关依赖,若未安装,则安装命令如下(如果只有部分软件未安装,则如下命令修改为只安装还未安装的软件即可)。

    • 请在安装前配置好pip源,具体可参考“配置pip源”。
    • 安装前,建议执行命令pip3 install --upgrade pip进行升级,避免因pip版本过低导致安装失败。
    • 如下命令如果使用非root用户安装,需要在安装命令后加上--user,例如:pip3 install pathlib2 --user,安装命令可在任意路径下执行。

    表 2 Hi3519DV500依赖列表

    依赖名称

    版本号

    安装命令

    google.protobuf

    >=3.13.0

    pip3.7.5 install protobuf3.13.0 --user

    psutil

    >=5.9.0

    pip3.7.5 install psutil5.9.0 --user

    numpy

    >=1.16.0

    pip3.7.5 install numpy1.16.0 --user

    scipy

    >=1.6.2

    pip3.7.5 install scipy1.6.2 --user

    decorator

    >=4.4.0

    pip3.7.5 install decorator==4.4.0 --user

    sympy

    >= 1.5.1

    pip3.7.5 install sympy1.5.1 --user

    cffi

    1.15.1

    pip3.7.5 install cffi1.15.1 --user

    pyyaml

    >=5.4

    pip3.7.5 install pyyaml==5.4 --user

    pathlib2

    -

    pip3.7.5 install pathlib2 --user

    表 3 Hi3516CV610依赖列表

    依赖名称

    版本号

    安装命令

    google.protobuf

    >=3.19.0

    pip3.10.12 install protobuf3.19.0 --user

    psutil

    >=5.9.0

    pip3.10.12 install psutil5.9.0 --user

    numpy

    >=1.23.0

    pip3.10.12 install numpy1.23.0 --user

    scipy

    -

    pip3.10.12 install scipy --user

    decorator

    >=4.4.0

    pip3.10.12 install decorator4.4.0 --user

    sympy

    >= 1.5.1

    pip3.10.12 install sympy1.5.1 --user

    cffi

    1.15.1

    pip3.10.12 install cffi1.15.1 --user

    pyyaml

    >=5.4.1

    pip3.10.12 install pyyaml==5.4.1 --user

    pathlib2

    -

    pip3.10.12 install pathlib2 --user

说明:

上述软件包安装成功后返回信息中的版本号只是样例,请以实际环境中的返回信息为准。

上传软件包

使用CANN软件包的安装用户将获取的软件包上传到开发环境任意路径下。软件包存放路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.(非相对路径))、单个/(文件名或目录不支持/)。

软件包安装

前提条件

请参见“安装前准备”完成安装前准备。

操作步骤

如下命令中的*请替换为具体CANN软件包,命令中所涉及的${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。

  1. 以CANN软件包的安装用户登录开发环境,切换到软件包所在路径。
  2. 增加安装用户对软件包的可执行权限。

    在软件包所在路径执行ls -l命令检查安装用户是否有该文件的执行权限,若没有,请执行如下命令。

    chmod +x *.run
    
  3. 校验软件包。

    执行如下命令,校验软件包安装文件的一致性和完整性。

    ./*.run --check
    
  4. 执行如下命令进行安装(以下命令支持--install-path=_<path>_等参数,具体参数说明请参见“参数说明/常用命令”)。

    ./*.run --install
    

    说明:

    • 如果以root用户安装,建议不要安装在非root用户目录下,否则存在被非root用户替换root用户文件以达到提权目的的安全风险。
    • 如果要多个版本并存,请使用--install-path=<path>指定新版本的安装路径。
    • 如果默认安装路径下已经安装了其他架构NPU的版本,请使用--install-path=<path>指定新的安装路径。否则安装和更新将覆盖原有版本。

    若出现如下关键信息,则说明安装成功:

    [INFO] xxx install success
    
    • 软件包默认安装路径: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。

  5. 配置环境变量。

    执行如下命令配置环境变量。

    source ${INSTALL_DIR}/script/setenv.sh
    

    ${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。

  6. 链接交叉编译链依赖库

    执行如下命令链接交叉编译链依赖库

    bash $HOME/Ascend/ascend-toolkit/<version>/acllib/script/switch_cross_lib.sh arm-v01c02-linux-musleabi-codesize
    

安装后处理

开发环境安装完毕,如果用户使用应用工程开发了相关程序,需要进行工程的编译和运行,用于生成相关二进制文件,进行工程编译之前,请先配置交叉编译环境。

根据开发环境安装时选择的CANN软件包的形态不同,交叉编译环境配置方法不同,当前版本仅支持Linux操作系统SoC形态的CANN软件包。

若安装的CANN软件包为Linux操作系统SoC形态,需要搭建交叉编译环境,具体方法请参考交叉编译环境准备。

常用操作

查询软件包版本号
  1. 以CANN软件包的安装用户登录软件包的安装环境。
  2. 进入CANN软件包安装后文件存储路径。(如下以进入非root用户默认安装路径为例进行说明)

    cd $HOME/Ascend/ascend-toolkit/<version>/x86_64-linux
    
  3. 执行以下命令获取版本信息。

    cat ascend_toolkit_install.info
    
升级软件包

升级注意事项

  1. 升级过程禁止进行其他维护操作动作,软件版本升级过程中会导致业务中断,升级软件包后,不会影响正常业务。
  2. 为了减少对业务的影响,请提前切走业务或在业务量低时进行升级操作。
  3. 升级后,请确保所有组件的版本保持一致。
  4. 升级过程中的日志信息输出在:${INSTALL_DIR}/ascend_install.log文件中,${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。

操作步骤

  1. 以CANN软件包的安装用户将新的软件包上传到开发环境任意目录。
  2. 增加安装用户对软件包的可执行权限。

    在软件包所在路径执行ls -l命令检查安装用户是否有该文件的执行权限,若没有,请执行如下命令。

    chmod +x *.run
    
  3. 校验软件包。

    下载软件包后,执行如下命令校验软件包安装文件的一致性和完整性。

    ./*.run --check
    
  4. 执行如下命令进行升级。

    ./*.run --upgrade
    

    *请替换为具体软件包名,如果升级过程中无错误信息提示,则表示升级成功。

    说明:

    当存在多个版本时,如果存在与升级版本相同的版本,则直接升级,否则报错,需要通过--install-path指定升级路径。

  5. 检查升级后的版本号。

    升级后需要确保各组件的版本号一致。在软件包的安装路径下(例如,非root用户默认路径$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux),执行如下命令查看所升级软件包版本是否正确。

    cat ascend_toolkit_install.info
    

关于升级保留文件的说明:

  • 如果用户在CANN软件包安装后文件存储路径有写权限的目录,自定义了文件,则升级时不会删除此类文件,保留的文件数据会继承到升级的版本中。
  • 如果用户修改了安装路径下的有写权限的已有文件(非用户自定义的),则升级时会删除此类文件。
解压软件包

如果用户想要解压CANN软件包,查看软件包中文件的详细内容,则可以执行如下命令:

./*.run --noexec --extract=<path>

*请替换为具体软件包名,<path>表示解压后文件所在目录,该目录无需用户手动建立,解压过程中会自动创建,例如:

./*.run --noexec --extract=./package,则命令执行后会自动将解压后的内容放在package目录。

卸载软件包

支持两种方式卸载,请使用软件包的安装用户根据实际情况选择其中一个方式卸载即可。

如下命令中的*请替换为具体CANN软件包,命令中所涉及的${INSTALL_DIR}请替换为CANN软件包安装后文件存储路径。例如,$HOME/Ascend/ascend-toolkit/<version>/x86_64-linux。

软件包卸载

  1. 以软件包的安装用户登录软件包所在安装环境。
  2. 进入软件包所在路径,执行以下命令进行卸载。

    ./*.run --uninstall
    

    卸载完成后,若显示如下信息,则说明软件卸载成功:

    [INFO] xxx uninstall success
    

    _xxx_表示卸载的实际软件包名。

    • 如果安装时使用了--install-path指定了安装路径,卸载时需要使用--install-path指定卸载路径。
    • 如果安装路径包含多个版本,卸载时需要使用--install-path指定卸载版本的路径。

脚本卸载

  1. 以CANN软件包的安装用户登录软件包所在安装环境。
  2. 在任意路径分别执行如下命令卸载软件包:

    bash ${INSTALL_PATH}/ascend-toolkit/<version>/x86_64-linux/script/uninstall.sh
    

    其中,

    • ${INSTALL_PATH}为软件包基础安装路径,例如root用户默认安装路径/usr/local/Ascend;非root用户默认安装路径$HOME/Ascend,请根据实际情况进行替换。
    • _<version>_表示软件版本号。

    卸载完成后,若显示如下信息,则说明软件卸载成功:

    [INFO] xxx uninstall success
    

    _xxx_表示卸载的实际软件包名。卸载完成后,如果在原安装路径下存在未删除的软链接,则需要用户手动删除。

关于卸载保留文件的说明:

  • 如果用户在CANN软件包安装后文件存储路径有写权限的目录,自定义了文件,则卸载时不会删除此类文件,保留的文件数据会继承到新安装的版本中。
  • 如果用户修改了安装路径下的有写权限的已有文件(非用户自定义的),则卸载时会删除此类文件。
设置用户有效期

为保证用户的安全性,应设置用户的有效期,使用系统命令chage来设置用户的有效期。

命令为:

chage [-m mindays] [-M maxdays] [-d lastday] [-I inactive] [-E expiredate] [-W warndays] username

相关参数请参见设置用户有效期。

表 1 设置用户有效期

参数

参数说明

-m

口令可更改的最小天数。设置为“0”表示任何时候都可以更改口令。

-M

口令保持有效的最大天数。设置为“-1”表示可删除这项口令的检测。

-d

上一次更改的日期。

-I

停滞时期。过期指定天数后,设定密码为失效状态。

-E

用户到期的日期。超过该日期,此用户将不可用。

-W

用户口令到期前,提前收到警告信息的天数。

-l

列出当前的设置。由非特权用户来确定口令或帐户何时过期。

说明:

  • 表1只列举出常用的参数,用户可通过chage --help命令查询详细的参数说明。
  • 日期格式为YYYY-MM-DD,如chage -E 2020-12-01 _username_表示用户_username_的口令在2020年12月1日过期。
  • _username_必须填写,填写时请替换为具体用户,默认为root用户。

举例说明:修改用户_username_的有效期为2020年12月01日。

chage -E 2020-12-01 username
配置pip源

配置pip源,配置方法如下:

  1. 使用软件包安装用户,执行如下命令:

    cd ~/.pip
    

    如果提示目录不存在,则执行如下命令创建:

    mkdir ~/.pip 
    cd ~/.pip
    

    在.pip目录下创建pip.conf 文件,命令为:

    touch pip.conf
    
  2. 编辑pip.conf文件。

    使用vi pip.conf命令打开pip.conf文件,写入如下内容:

    [install]
    #可信主机,请根据实际情况进行替换。
    trusted-host=xxx
    [global]
    #可用的源,请根据实际情况进行替换。
    index-url=http://xxx
    
  3. 执行:wq!命令保存文件。

  4. (可选)如果更换pip源之后,仍旧无法连接网络,则可能是域名服务器改变导致,需要更换域名服务器IP地址,方法如下:

    1. 获取pip源更新后的域名服务器IP地址。

      在linux服务器执行如下命令获取新的域名服务器IP地址:

      ping 新的域名地址
      

      域名地址可以从更新后的pip源中获取,例如上述的trusted-host取值:

      ping xxx
      
    2. 将4.a中获取到的新的域名服务器IP地址写入/etc/resolv.conf文件。

      切换到root用户,执行vi /etc/resolv.conf命令打开/etc/resolv.conf,在该文件最后增加如下内容:

      nameserver 新的域名服务器IP地址
      
    3. 增加完成后,执行:wq!命令保存文件并退出。

附录

参数说明/常用命令

参数说明

软件包支持根据命令行完成一键式安装,各个命令之间可以配合使用,用户根据安装需要选择对应参数完成安装,所有参数都是可选参数。

安装命令格式: ./*.run [options]

详细参数请参见表1。

须知:

如果通过./*.run --help命令查询出的参数未解释在如下表格,则说明该参数预留或适用于其他芯片版本,用户无需关注。

表 1 安装包支持的参数说明

参数

说明

--help | -h

查询帮助信息。

--list

查询软件包文件列表。

--info

查询软件包构建信息。

--check

检查软件包的一致性和完整性。

--quiet

静默安装,跳过交互式信息。

使用该参数进行安装时,若安装目录权限大于755,则会提示安全风险,用户自行选择终止安装或选择其他权限为755的安装目录重新安装。

该参数需要与--install、--devel、--upgrade、--uninstall其中一个参数配合使用,例如./*.run --install --quiet

--noexec

不执行安装脚本。配套--extract=path使用。格式为:--noexec --extract=path

--extract=path

解压缩安装包中文件到指定目录。使用该参数时,用户无需手动建立指定的目录,解压过程中会自动创建,例如:

--noexec --extract=./package,则命令执行后会自动将解压后的内容放在package目录。

--install

安装软件包。后面可以指定安装路径--install-path=<path>,也可以不指定安装路径,直接安装到默认路径下。

--uninstall

卸载已安装的软件。

--upgrade

升级已安装的软件。

  • root用户首次安装场景,系统默认安装到“/usr/local/Ascend”目录。
  • 非root用户首次安装场景,仅支持从软件包所在路径升级。

--version

查询版本号。

--install-for-all

安装或升级时,允许其他用户具有安装群组的权限。

当安装或者升级携带该参数时,软件包中创建的目录及文件,其他用户权限=安装群组权限。

该参数需要与--install、--upgrade等其中一个参数配合使用,例如./*.run --install --install-for-all

说明:
  • 使用该参数将会存在权限过大的安全风险:其他所有用户都有权限访问安装目录,请谨慎使用。
  • 安装时如果使用该参数:
    • 如果安装路径不存在,则安装过程中会自动创建默认路径,例如$HOME/Ascend,该路径权限为755,其他用户可以正常使用。
    • 如果安装路径已存在,则请确保该目录权限至少为755,否则将会终止安装。

--install-path=<path>

指定安装路径,只支持指定绝对路径。

若通过该参数指定了安装路径,运行用户需要对指定的安装路径有可读写权限。安装路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.(非相对路径))、单个/(文件名或目录不支持/)。

  • 若指定路径不存在,则安装时会自动创建目录,若有多层目录,则只有最后一层目录不存在时会自动创建。
  • 若指定路径已存在,请确保安装用户对该目录有可读,可写,可执行权限,并且root用户安装场景下,如果使用--install-path=<path>指定安装路径,则请确保所有层级目录属主为root,并且所有层级目录权限至少为755,否则需要用户自行修改目录属主或者目录层级权限。

如不指定安装路径:root用户默认安装路径为/usr/local/Ascend;非root用户默认安装路径为$HOME/Ascend。

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 宿主机与容器操作系统

宿主机OS

容器OS

Ubuntu 18.04 x86_64

Ubuntu 18.04 x86_64

Ubuntu 22.04 x86_64

Ubuntu 22.04 x86_64

说明:

容器内已提前装配好SVP_NPU工具(ATC、AMCT、MindCmd等)的运行环境依赖,无需在容器内重复安装对应组件的环境依赖。(详见Docker镜像软件清单)

前提条件

请按照表1所示,获取构建镜像所需的软件包、Dockerfile文件和其他相关文件。部分需要用户自行下载的第三方软件包,请参考表格中提供的链接进行下载,确保下载的软件版本和文件名与构建镜像所需软件版本和文件名一致。

表 1 所需软件包及文件说明

软件包/文件

是否必须放入镜像构建文件夹

说明

获取方法

Hi3519DV500/Hi3516DV500

Hi3516CV610/Hi3516CV608

Hi3519DV500/Hi3516DV500

Hi3516CV610/Hi3516CV608

gcc-{version}-aarch64-v01c01-linux-musl.tgz

gcc-{version}-arm-v01c02-linux-musleabi.tgz

否

交叉编译器,musl和gnu至少放置一个

-

-

gcc-{version}-aarch64-v01c01-linux-gnu.tgz

-

否

交叉编译器,musl和gnu至少放置一个

-

-

SVP_NNN_PC_{version}.tgz

否

版本交付包。如果提供,容器内将自动安装SVP_NNN_PC软件包中的工具,否则需要自行安装。

-

-

Dockerfile

是

镜像构建文件

版本交付包下,获取路径:

SVP_NNN_PC_{version}\Docker\docker\{platform}\Dockerfile

Makefile.config

是

CPU/GPU对应的Caffe编译配置文件

版本交付包下,获取路径:

SVP_NNN_PC_{version}\Docker\docker\{platform}\Makefile.config

Mirror_conf.sh

是

Docker镜像源配置

版本交付包下,获取路径:

SVP_NNN_PC_{version}\Docker\docker\common\Mirror_conf.sh

prebuild.sh

否

软件下载脚本,用户执行该脚本会预先下载镜像构建所需的第三方软件包

版本交付包下,获取路径:

SVP_NNN_PC_{version}\Docker\docker\common\prebuild.sh

postbuild.sh

否

软件清理脚本,构建镜像后,用户可通过执行该脚本清理第三方软件包

版本交付包下,获取路径:

SVP_NNN_PC_{version}\Docker\docker\common\postbuild.sh

protobuf-all-3.13.0.tar.gz

是

Protobuf软件包

用户自行下载,参考链接如下:

http://github.com/protocolbuffers/protobuf/releases/download/v3.13.0/protobuf-all-3.13.0.tar.gz

opencv-3.4.8.tar.gz

是

OpenCV软件包

用户自行下载,参考链接如下:

http://github.com/opencv/opencv/archive/refs/tags/3.4.8.tar.gz

Python-3.7.5.tgz

无

是

Python软件包

用户自行下载,参考链接如下:

http://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

无

caffe-1.0.tar.gz

是

Caffe软件包

用户自行下载,参考链接如下:

https://github.com/BVLC/caffe/archive/refs/tags/1.0.tar.gz

cuda_10.2.89_440.33.01_linux.run

cuda_12.2.0_535.54.03_linux.run

是

Cuda软件包(仅限GPU)

用户自行下载,参考链接如下:

https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run

用户自行下载,参考链接如下:

https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run

torch-1.10.2+cu102-cp37-cp37m-linux_x86_64.whl

torch-2.1.0+cu121-cp310-cp310-linux_x86_64.whl

是

Pytorch软件包(GPU版)

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cu102/torch-1.10.2%2Bcu102-cp37-cp37m-linux_x86_64.whl

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cu121/torch-2.1.0%2Bcu121-cp310-cp310-linux_x86_64.whl

torchvision-0.11.3+cu102-cp37-cp37m-linux_x86_64.whl

torchvision-0.16.0+cu121-cp310-cp310-linux_x86_64.whl

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cu102/torchvision-0.11.3%2Bcu102-cp37-cp37m-linux_x86_64.whl

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cu121/torchvision-0.16.0%2Bcu121-cp310-cp310-linux_x86_64.whl

torchaudio-0.10.2+cu102-cp37-cp37m-linux_x86_64.whl

无

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cu102/torchaudio-0.10.2%2Bcu102-cp37-cp37m-linux_x86_64.whl

无

torch-1.10.2+cpu-cp37-cp37m-linux_x86_64.whl

torch-2.1.0+cpu-cp310-cp310-linux_x86_64.whl

是

Pytorch软件包(CPU版)

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cpu/torch-1.10.2%2Bcpu-cp37-cp37m-linux_x86_64.whl

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cpu/torch-2.1.0%2Bcpu-cp310-cp310-linux_x86_64.whl

torchvision-0.11.3+cpu-cp37-cp37m-linux_x86_64.whl

torchvision-0.16.0+cpu-cp310-cp310-linux_x86_64.whl

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cpu/torchvision-0.11.3%2Bcpu-cp37-cp37m-linux_x86_64.whl

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cpu/torchvision-0.16.0%2Bcpu-cp310-cp310-linux_x86_64.whl

torchaudio-0.10.2+cpu-cp37-cp37m-linux_x86_64.whl

无

用户自行下载,参考链接如下:

https://download.pytorch.org/whl/cpu/torchaudio-0.10.2%2Bcpu-cp37-cp37m-linux_x86_64.whl

无

说明:

  • 软件包名称中{version}表示版本号,{platform}表示指定编译的平台,可选CPU或GPU
  • 请参考表1中提供的链接下载第三方软件包。为了确保镜像构建过程稳定,建议先执行 prebuild.sh 脚本下载镜像构建所需的第三方软件包。
  • 用户构建镜像前需核对软件包下载是否正常,如出现网络问题导致软件包下载异常的情况,用户需重新下载对应的软件包。用户手动中断prebuild.sh脚本执行可能会导致部分软件包下载不全。
  • 以上表1中的下载链接仅供参考,对上述参考下载链接的安全性不负责任。
  • 由于镜像构建过程中使用的镜像源由基础镜像 Ubuntu XX.XX 决定,请用户根据基础镜像决定是否更换镜像源。更换镜像源可参考 Mirror_conf.sh 中提供的示例进行修改,示例仅供参考,并不适用所有环境,请用户根据环境需要自行设置合适的镜像源。
  • 如果用户服务器环境和外部网络存在网络隔离,请自行配置Docker网络代理。

操作步骤

  1. 登录服务器。
  2. 上传Dockerfile文件至服务器,解决方案提供了CPU版本和GPU版本的Dockerfile文件,请用户根据实际情况选择使用。

    以“/home/$USER”为例,将Dockerfile文件上传至服务器/home/$USER路径下。

  3. 在Dockerfile文件同级目录下创建Resources目录用于存放构建镜像所需软件包和相关文件。

    mkdir -p /home/$USER/Resources
    

    将表1所示软件包及相关文件上传至服务器“/home/$USER/Resources”目录下。

    或将prebuild.sh上传至Resources目录下,通过执行prebuild.sh脚本自动下载镜像构建所需的第三方软件包。

    chmod 755 ./prebuild.sh
    ./prebuild.sh
    

    说明:

    用户需根据选择的Dockerfile,更改prebuild.sh中软件包的下载版本,默认下载GPU版本依赖的第三方软件包。

  4. 检查镜像构建目录层级结构,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_。_
      cat /etc/group |grep docker
      
  5. 进入软件包所在目录,执行以下命令构建镜像,注意不要遗漏命令结尾的“.”。

    其中 image 表示镜像名称,tag 表示标签,用户根据实际情况进行修改。

    cd /home/$USER
    docker build -t image:tag . 
    

    当出现“Successfully built xxx”表示镜像构建成功。

    说明:

    如使用docker build 命令进行镜像构建时,出现下载超时问题或无法下载的问题,请用户核对 Mirror_conf.sh 中的镜像源是否配置正确,或者更换更为合适的镜像源。

  6. 构建完成后,执行以下命令查看镜像信息。

    docker images
    

    显示示例:

编写示例

  1. Dockerfile 编写示例

    用户可直接使用解决方案提供的Dockerfile文件,或根据自身需求对解决方案提供的Dockerfile文件进行二次开发。

    From ubuntu:XX.XX
    
    ARG Resources_PATH=/root/Resources
    ENV Install_PATH=/usr/local
    
    COPY /Resources ${Resources_PATH}
    RUN apt-get update \
    && apt-get install vim
    ......
    RUN mkdir ${Install_PATH}/caffe \
    && cd ${Install_PATH}/caffe
    ......
    WORKDIR /root
    EXPOSE 22
    
  2. 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. 运行容器

    在运行环境中执行如下命令基于新的镜像运行一个容器,相关参数说明如表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 运行容器命令参数说明

    参数

    说明

    -itd

    -i:以交互模式运行容器

    -t:为容器重新分配一个伪输入终端

    -d: 后台运行容器

    -v /tmp/.X11-unix:/tmp/.X11-unix

    设置容器共享主机unix套接字

    -v ${host_mount_dir}:${host_mount_dir}

    挂载文件夹,用于宿主机与容器文件资源共享。${host_mount_dir}路径要求为服务器侧已存在路径,且前后${host_mount_dir}填写的路径应该保持一致。如需在容器中使用MindCmd上板功能,该参数不可省略。

    -p ${port}:22

    将容器ssh端口22映射到宿主机的某个端口,宿主机上的端口不能被占用,可执行“netstat -anp |grep 端口号 ”,如果没有回显,表示端口未被占用。

    --name ${container_name}

    为容器指定一个名称

    ${image_name}

    运行容器使用的镜像。格式为“镜像名称:镜像标签”,请根据实际情况修改

    --gpus all

    gpu编译模式下,初始化cuda容器

    --shm-size=1g

    推荐设置共享内存大小为1g,不加该参数时docker默认shm大小为64MB,用户可根据实际需要调整设置该参数。

  2. 容器使用示例:

  3. 启动容器并进入容器(如容器关闭),其中${container_name}为启动容器时配置的容器名称。

     docker start ${container_name}
     docker exec -it ${container_name} /bin/bash
    

    执行该命令后,如果命令行显示带有“<SVP_Docker>”标识,则表示已经运行并进入该容器。

    <SVP_Docker> [root@g5500-cuda]:~$
    
  4. 初次使用时,进入容器后需执行passwd指令设置root用户密码,并启动ssh服务。

     passwd root
     service ssh start
    
  5. 新建终端,登录宿主机服务器,以ssh方式连接容器,并输入步骤2设置的密码,其中${port}为启动时容器时分配的映射端口。

     ssh -X root@${宿主机IP} -p ${port}
    

注意:

  • 镜像构建过程中,软件的安装路径为:/usr/local,用户进入容器后如需确认软件安装位置,可定位到该路径下。
  • 用户如果需要引入自定义算子层,请自行通过custom.proto重新编译Caffe。
  • 如果在Docker容器的用户路径下手动安装CANN软件包出现如图1报错。 请为用户文件夹配置权限为755,示例:chmod -R 755 /root。
  • 步骤3的操作,用户也可使用Xserver新建ssh连接,IP填写Docker宿主机的IP,端口选择运行容器时配置的端口号。(可选)

图 1 报错图示

OpenSSH服务搭建

服务器侧交叉编译OpenSSH服务

依赖软件包准备

请按照表1所示,获取OpenSSH服务搭建所需软件包。

表 1 软件包说明

软件包/文件

说明

获取方法

zlib-1.2.11.tar.gz

zlib安装包

用户自行下载,参考链接如下:

https://zlib.net/fossils/zlib-1.2.11.tar.gz

openssl-1.1.1g.tar.gz

openssl安装包

用户自行下载,参考链接如下:

https://www.openssl.org/source/openssl-1.1.1g.tar.gz

openssh-8.8p1.tar.gz

openssh安装包

用户自行下载,参考链接如下:

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

      tar xvf gcc-*-aarch64-v01c01-linux-musl.tgz
      cd gcc-*-aarch64-v01c01-linux-musl
      
    • 执行安装脚本(可以参考readme指定其他安装路径):

      sudo ./install_gcc_toolchain.sh
      
    • 查看安装情况:

      此时交叉编译器已被安装至/opt/linux/x86-arm路径下,所需的环境变量也已自动更新到/etc/profile中。执行以下命令应该能正常显示gcc版本,如图1所示。

      source /etc/profile && aarch64-v01c01-linux-musl-gcc -v
      

      图 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

      tar xvf gcc-*-arm-v01c02-linux-musleabi.tgz
      cd gcc-*-arm-v01c02-linux-musleabi
      
    • 执行安装脚本(可以参考readme指定其他安装路径):

      sudo ./install_gcc_toolchain.sh
      
    • 查看安装情况:

      此时交叉编译器已被安装至/opt/linux/x86-arm路径下,所需的环境变量也已自动更新到/etc/profile中。执行以下命令应该能正常显示gcc版本,如图2所示。

      source /etc/profile && arm-v01c02-linux-musleabi-gcc -v
      

      图 2 编译链安装成功

编译和安装OpenSSH

将OpenSSH服务搭建所需软件包下载到用户路径 "/home/$USER/ssh_install" 下进行编译和安装

zlib
  1. 解压zlib的源码压缩包,并进入解压后的目录

    cd /home/$USER/ssh_install
    tar -zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11/
    
  2. 配置交叉编译器及安装路径:

    Hi3519DV500:

    CC=aarch64-v01c01-linux-musl-gcc ./configure --prefix=/home/$USER/ssh_install/zlib
    

    Hi3516CV610:

    CC=arm-v01c02-linux-musleabi-gcc TOOL_PREFIX=arm-v01c02-linux-musleabi- ./configure --prefix=/home/$USER/ssh_install/zlib
    
  3. 编译及安装:

    make -j
    make install
    
OpenSSL
  1. 解压OpenSSL的源码压缩包,并进入解压后的目录。

    cd /home/$USER/ssh_install
    tar xf openssl-1.1.1g.tar.gz
    cd openssl-1.1.1g
    
  2. 配置编译选项、交叉编译器及安装路径:

    Hi3519DV500:

    ./config no-asm shared --cross-compile-prefix=aarch64-v01c01-linux-musl- --prefix=/home/$USER/ssh_install/openssl
    

    Hi3516CV610:

    ./Configure linux-armv4 -march=armv7 no-asm shared --cross-compile-prefix=arm-v01c02-linux-musleabi- --prefix=/home/$USER/ssh_install/openssl
    
  3. 替换Makefile中的编译选项

    Hi3519DV500: 将生成的Makefile中的所有"-m64"修改为"-mabi=lp64"。如图1和图2所示。

    图 1 修改前

    图 2 修改后

    Hi3516CV610: 将生成的Makefile中的所有"-m64"去除。

  4. 编译及安装:

    注:make -j并行编译可能会失败,若失败可直接make

    make -j 
    make install
    
OpenSSH
  1. 解压OpenSSH的源码压缩包,并进入:

    cd /home/$USER/ssh_install
    tar xf openssh-8.8p1.tar.gz
    cd openssh-8.8p1
    
  2. 配置编译选项、交叉编译器及安装路径:

    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-strip
    

    Hi3516CV610:

    ./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=
    
  3. 编译及安装:

    make -j
    make install
    

    注:install时若提示无权限创建/var/empty(privilege separation directory),则可以使用sudo创建后再使用chown改变owner,如果没有sudo权限,则修改Makefile文件中/var/empty路径为当前用户目录下的路径:如:/home/$USER/ssh_install/empty,只要在板端也有相同路径即可,如图1所示。

    图 1 OpenSSH安装路径配置

    再次执行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
    
  4. 查看安装结果,包含sshd, scp, ssh-keygen等。如图2所示。

    cd /home/$USER/ssh_install 
    tree openssh/
    

    图 2 OpenSSH安装完成

板端部署OpenSSH服务

挂载命令

  • 由于板端硬件资源有限,因此需要使用mount命令将NFS服务器上的目录挂载到板端环境的指定目录。

    • 以root用户登录Linux服务器(Ubuntu操作系统),安装NFS服务并配置共享目录。

      确保网络环境可用,可参考如下命令安装NFS服务,如果安装过程中提示已安装NFS服务,则无需重复安装:

      apt-get install nfs-kernel-server
      

      在“/etc/exports”文件中配置共享目录,参考如下配置段添加在文件的末尾,配置的“服务器绝对路径”即为共享目录,请根据实际情况替换,如过此目录不存在,请提前创建。配置完成后,执行/etc/init.d/nfs-kernel-server restart命令重启NFS服务使配置生效。

      服务器绝对路径 *(rw,sync,no_root_squash,no_subtree_check)
      
    • 登录板端,参考如下命令示例将板端路径挂载到服务器共享目录,其中,“服务器绝对路径”为服务器侧共享目录,_“path”_为板端环境的目录,需根据实际情况修改。

      mount -t nfs -o nolock,tcp NFS服务器IP地址:服务器绝对路径 path
      

首次部署操作

  1. 挂载

    mount -t nfs -o rsize=32768,wsize=32768 -o nolock -o tcp xx.xx.xx.xx:/home/$USER/ /tmp
    
  2. 切换至挂载目录,部署zlib和OpenSSL相关产物

    cd /tmp/ssh_install
    cp zlib/lib/libz.so.1 /usr/lib/
    cp openssl/lib/libcrypto.so.1.1 /usr/lib
    
  3. 切换至挂载目录,部署OpenSSH所需的可执行文件

    cd /tmp/ssh_install
    cp openssh/sbin/sshd /usr/sbin/
    cp openssh/bin/scp openssh/bin/ssh-keygen /usr/bin
    
  4. 使用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]-----+
    
  5. 配置/etc/passwd

    vi /etc/passwd
    # 添加如下配置
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    
  6. 配置/etc/group

    vi /etc/group
    # 添加如下配置
    sshd:x:74:
    
  7. 创建privilege separation directory

    mkdir -p /var/empty
    
  8. 拷贝config至/etc并修改:

    cp openssh/etc/sshd_config /etc/
    vi /etc/sshd_config
    # 1.修改sshd_config文件,禁止使用root账号登录
    # PermitRootLogin prohibit-password改为
    PermitRootLogin no
    # 2.修改在subsystem条目配置:
    Subsystem       sftp    internal-sftp
    
  9. 修改ssh密码不为空

    #**注意**,[ssh默认不允许通过空密码登录],如果登录账号原密码为空,需要通过passwd命令修改为非空密码。
    
  10. 启动sshd,需指定config和key的路径

    /usr/sbin/sshd -f /etc/sshd_config -h /etc/ssh/ssh_host_rsa_key
    

快速部署操作

完成“服务器侧交叉编译OpenSSH服务”和“首次部署操作”操作后,下次启动sshd,可参考如下快速启动:

  1. 挂载

    mount -t nfs -o rsize=32768,wsize=32768 -o nolock -o tcp xx.xx.xx.xx:/home/$USER/ /tmp
    
  2. 启动sshd,需指定config和key的路径

    /usr/sbin/sshd -f /etc/sshd_config -h /etc/ssh/ssh_host_rsa_key
    
  3. 参考“配置环境变量”

配置环境变量

进行上板运行时依赖acllib的动态库,故以挂载路径/tmp/acllib/stub为例,假设acllib在此路径下,则按照如下方法配置LD_LIBRARY_PATH环境变量。

方法一:直接配置,但是退出当前终端后就失效

export LD_LIBRARY_PATH=/tmp/acllib/stub:$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说明

序号

URL地址

说明

1

http://old-releases.ubuntu.com/releases/18.04.1/

Ubuntu 18.04 下载链接

2

https://releases.ubuntu.com/22.04/

Ubuntu 22.04 下载链接

3

https://pypi.org/project/psutil/5.7.0/#files

psutil 软件包下载

4

https://pypi.org/project/numpy/1.13.3/#files

numpy 软件包下载

5

https://pypi.org/project/scipy/1.4.1/#files

scipy 软件包下载

6

https://pypi.org/project/decorator/4.4.0/#files

decorator 软件包下载

7

https://pypi.org/project/sympy/1.5.1/#files

sympy 软件包下载

8

https://pypi.org/project/cffi/1.12.3/#files

cffi 软件包下载

9

https://pypi.org/project/PyYAML/#files

pyyaml 软件包下载

10

https://pypi.org/project/pathlib2/#files

pathlib2 软件包下载

11

https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.tar.gz

OpenSSH下载地址

12

https://zlib.net/fossils/zlib-1.2.11.tar.gz

zlib 1.2.11软件包下载

13

https://www.openssl.org/source/openssl-1.1.1g.tar.gz

OpenSSL 1.1.1g软件包下载

14

http://github.com/protocolbuffers/protobuf/releases/download/v3.13.0/protobuf-all-3.13.0.tar.gz

Protobuf软件包

15

http://github.com/opencv/opencv/archive/refs/tags/3.4.8.tar.gz

OpenCV软件包

16

http://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

Python软件包

17

http://github.com/BVLC/caffe/archive/refs/heads/master.zip

Caffe软件包

18

https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run

Cuda软件包

19

https://download.pytorch.org/whl/cu102/torch-1.10.2%2Bcu102-cp37-cp37m-linux_x86_64.whl

Pytorch软件包

20

https://download.pytorch.org/whl/cu102/torchvision-0.11.3%2Bcu102-cp37-cp37m-linux_x86_64.whl

21

https://download.pytorch.org/whl/cu102/torchaudio-0.10.2%2Bcu102-cp37-cp37m-linux_x86_64.whl

22

https://download.pytorch.org/whl/cpu/torch-1.10.2%2Bcpu-cp37-cp37m-linux_x86_64.whl

23

https://download.pytorch.org/whl/cpu/torchvision-0.11.3%2Bcpu-cp37-cp37m-linux_x86_64.whl

24

https://download.pytorch.org/whl/cpu/torchaudio-0.10.2%2Bcpu-cp37-cp37m-linux_x86_64.whl

Docker镜像软件清单

Hi3519DV500/Hi3516DV500:

序号

软件版本

1

Ubuntu 18.04

2

protobuf 3.13.0(编译Caffe环境使用版本)

3

opencv 3.4.8

4

python 3.7.5

5

cuda 10.2.89_440.33.01(GPU版本特有)

6

torch 1.10.2

7

torchvision 0.11.3

8

torchaudio 0.10.2

9

gcc

10

g++

11

cmake

12

make

13

unzip

14

build-essential

15

zlib1g

16

zlib1g-dev

17

liblzma-dev

18

libbz2-dev

19

libsqlite3-dev

20

libssl-dev

21

libxslt1-dev

22

libffi-dev

23

openssl

24

nfs-kernel-server

25

openjdk-11-jre-headless

26

wget

27

vim

28

sshpass

29

htop

30

curl

31

sudo

32

openssh-server

33

libhdf5-serial-dev

34

x11-apps

35

passwd

36

2to3

37

python3-tk

38

graphviz

39

libleveldb-dev

40

libsnappy-dev

41

libboost-all-dev

42

libopenblas-dev

43

liblapack-dev

44

libatlas-base-dev

45

libgflags-dev

46

libgoogle-glog-dev

47

liblmdb-dev

48

libncurses5-dev

49

libncursesw5-dev

50

gnome-keyring

51

pciutils

52

net-tools

53

xterm

54

gdb

55

firefox

56

xdg-utils

57

fonts-droid-fallback

58

fonts-wqy-zenhei

59

fonts-wqy-microhei

60

fonts-arphic-ukai

61

libgbm-dev

62

protobuf 3.13.0 (pip库版本)

63

psutil 5.9.0

64

scipy 1.7.3

65

decorator 4.4.0

66

sympy 1.5.1

67

cffi 1.15.1

68

pyyaml 5.4

69

pathlib2

70

wheel 0.38.4

71

matplotlib 3.2.0

72

numpy 1.21.6

73

gnureadline

74

attrs

75

coverage

76

pylint

77

xlrd

78

absl-py

79

pandas 1.3.5

80

pytest

81

pillow

82

onnx 1.7.0

83

onnxruntime 1.8.0

84

interval 1.0.0

85

scikit-build

86

scikit-learn 1.0.2

87

pydot

88

nuitka

89

opencv-python 4.5.5.62

90

scikit-image 0.16.2

91

lmdb 0.98

92

Cython 0.29.15

93

easydict 1.9

94

pycocotools 2.0.2

95

wget 3.2

96

skl2onnx 1.13.0

97

packaging 18.0

98

paramiko 2.10.5

99

tabulate 0.8.6

100

argcomplete 3.1.1

101

gcc-{version}-aarch64-v01c01-linux-gnu.tgz (根据用户实际版本安装)

102

gcc-{version}-aarch64-v01c01-linux-musl.tgz (根据用户实际版本安装)

103

hotwheels-amct-caffe {version}-cu102 (根据用户传入的SVP包进行安装)

104

hotwheels-amct-pytorch {version}-cu102 (根据用户传入的SVP包进行安装)

105

Ascend-cann-toolkit_{version}_linux.x86_64.run (根据用户传入的SVP包进行安装)

106

mindcmd (根据用户传入的SVP包进行安装)

Hi3516CV610/Hi3516CV608:

序号

软件版本

1

Ubuntu 22.04

2

protobuf 3.13.0(编译Caffe环境使用版本)

3

opencv 3.4.8

4

python 3.10.12

5

cuda 12.2.0_535.54.03(GPU版本特有)

6

torch 2.1.0

7

torchvision 0.16.0

8

gcc

9

g++

10

cmake

11

make

12

unzip

13

build-essential

14

zlib1g

15

zlib1g-dev

16

liblzma-dev

17

libbz2-dev

18

libsqlite3-dev

19

libssl-dev

20

libxslt1-dev

21

libffi-dev

22

openssl

23

nfs-kernel-server

24

openjdk-11-jre-headless

25

wget

26

vim

27

sshpass

28

htop

29

curl

30

sudo

31

openssh-server

32

libhdf5-serial-dev

33

x11-apps

34

passwd

35

2to3

36

python3-tk

37

graphviz

38

libleveldb-dev

39

libsnappy-dev

40

libboost-all-dev

41

libopenblas-dev

42

liblapack-dev

43

libatlas-base-dev

44

libgflags-dev

45

libgoogle-glog-dev

46

liblmdb-dev

47

libncurses5-dev

48

libncursesw5-dev

49

gnome-keyring

50

pciutils

51

net-tools

52

xterm

53

gdb

54

firefox

55

xdg-utils

56

fonts-droid-fallback

57

fonts-wqy-zenhei

58

fonts-wqy-microhei

59

fonts-arphic-ukai

60

libgbm-dev

61

protobuf 3.19.0(pip库版本)

62

psutil 5.9.0

63

scipy 1.11.4

64

decorator 4.4.0

65

sympy 1.5.1

66

cffi 1.15.1

67

pyyaml 5.4.1

68

pathlib2

69

wheel 0.41.3

70

matplotlib 3.8.1

71

numpy 1.26.2

72

gnureadline 8.1.2

73

attrs

74

coverage

75

pylint

76

xlrd

77

absl-py

78

pandas 1.3.5

79

pytest

80

pillow 9.5.0

81

onnx 1.12.0

82

onnxruntime 1.12.0

83

interval 1.0.0

84

scikit-build

85

scikit-learn 1.0.2

86

pydot

87

nuitka

88

opencv-python 4.5.5.62

89

scikit-image

90

lmdb 0.98

91

Cython 0.29.15

92

easydict 1.9

93

pycocotools 2.0.7

94

wget 3.2

95

skl2onnx 1.13.0

96

packaging 23.2

97

paramiko 2.10.5

98

tabulate 0.9.0

99

argcomplete 3.1.1

100

gcc-{version}-arm-v01c02-linux-musleabi.tgz (根据用户实际版本安装)

101

hotwheels-amct-caffe (根据用户传入的SVP包进行安装)

102

hotwheels-amct-pytorch (根据用户传入的SVP包进行安装)

103

Ascend-cann-toolkit_{version}_linux.x86_64.run (根据用户传入的SVP包进行安装)

104

mindcmd (根据用户传入的SVP包进行安装)