- sophon-demo环境安装指南
Sophon Demo所依赖的环境主要包括用于编译和量化模型的TPU-NNTC、TPU-MLIR环境,用于编译C++程序的开发环境以及用于部署程序的运行环境。
使用TPU-MLIR编译BModel,通常需要在x86主机上安装TPU-MLIR环境,x86主机已安装Ubuntu16.04/18.04/20.04系统,并且运行内存在12GB以上。TPU-MLIR环境安装步骤主要包括:
-
安装Docker 若已安装docker,请跳过本节。
# 如果您的docker环境损坏,可以先卸载docker sudo apt-get remove docker docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # 获取密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL \ https://download.docker.com/linux/ubuntu/gpg | \ gpg --dearmor -o docker.gpg && \ sudo mv -f docker.gpg /etc/apt/keyrings/ # 添加 docker 软件包 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # docker命令免root权限执行 # 创建docker用户组,若已有docker组会报错,没关系可忽略 sudo groupadd docker # 将当前用户加入docker组 sudo usermod -aG docker $USER # 切换当前会话到新group或重新登录重启X会话 newgrp docker
提示:需要logout系统然后重新登录,再使用docker就不需要sudo了。
-
创建并进入docker
TPU-MLIR使用的docker是sophgo/tpuc_dev:latest, docker镜像和tpu-mlir有绑定关系,少数情况下有可能更新了tpu-mlir,需要新的镜像。
docker pull sophgo/tpuc_dev:latest # 这里将本级目录映射到docker内的/workspace目录,用户需要根据实际情况将demo的目录映射到docker里面 # myname只是举个名字的例子, 请指定成自己想要的容器的名字 docker run --privileged --name myname -v $PWD:/workspace -it sophgo/tpuc_dev:latest # 此时已经进入docker,并在/workspace目录下
-
安装TPU-MLIR
目前支持两种安装方法:
(1)直接从pypi下载并安装:
pip install tpu_mlir
(2)从TPU-MLIR Github下载最新
tpu_mlir-*-py3-none-any.whl
,然后使用pip安装:pip install tpu_mlir-*-py3-none-any.whl
TPU-MLIR在对不同框架模型处理时所需的依赖不同,对于onnx或torch生成的模型文件, 使用下面命令安装额外的依赖环境:
pip install tpu_mlir[onnx] pip install tpu_mlir[torch]
目前支持五种配置: onnx, torch, tensorflow, caffe, paddle。可使用一条命令安装多个配置,也可直接安装全部依赖环境:
pip install tpu_mlir[onnx,torch,caffe] pip install tpu_mlir[all]
建议TPU-MLIR的镜像仅用于编译和量化模型,程序编译和运行请在开发和运行环境中进行。更多TPU-MLIR的教程请参考算能官网的《TPU-MLIR快速入门手册》和《TPU-MLIR开发参考手册》。
使用TPU-NNTC编译BModel,通常需要在x86主机上安装TPU-NNTC环境,x86主机已安装Ubuntu16.04/18.04/20.04系统,并且运行内存在12GB以上。TPU-NNTC环境安装步骤主要包括:
-
安装Docker
若已安装docker,请跳过本节。
# 安装docker sudo apt-get install docker.io # docker命令免root权限执行 # 创建docker用户组,若已有docker组会报错,没关系可忽略 sudo groupadd docker # 将当前用户加入docker组 sudo usermod -aG docker $USER # 切换当前会话到新group或重新登录重启X会话 newgrp docker
提示:需要logout系统然后重新登录,再使用docker就不需要sudo了。
-
下载并解压TPU-NNTC
从算能官网上下载符合环境依赖的TPU-NNTC压缩包,命名如tpu-nntc_vx.y.z-hash-date.tar.gz,x.y.z表示版本号,并进行解压。
mkdir tpu-nntc # 将压缩包解压到tpu-nntc tar zxvf tpu-nntc_vx.y.z-<hash>-<date>.tar.gz --strip-components=1 -C tpu-nntc
-
创建并进入docker
TPU-NNTC使用的docker是sophgo/tpuc_dev:2.1, docker镜像和tpu-nntc有绑定关系,少数情况下有可能更新了tpu-nntc,需要新的镜像。
cd tpu-nntc # 进入docker,如果当前系统没有对应镜像,会自动从docker hub上下载 # 这里将tpu-nntc的上一级目录映射到docker内的/workspace目录,用户需要根据实际情况将demo的目录映射到docker里面 # 这里用了8001到8001端口映射,之后在使用ufw可视化工具会用到 # 如果端口已经占用,请更换其他未占用端口,后面根据需要更换进行调整 docker run --privileged --name myname -v $PWD/..:/workspace -p 8001:8001 -it sophgo/tpuc_dev:v2.1 # 此时已经进入docker,并在/workspace目录下 # 下面初始化软件环境 cd /workspace/tpu-nntc source scripts/envsetup.sh
此镜像仅用于编译和量化模型,程序编译和运行请在开发和运行环境中进行。更多TPU-NNTC的教程请参考算能官网的《TPU-NNTC快速入门指南》和《TPU-NNTC开发参考手册》。
如果您在x86平台安装了PCIe加速卡,开发环境与运行环境可以是统一的,您可以直接在宿主机上搭建开发和运行环境。
注意: mlir提供的docker环境用来编译模型的,不建议与运行环境混用,如果您需要在主机上搭建docker测试环境,请参考官网《LIBSOPHON使用手册.pdf》第6章-使用Docker搭建测试环境。
从算能官网上下载符合环境依赖的libsophon安装包,包括:
- sophon-driver_x.y.z_amd64.deb
- sophon-libsophon_x.y.z_amd64.deb
- sophon-libsophon-dev_x.y.z_amd64.deb
其中:x.y.z表示版本号;sophon-driver包含了PCIe加速卡驱动;sophon-libsophon包含了运行时环境(库文件、工具等);sophon-libsophon-dev包含了开发环境(头文件等)。如果只是在部署环境上安装,则不需要安装 sophon-libsophon-dev。
# 安装依赖库,只需要执行一次
sudo apt install dkms libncurses5
# 安装libsophon
sudo dpkg -i sophon-*amd64.deb
# 在终端执行如下命令,或者登出再登入当前用户后即可使用bm-smi等命令:
source /etc/profile
更多libsophon信息请参考《LIBSOPHON使用手册.pdf》。
从算能官网上下载符合环境依赖的sophon-mw安装包,包括:
- sophon-mw-sophon-ffmpeg_x.y.z_amd64.deb
- sophon-mw-sophon-ffmpeg-dev_x.y.z_amd64.deb
- sophon-mw-sophon-opencv_x.y.z_amd64.deb
- sophon-mw-sophon-opencv-dev_x.y.z_amd64.deb
其中:x.y.z表示版本号;sophon-ffmpeg/sophon-opencv包含了ffmpeg/opencv运行时环境(库文件、工具等);sophon-ffmpeg-dev/sophon-opencv-dev包含了开发环境(头文件、pkgconfig、cmake等)。如果只是在部署环境上安装,则不需要安装 sophon-ffmpeg-dev/sophon-opencv-dev。
sophon-mw-sophon-ffmpeg依赖sophon-libsophon包,而sophon-mw-sophon-opencv依赖sophon-mw-sophon-ffmpeg,因此在安装次序上必须 先安装libsophon, 然后sophon-mw-sophon-ffmpeg, 最后安装sophon-mw-sophon-opencv。
如果运行环境中使用的libstdc++库使用GCC5.1之前的旧版本ABI接口(典型的有CENTOS系统),请使用sophon-mw-sophon-opencv-abi0相关安装包。
# 安装sophon-ffmpeg
sudo dpkg -i sophon-mw-sophon-ffmpeg_*amd64.deb sophon-mw-sophon-ffmpeg-dev_*amd64.deb
# 安装sophon-opencv
sudo dpkg -i sophon-mw-sophon-opencv_*amd64.deb sophon-mw-sophon-opencv-dev_*amd64.deb
# 在终端执行如下命令,或者logout再login当前用户后即可使用安装的工具
source /etc/profile
更多sophon-mw信息请参考《MULTIMEDIA使用手册.pdf》、《MULTIMEDIA开发参考手册.pdf》。
如果例程依赖sophon-sail则需要编译和安装sophon-sail,否则可跳过本章节。
需从算能官网上下载符合环境依赖的SDK,里面有sophon-sail的压缩包,命名如sophon-sail_x.y.z.tar.gz,x.y.z表示版本号。 您可以打开sophon-sail压缩包里面提供的用户手册(命名为sophon-sail_zh.pdf),参考编译安装指南章节,选择您需要的模式(C++/Python,PCIE MODE)进行安装。
对于SoC平台,安装好SophonSDK(>=v22.09.02)后内部已经集成了相应的libsophon、sophon-opencv和sophon-ffmpeg运行库包,位于/opt/sophon/
下,可直接用于运行环境。通常在x86主机上交叉编译程序,使之能够在SoC平台运行。SophonSDK固件刷新方法可参考FAQ文档.
需要在x86主机上使用SOPHON SDK搭建交叉编译环境,将程序所依赖的头文件和库文件打包至soc-sdk目录中。
-
安装交叉编译工具链 如果现有的交叉编译工具链的版本高于边缘设备的gcc版本,那么在编译完成之后运行程序时会报类似的错误:
/lib/aarch64-linux-gnu/libc.so.6: version 'GLIBC_2.33' not found
。 这是由于您主机上的交叉编译工具链版本太高导致,可以在linaro官方网站下载不高于边缘设备gcc版本的交叉编译工具链。这里提供一个ubuntu配置的例子:
sudo apt remove cpp-*-aarch64-linux-gnu #卸载现有的交叉编译工具链,如果没有可以不用运行 wget -nd https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz tar xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz echo "export PATH=$PWD/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/:$PATH" >> ~/.bashrc source ~/.bashrc
-
打包libsophon
从算能官网上下载符合环境依赖的sophon-img安装包,其中包括libsophon_soc_x.y.z_aarch64.tar.gz,x.y.z表示版本号,并进行解压。
# 创建依赖文件的根目录 mkdir -p soc-sdk # 解压libsophon_soc_x.y.z_aarch64.tar.gz tar -zxf libsophon_soc_${x.y.z}_aarch64.tar.gz # 将相关的库目录和头文件目录拷贝到依赖文件根目录下 cp -rf libsophon_soc_${x.y.z}_aarch64/opt/sophon/libsophon-${x.y.z}/lib ${soc-sdk} cp -rf libsophon_soc_${x.y.z}_aarch64/opt/sophon/libsophon-${x.y.z}/include ${soc-sdk}
-
打包sophon-ffmpeg和sophon-opencv
从算能官网上下载符合环境依赖的sophon-mw安装包,其中包括sophon-mw-soc_x.y.z_aarch64.tar.gz,x.y.z表示版本号,并进行解压,如果您使用BM1688 SOPHONSDK,“sophon-mw”这个名字或许需要替换成“sophon-media”。
# 解压sophon-mw-soc_x.y.z_aarch64.tar.gz tar -zxf sophon-mw-soc_${x.y.z}_aarch64.tar.gz # 将ffmpeg和opencv的库目录和头文件目录拷贝到soc-sdk目录下 cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-ffmpeg_${x.y.z}/lib ${soc-sdk} cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-ffmpeg_${x.y.z}/include ${soc-sdk} cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-opencv_${x.y.z}/lib ${soc-sdk} cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-opencv_${x.y.z}/include ${soc-sdk}
-
如果您使用BM1688的GeminiSDK1.3以上版本,您还需要做这些操作: 从sdk中获取sophon-img/bsp-debs/目录下的sophon-soc-libisp_${x.y.z}_arm64.deb,然后运行如下命令:
dpkg -x sophon-soc-libisp_${x.y.z}_arm64.deb sophon-libisp cp -rf sophon-libisp/opt/sophon/sophon-soc-libisp_${x.y.z}/lib ${soc-sdk}
这里,交叉编译环境已经搭建完成,接下来可以使用打包好的soc-sdk编译需要在SoC平台上运行的程序。更多交叉编译信息请参考《LIBSOPHON使用手册.pdf》。
如果例程依赖sophon-sail则需要编译和安装sophon-sail,否则可跳过本章节。需要在x86主机上交叉编译sophon-sail,并在SoC平台上安装。
需从算能官网上下载符合环境依赖的SOPHONSDK,进入sophon-sail_${date}文件夹,sophon-sail的发布包命名如sophon-sail_x.y.z.tar.gz,x.y.z表示版本号,您可以打开同级目录下的用户手册(命名为sophon-sail_zh.pdf或SOPHON-SAIL_zh.pdf)。 参考编译安装指南章节,选择您需要的模式(C++/Python,SoC MODE)进行安装,注意需要选择包含ffmpeg和opencv的编译方式。
在您按照教程将sophon-sail的库文件拷贝到目标soc上之后,您还需要设置以下环境变量:
echo 'export LD_LIBRARY_PATH=/opt/sophon/sophon-sail/lib/:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
如果您在arm平台安装了PCIe加速卡,开发环境与运行环境可以是统一的,您可以直接在宿主机上搭建开发和运行环境。 这里提供银河麒麟v10机器的环境安装方法,其他类型机器具体请参考官网开发手册。
从算能官网上下载符合环境依赖的libsophon安装包, 安装包由一个文件构成,其中“$arch”为当前机器的硬件架构,使用以下命令可以获取当前服务器的arch:
uname -m
通常x86_64机器对应的硬件架构为x86_64,arm64机器对应的硬件架构为aarch64:
libsophon_x.y.z_$arch.tar.gz,x.y.z表示版本号
可以通过如下步骤安装:
注意:如果有旧版本,先参考下面的卸载方式步骤卸载旧版本。
tar -xzvf libsophon_${x.y.z}_aarch64.tar.gz
sudo cp -r libsophon_${x.y.z}_aarch64/* /
sudo ln -s /opt/sophon/libsophon-${x.y.z} /opt/sophon/libsophon-current
接下来请先按照您所使用Linux发行版的要求搭建驱动编译环境,然后做如下操作:
sudo ln -s /opt/sophon/driver-${x.y.z}/$bin /lib/firmware/bm1684x_firmware.bin
sudo ln -s /opt/sophon/driver-${x.y.z}/$bin /lib/firmware/bm1684_ddr_firmware.bin
sudo ln -s /opt/sophon/driver-${x.y.z}/$bin /lib/firmware/bm1684_tcm_firmware.bin
cd /opt/sophon/driver-${x.y.z}
此处“$bin”是带有版本号的bin文件全名, 对于bm1684x板卡,为a53lite_pkg.bin,对于bm1684板卡,如bm1684_ddr.bin_v3.1.1-63a8614d-220906和bm1684_tcm.bin_v3.1.1-63a8614d-220906。
之后就可以编译驱动了(这里不依赖于dkms):
sudo make SOC_MODE=0 PLATFORM=asic SYNC_API_INT_MODE=1 \
TARGET_PROJECT=sg_pcie_device FW_SIMPLE=0 \
PCIE_MODE_ENABLE_CPU=1
sudo cp ./bmsophon.ko /lib/modules/$(uname -r)/kernel/
sudo depmod
sudo modprobe bmsophon
最后是一些配置工作:
添加库和可执行文件路径:
sudo cp /opt/sophon/libsophon-current/data/libsophon.conf /etc/ld.so.conf.d/
sudo ldconfig
sudo cp /opt/sophon/libsophon-current/data/libsophon-bin-path.sh /etc/profile.d/
在终端执行如下命令,或者登出再登入当前用户后即可使用bm-smi等命令:
source /etc/profile
添加cmake config文件:
sudo mkdir -p /usr/lib/cmake/libsophon
sudo cp /opt/sophon/libsophon-current/data/libsophon-config.cmake /usr/lib/cmake/libsophon/
卸载方式:
sudo rm -f /etc/ld.so.conf.d/libsophon.conf
sudo ldconfig
sudo rm -f /etc/profile.d/libsophon-bin-path.sh
sudo rm -rf /usr/lib/cmake/libsophon
sudo rmmod bmsophon
sudo rm -f /lib/modules/$(uname -r)/kernel/bmsophon.ko
sudo depmod
sudo rm -f /lib/firmware/bm1684x_firmware.bin
sudo rm -f /lib/firmware/bm1684_ddr_firmware.bin
sudo rm -f /lib/firmware/bm1684_tcm_firmware.bin
sudo rm -f /opt/sophon/libsophon-current
sudo rm -rf /opt/sophon/libsophon-0.4.6
sudo rm -rf /opt/sophon/driver-0.4.6
其他平台机器请参考《LIBSOPHON使用手册.pdf》
从算能官网上下载符合环境依赖的sophon-mw安装包, 安装包由一个文件构成:
sophon-mw_x.y.z_aarch64.tar.gz,x.y.z表示版本号
可以通过如下步骤安装:
先按照《LIBSOPHON使用手册》安装好libsophon包,然后,
tar -xzvf sophon-mw_${x.y.z}_aarch64.tar.gz
sudo cp -r sophon-mw_${x.y.z}_aarch64/* /
sudo ln -s /opt/sophon/sophon-ffmpeg_${x.y.z} /opt/sophon/sophon-ffmpeg-latest
sudo ln -s /opt/sophon/sophon-opencv_${x.y.z} /opt/sophon/sophon-opencv-latest
sudo ln -s /opt/sophon/sophon-sample_${x.y.z} /opt/sophon/sophon-sample-latest
sudo sed -i "s/usr\/local/opt\/sophon\/sophon-ffmpeg-latest/g" /opt/sophon/sophon-ffmpeg-latest/lib/pkgconfig/*.pc
sudo sed -i "s/^prefix=.*$/prefix=\/opt\/sophon\/sophon-opencv-latest/g" /opt/sophon/sophon-opencv-latest/lib/pkgconfig/opencv4.pc
最后,安装bz2 libc6 libgcc依赖库(这部分需要根据操作系统不同,选择对应的安装包,这里不统一介绍) 然后是一些配置工作:
添加库和可执行文件路径:
sudo cp /opt/sophon/sophon-ffmpeg-latest/data/01_sophon-ffmpeg.conf /etc/ld.so.conf.d/
sudo cp /opt/sophon/sophon-opencv-latest/data/02_sophon-opencv.conf /etc/ld.so.conf.d/
sudo ldconfig
sudo cp /opt/sophon/sophon-ffmpeg-latest/data/sophon-ffmpeg-autoconf.sh /etc/profile.d/
sudo cp /opt/sophon/sophon-opencv-latest/data/sophon-opencv-autoconf.sh /etc/profile.d/
sudo cp /opt/sophon/sophon-sample-latest/data/sophon-sample-autoconf.sh /etc/profile.d/
source /etc/profile
其他平台机器请参考《MULTIMEDIA使用手册.pdf》、《MULTIMEDIA开发参考手册.pdf》。
如果例程依赖sophon-sail则需要编译和安装sophon-sail,否则可跳过本章节。
需从算能官网上下载符合环境依赖的SDK,里面有sophon-sail的压缩包,命名如sophon-sail_x.y.z.tar.gz,x.y.z表示版本号。 您可以打开sophon-sail压缩包里面提供的用户手册(命名为sophon-sail_zh.pdf),参考编译安装指南章节,选择您需要的模式(C++/Python, ARM PCIE MODE)进行安装。
如果您在riscv平台安装了PCIe加速卡,开发环境与运行环境可以是统一的,您可以直接在宿主机上搭建开发和运行环境。 这里提供SG2042服务器的环境安装方法,其他类型机器具体请参考官网开发手册。
从算能官网上下载符合环境依赖的libsophon安装包, 安装包由以下3个文件构成:
sophon-libsophon-dev-{x.y.z}.riscv64.rpm
sophon-libsophon-{x.y.z}.riscv64.rpm
sophon-driver-{x.y.z}.riscv64.rpm
安装前需要通过后面“卸载方式”中的步骤卸载旧版本libsophon,可以通过如下步骤安装:
安装依赖库,只需要执行一次:
sudo yum install -y epel-release
sudo yum install -y dkms
sudo yum install -y ncurses*
安装libsophon:
sudo rpm -ivh sophon-driver-{x.y.z}.riscv64.rpm
sudo rpm -ivh sophon-libsophon-{x.y.z}.riscv64.rpm
sudo rpm -ivh --force sophon-libsophon-dev-{x.y.z}.riscv64.rpm
在终端执行如下命令,或者登出再登入当前用户后即可使用bm-smi等命令:
source /etc/profile
卸载方式:
sudo rpm -e sophon-driver
sudo rpm -e sophon-libsophon-dev
sudo rpm -e sophon-libsophon
其他平台机器请参考《LIBSOPHON使用手册.pdf》。
sophon-mw安装包由四个文件构成:
sophon-mw-sophon-ffmpeg_{x.y.z}_riscv64.rpm
sophon-mw-sophon-ffmpeg-dev_{x.y.z}_riscv64.rpm
sophon-mw-sophon-opencv_{x.y.z}_riscv64.rpm
sophon-mw-sophon-opencv-dev_{x.y.z}_riscv64.rpm
其中:
-
sophon-ffmpeg/sophon-opencv包含了ffmpeg/opencv运行时环境(库文件、工具等);sophon-ffmpeg-dev/sophon-opencv-dev包含了开发环境(头文件、pkgconfig、cmake等)。如果只是在部署环境上安装,则不需要安装sophon-ffmpeg-dev/sophon-opencv-dev。
-
sophon-mw-sophon-ffmpeg依赖sophon-libsophon包,而sophon-mw-sophon-opencv依赖sophon-mw-sophon-ffmpeg,因此在安装次序上必须先安装libsophon,然后sophon-mw-sophon-ffmpeg,最后安装sophon-mw-sophon-opencv。
安装之前请参考"卸载方式"卸载老版本,安装步骤如下:
sudo rpm -ivh sophon-mw-sophon-ffmpeg_{x.y.z}_riscv64.rpm sophon-mw-sophon-ffmpeg-dev_{x.y.z}_riscv64.rpm
sudo rpm -ivh sophon-mw-sophon-opencv_{x.y.z}_riscv64.rpm sophon-mw-sophon-opencv-dev_{x.y.z}_riscv64.rpm
在终端执行如下命令,或者logout再login当前用户后即可使用安装的工具:
source /etc/profile
卸载方式:
sudo rpm -e sophon-mw-sophon-opencv-dev
sudo rpm -e sophon-mw-sophon-opencv
sudo rpm -e sophon-mw-sophon-ffmpeg-dev
sudo rpm -e sophon-mw-sophon-ffmpeg
其他平台机器请参考《MULTIMEDIA使用手册.pdf》、《MULTIMEDIA开发参考手册.pdf》。
如果例程依赖sophon-sail则需要编译和安装sophon-sail,否则可跳过本章节。
需从算能官网上下载符合环境依赖的SDK,里面有sophon-sail的压缩包,命名如sophon-sail_x.y.z.tar.gz,x.y.z表示版本号。 您可以打开sophon-sail压缩包里面提供的用户手册(命名为sophon-sail_zh.pdf),参考编译安装指南章节,选择您需要的模式(C++/Python,RISCV PCIE MODE)进行安装。