3.4. 安装SDK

注解

工作模式: SOPHON BM168X系列产品涵盖了从末端到边缘到中枢的多种产品形态,可以支持两种不同的工作模式,分别对应不同的产品形态,具体信息如下:

BM168X

SoC模式

PCIe模式

独立运行

是,BM168X即为独立主机,算法运行在BM168X上

否,算法部署在X86或ARM主机,推理运行在PCIe卡

对外IO方式

千兆以太网

PCIe接口

对应产品

微服务器/模组

PCIe加速卡

注解

开发环境与运行环境:

开发环境是指用于模型转换或验证以及程序编译等开发过程的环境;运行环境是指在具备SOPHON设备的平台上实际使用设备进行算法应用部署的运行环境。

开发环境与运行环境可能是统一的(如插有SC5加速卡的x86主机,既是开发环境又是运行环境),也可能是分离的(如使用x86主机作为开发环境转换模型和编译程序,使用SE5盒子部署运行最终的算法应用)。

但是,无论您使用的产品是SoC模式还是PCIe模式,您均需要一台x86主机作为开发环境,您的运行环境可以是任何我们已经测试支持的系统平台。

  • PCIe模式: 您需要将PCIe加速卡插到x86主机中。模型的编译量化:可按照指引配置docker环境,在docker环境中进行模型的编译量化。模型验证、程序编译、算法的应用部署:按照本章指引依次安装libsophon、sophon-mw。您也可以添加您需要的库包以及其他程序代码,构建您自己的生产环境。

注意

PCIe用户检查PCIe加速卡是否正常被系统识别:

打开终端执行 lspci | grep Sophon 检查卡是否能够被识别。正常情况下应该输出如下信息:

101:00.0 Processing accelerators: SOPHGO Technologies Inc. BM1684X, SOPHON Series Deep Learning Accelerator (rev 01)

若PCIe加速卡没有被系统正常识别,则需要首先排除故障,通常引起PCIe加速卡未被正常识别的可能原因有:

  • PCIe加速卡在插糟中没有插紧;

  • 检查插卡的槽位是否是标准的X16槽位,X8槽位的功率支持通常最大只有45W,不建议使用;

  • PCIe加速卡从PCIe直接供电,不需要外接电源,若连接了外接电源,可能导致卡不能被正常识别;

  • 搭载三块BM1684/BM1684X以上PCIe加速卡需要足够的散热条件,若风道和风量不能符合PCIe加速卡的被动散热要求,则需要通过BIOS将风扇转速设置到足够大或者加装额外的风扇进行散热。( 建议的风扇购买链接1建议的风扇购买链接2建议的风扇购买链接3

  • SoC模式: 模型的编译量化:您需要在一台x86主机上按照指引配置docker环境,在docker环境内进行模型的编译量化。程序的交叉编译:x86主机系统建议使用Ubuntu16.04~20.04。按照本章指引在x86主机上安装libsophon、sophon-mw,进行程序的交叉编译,待程序编译好后,您需要手动将编译好的程序拷贝到目标SoC中执行。

典型开发环境:

  • Linux开发环境

    1. 一台安装了Ubuntu16.04/18.04/20.04的x86主机,运行内存建议12GB以上

    2. 安装Docker:参考《 官方教程

    3. 下载SOPHONSDK开发包

注解

注意: 若您使用非x86架构的主机进行开发,模型转换还需要使用一台x86主机完成,开发及部署可以直接在裸机上进行。若有问题,请联系我们获取技术支持。本教程后续的操作若无特殊说明,均是在x86主机上的ubuntu开发环境中。

3.4.1. 环境配置-Linux

我们提供了tpu-mlir和tpu-nntc环境供用户在x86主机上进行模型的编译量化,提供了libsophon环境供用户进行应用的开发部署。PCIe用户可以基于tpu-mlir或tpu-nntc和libsophon完成模型的编译量化与应用的开发部署; SoC用户可以在x86主机上基于tpu-mlir或tpu-nntc和libsophon完成模型的编译量化与程序的交叉编译,部署时将编译好的程序拷贝至SoC平台(SE微服务器/SM模组)中执行,相关运行环境的配置请参考环境配置章节。您也可以根据自己的需求在我们提供的开发环境基础上定制自己的开发环境。

注意

请注意后续步骤适用SDK为Release_<date>-public.zip,其中<date>为SDK Release 日期,会随着SDK的升级而不断变化。

其他平台的用户也需要使用x86主机作为开发环境完成模型转换,而后再交叉编译生成相应平台的程序拷贝到目标平台运行。

3.4.1.1. 解压SDK压缩包

1sudo apt-get install p7zip
2sudo apt-get install p7zip-full
37z x Release_<date>-public.zip
4cd Release_<date>-public

注解

提示:<date>指日期

3.4.1.2. tpu-mlir 环境初始化

  1. Docker 安装

若已安装docker,请跳过本节。 执行以下脚本安装 docker 并将当前用户加入 docker 组,获得 docker 执行权限。

 1# 安装docker
 2sudo apt-get install docker.io
 3sudo systemctl start docker
 4sudo systemctl enable docker
 5# docker命令免root权限执行
 6# 创建docker用户组,若已有docker组会报错,可忽略
 7sudo groupadd docker
 8# 将当前用户加入docker组
 9sudo usermod -aG docker $USER
10# 重启docker服务
11sudo service docker restart
12# 切换当前会话到新group或重新登录重启会话
13newgrp docker​
  1. 将压缩包解压到tpu-mlir

1cd tpu-mlir_<date>_<hash>
2mkdir tpu-mlir
3tar zxvf tpu-mlir_v<x.y.z>-<hash>-<date>.tar.gz --strip-components=1 -C tpu-mlir

注解

提示:<date>指日期,<x.y.z>指版本,<hash>为哈希值,若无特殊说明,后续内容均遵守此约定。

  1. 创建docker容器并进入docker

1cd tpu-mlir
2#如果当前系统没有对应的镜像,会自动从docker hub上下载;
3#此处将tpu-mlir的当前目录映射到docker内的/workspace目录
4#myname只是举个名字的例子, 请指定成自己想要的容器的名字
5docker run --privileged --name myname -v $PWD:/workspace -it sophgo/tpuc_dev:v2.2
  1. 初始化软件环境

1cd /workspace/tpu-mlir
2source ./envsetup.sh

注意

请注意,如果docker stop后重新进入,则需要重新source环境变量。

3.4.1.3. tpu-nntc 环境初始化

  1. Docker 安装

若已安装docker,请跳过本节。

 1# 安装docker
 2sudo apt-get install docker.io
 3# docker命令免root权限执行
 4# 创建docker用户组,若已有docker组会报错,可忽略
 5sudo groupadd docker
 6# 将当前用户加入docker组
 7sudo gpasswd -a ${USER} docker
 8# 重启docker服务
 9sudo service docker restart
10# 切换当前会话到新group或重新登录重启会话
11newgrp docker​

注解

提示:需要logout系统然后重新登录,再使用docker就不需要sudo权限了。

  1. 将压缩包解压到tpu-nntc

1cd tpu-nntc_<date>_<hash>
2mkdir tpu-nntc
3tar zxvf tpu-nntc_v<x.y.z>-<hash>-<date>.tar.gz --strip-components=1 -C tpu-nntc

注解

提示:<date>指日期,<x.y.z>指版本,<hash>为哈希值,若无特殊说明,后续内容均遵守此约定。

  1. 创建docker容器并进入docker

1cd tpu-nntc
2#如果当前系统没有对应的镜像,会自动从docker hub上下载;此处将tpu-nntc的上一级目录映射到docker内的/workspace目录;这里用了8001到8001端口的映射(使用ufw可视化工具会用到端口号)。
3#如果端口已被占用,请根据实际情况更换为其他未占用的端口。
4docker run -v $PWD/..:/workspace -p 8001:8001 -it sophgo/tpuc_dev:v2.1
  1. 初始化软件环境

1cd /workspace/tpu-nntc
2source scripts/envsetup.sh

注意

请注意,如果docker stop后重新进入,则需要重新source环境变量。

3.4.1.4. libsophon 环境搭建

注意

libsophon 在不同的Linux发行版上提供不同类型的安装方式,请根据您的系统选择对应的方式,不要在一台机器上混用多种安装方式。

  1. 如果您安装的是V2.7.0,V3.0.0下BM1684 SDK的驱动,请先卸载旧的BM1684 SDK的驱动,请参考如下步骤;若您安装的是V22.xx.xx或者V23.xx.xx的SDK,请参考《 libsophon使用手册 》卸载旧驱动。

    1# 进入SDK安装目录下的scripts文件夹,执行
    2sudo ./remove_driver_pcie.sh
    
  2. 如果您使用的是Debian/Ubuntu系统,安装包由三个文件构成:sophon-driver_<x.y.z>_$arch.deb、sophon-libsophon_<x.y.z>_$arch.deb、sophon-libsophon-dev_<x.y.z>_$arch.deb

注解

其中,<x.y.z> 指版本号,$arch 指当前机器的硬件架构,使用如下命令可获取当前服务器的arch。通常x86_64机器对应的硬件架构是amd64,arm64机器对应的硬件架构是arm64。请选择您对应的安装文件进行安装。

1uname -m

可参考如下步骤进行安装:

1cd libsophon_<date>_<hash>
2# 安装依赖库,只需要执行一次
3sudo apt install dkms libncurses5
4sudo dpkg -i sophon-*.deb
5# 在终端执行如下命令,或者log out再log in当前用户后即可使用bm-smi等命令
6source /etc/profile

注意

检查驱动是否安装成功:

执行 ls /dev/bm* 看看是否有 /dev/bm-sohponX (X表示0-N),如果有表示安装成功。 正常情况下输出如下信息:

/dev/bmdev-ctl /dev/bm-sophon0

  1. 如果您使用其它Linux系统,安装包只由一个文件构成:libsophon_<x.y.z>_$arch.tar.gz,可参考《 libsophon使用手册 》进行安装。

其他疑问请参考《 libsophon使用手册

3.4.1.5. sophon-mw 环境搭建

在安装sophon-mw时,请确保已经安装libsophon。

  1. 如果您使用的是Debian/Ubuntu系统,安装包由四个文件构成,分别为:sophon-mw-sophon-ffmpeg_<x.y.z>_$arch.deb、sophon-mw-sophon-ffmpeg-dev_<x.y.z>_$arch.deb、sophon-mw-sophon-opencv_<x.y.z>_$arch.deb、sophon-mw-sophon-opencv-dev_<x.y.z>_$arch.deb,请选择您对应的安装文件参考如下步骤进行安装:

    1cd sophon-mw_<date>_<hash>
    2# 必须先安装sophon-mw-sophon-ffmpeg,再安装sophon-mw-sophon-opencv
    3sudo dpkg -i sophon-mw-sophon-ffmpeg_<x.y.z>_*.deb sophon-mw-sophon-ffmpeg-dev_<x.y.z>_*.deb
    4sudo dpkg -i sophon-mw-sophon-opencv_<x.y.z>_*.deb sophon-mw-sophon-opencv-dev_<x.y.z>_*.deb
    5# 在终端执行如下命令,或者log out再log in当前用户后即可使用安装的工具
    6source /etc/profile
    
  2. 如果您使用的是其他Linux系统,安装包为:sophon-mw_<x.y.z>_$arch.tar.gz,可参考《 sophon-mw使用手册 》进行安装。

其他疑问请参考《 sophon-mw使用手册

3.4.1.6. 交叉编译环境搭建

如果您希望使用SOPHONSDK搭建交叉编译环境,您需要用到gcc-aarch64-linux-gnu工具链,再将程序所依赖的头文件和库文件打包到soc-sdk目录中。

  1. 首先安装工具链:

    1sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
    
  2. 解压sophon-img包里的libsophon_soc_<x.y.z>_aarch64.tar.gz,将lib和include的所有内容拷贝到soc-sdk文件夹。

    1cd sophon-img_<date>_<hash>
    2# 创建依赖文件的根目录
    3mkdir -p soc-sdk
    4# 解压sophon-img release包里的libsophon_soc_${x.y.z}_aarch64.tar.gz,其中x.y.z为版本号
    5tar -zxf libsophon_soc_<x.y.z>_aarch64.tar.gz
    6# 将相关的库目录和头文件目录拷贝到依赖文件根目录下
    7cp -rf libsophon_soc_<x.y.z>_aarch64/opt/sophon/libsophon-<x.y.z>/lib ${soc-sdk}
    8cp -rf libsophon_soc_<x.y.z>_aarch64/opt/sophon/libsophon-<x.y.z>/include ${soc-sdk}
    
  3. 解压sophon-mw包里的sophon-mw-soc_<x.y.z>_aarch64.tar.gz,将sophon-mw下lib和include的所有内容拷贝到soc-sdk文件夹。

    1cd sophon-mw_<date>_<hash>
    2# 解压sophon-mw包里的sophon-mw-soc_<x.y.z>_aarch64.tar.gz,其中x.y.z为版本号
    3tar -zxf sophon-mw-soc_<x.y.z>_aarch64.tar.gz
    4# 将ffmpeg和opencv的库目录和头文件目录拷贝到依赖文件根目录下
    5cp -rf sophon-mw-soc_<x.y.z>_aarch64/opt/sophon/sophon-ffmpeg_<x.y.z>/lib ${soc-sdk}
    6cp -rf sophon-mw-soc_<x.y.z>_aarch64/opt/sophon/sophon-ffmpeg_<x.y.z>/include ${soc-sdk}
    7cp -rf sophon-mw-soc_<x.y.z>_aarch64/opt/sophon/sophon-opencv_<x.y.z>/lib ${soc-sdk}
    8cp -rf sophon-mw-soc_<x.y.z>_aarch64/opt/sophon/sophon-opencv_<x.y.z>/include ${soc-sdk}
    
  4. 若您需要使用第三方库,可以使用qemu在x86上构建虚拟环境安装,再将头文件和库文件拷贝到soc-sdk目录中,具体可参考 libsophon使用手册(构建qemu虚拟环境)

3.4.1.7. 验证

您可以执行以下命令,验证开发环境中的交叉编译工具链是否配置成功:

1which aarch64-linux-gnu-g++
2# 终端输出内容
3# /usr/bin/aarch64-linux-gnu-g++

如果终端输出了aarch64编译的路径,则说明交叉编译工具链正确,开发环境是可以正常使用的。

若您需要使用SAIL模块,在非SoC平台下,您需要根据使用的python版本安装相应的pip包,请参考《 sophon-sail使用手册 》中的安装说明。若您在SoC平台中使用SAIL模块,只需要设置环境变量即可。

3.4.2. 环境配置-SoC

3.4.2.1. 开发环境配置

对于SoC模式,模型转换也需要在docker开发容器中完成;C/C++程序建议在x86主机上使用交叉编译工具链编译生成可执行文件后,再拷贝到SoC目标平台运行。docker开发容器的配置参照前述章节相关内容。

若您希望直接在SoC中进行C/C++程序的编译,则需要先安装 sophon-soc-libsophon-dev_<x.y.z>_arm64.deb 工具包,使用以下命令安装:

1sudo dpkg -i sophon-soc-libsophon-dev_<x.y.z>_arm64.deb

再安装sophon-mw-soc-sophon-ffmpeg-dev_<x.y.z>_arm64.deb、sophon-mw-soc-sophon-opencv-dev_<x.y.z>_arm64.deb 工具包,使用以下命令安装:

1sudo dpkg -i sophon-mw-soc-sophon-ffmpeg-dev_<x.y.z>_arm64.deb
2sudo dpkg -i sophon-mw-soc-sophon-opencv-dev_<x.y.z>_arm64.deb

注意

  1. 请先使用 bm_version 命令查看微服务器中的SDK版本与当前SDK版本是否一致,如果不一致,请参考《 SOPHON BSP开发参考手册 》中的 软件安装 章节对微服务器进行软件更新。

  2. SE微服务器目前已经不再预置人脸抓拍应用gate,gate应用也将不再维护。后续我们也会将SE微服务器的默认系统升级为Ubuntu 20.04,并自带一个web界面用于查询和配置基础信息;同时使用qt编写了一个简易的界面以方便用户配置IP,您可以连接HDMI接口到显示器查看,并使用键鼠一体的套装进行相应操作。

  3. SE微服务器自带的操作系统并没有桌面系统,您需要使用ssh登录到微服务器终端内进行操作开发。

3.4.2.2. 运行环境配置

对于SoC平台,内部已经集成了相应的libsophon、sophon-opencv和sophon-ffmpeg运行库包,位于/opt/sophon/下。只需设置环境变量即可。

1# 设置环境变量
2export PYTHONPATH=$PYTHONPATH:/opt/sophon/sophon-opencv_<x.y.z>/opencv-python