3. 编译安装指南
3.1. 源码目录结构
源码的目录结构如下:
└── SOPHON-SAIL
├── 3rdparty
│ ├── json
│ ├── prebuild
│ ├── pybind11
│ ├── pybind11_new
│ ├── spdlog
│ └── ...
├── cmake # Cmake Files
│ ├── BM168x_ARM_PCIE
│ ├── BM168x_LoongArch64
│ ├── BM168x_RISCV
│ ├── BM168x_SOC
│ └── ...
├── docs # Documentation codes
│ ├── common
│ ├── source_common
│ ├── source_en
│ └── source_zh
├── include # Includes
├── pyis # Stub files
├── python # Wheel codes
├── python_wheels # Python Wheels
│ ├── arm_pcie
│ ├── loongarch
│ ├── soc_BM1684_BM1684X
│ └── soc_BM1688
├── sample # Sample files
├── src # Source codes
└── ...
其中3rdparty主要包含了编译sail需要依赖的第三方的一些头文件; cmake中是编译用到的一些cmake文件; include是sail的一些头文件; pyis文件夹内包含了对Python接口的描述,可用于类型提示和静态检查; python文件夹内包含了以下各平台下面python wheel的打包代码及脚本; python_wheels文件夹内是一些预编译出来的wheel包,arm_pcie、loongarch、soc三个文件夹分别是对应的平台; sample文件夹内是一些示例程序; src文件夹下面是各接口的实现代码。
3.2. SAIL的编译参数
注意: BM1688处理器仅支持soc相关编译选项,BM1684和BM1684X处理器无此限制。
BUILD_TYPE
: 编译的类型,目前有pcie、soc、arm_pcie、loongarch、windows五种模式, pcie是编译在x86主机上可用的SAIL包,soc表示使用交叉编译的方式,在x86主机上编译soc上可用的SAIL包,arm_pcie表示使用交叉编译的方式,在x86主机上编译插有bm168x卡的arm主机上可用的SAIL包,loongarch表示使用交叉编译的方式,在x86主机上编译插有bm168x卡的LoongArch64架构主机上可用的SAIL包,windows表示编译插有bm168x卡的windows主机上可用的SAIL包。默认pcie。ONLY_RUNTIME
: 编译结果是否只包含运行时,而不包含bmcv,sophon-ffmpeg,sophon-opencv,如果此编译选项为ON,则SAIL的编解码及Bmcv接口不可用,只有推理接口可用。默认OFF。INSTALL_PREFIX
: 执行make install时的安装路径,pcie模式下默认“/opt/sophon”,与libsophon的安装路径一致,交叉编译模式下默认“build_soc”。PYTHON_EXECUTABLE
: 编译使用的“python3”的路径名称(路径+名称),默认使用当前系统中默认的python3。CUSTOM_PY_LIBDIR
: 编译使用的python3的动态库的路径(只包含路径),默认使用当前系统中默认python3的动态库目录。LIBSOPHON_BASIC_PATH
: 交叉编译模式下,libsophon的路径,如果配置不正确则会编译失败。pcie模式下面此编译选项不生效。FFMPEG_BASIC_PATH
: 交叉编译模式下,sophon-ffmpeg的路径,如果配置不正确,且ONLY_RUNTIME为“OFF”时会编译失败。pcie模式下面此编译选项不生效。OPENCV_BASIC_PATH
: 交叉编译模式下,sophon-opencv的路径,如果配置不正确,且ONLY_RUNTIME为“OFF”时会编译失败。pcie模式下面此编译选项不生效。TOOLCHAIN_BASIC_PATH
: 交叉编译模式下,交叉编译器的路径,目前只有在BUILD_TYPE为loongarch时生效。BUILD_PYSAIL
: 编译结果是否包含python版SAIL,默认为为“ON”,包含python版本SAIL。TARGET_TYPE
: windows下的编译类型,当前支持 “release” 模式。RUNTIME_LIB
: windows下的库类型,当前支持 “MT” 模式。
3.3. Python SAIL的编译与安装
3.3.1. 编译可被Python3接口调用的Wheel文件
注意: BM1688和CV186AH处理器仅支持SOC MODE章节,BM1684和BM1684X处理器无此限制。对于BM1688或者CV186AH处理器,下列命令中的sophon-mw应改为sophon-media。
3.3.1.1. PCIE MODE
.安装libsophon,sophon-ffmpeg,sophon-opencv的SAIL
libsophon,sophon-ffmpeg,sophon-opencv的安装方式可参考算能官方文档
.编译包含多媒体模块的SAIL
使用默认安装路径,编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
pip3 install ./dist/sophon-3.9.0-py3-none-any.whl --force-reinstall
.编译不包含多媒体模块的SAIL
编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,
通过此方式编译出来的SAIL无法使用其Decoder、Encoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DONLY_RUNTIME=ON .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
pip3 install ./dist/sophon-3.9.0-py3-none-any.whl --force-reinstall
.编译指定Python版本的SAIL
如果生产环境与开发环境上的python3版本不一致,可以通过升级python3版本使其保持一致, 也可以通过python3的官方网站获取获取相应的python3包, 或者根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 也就是使用非系统默认的python3,编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,并打包到‘build_pcie’目录下, 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 -DCUSTOM_PY_LIBDIR=python_3.8.2/lib .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon-3.9.0-py3-none-any.whl’拷贝到目标机器上,然后执行如下安装命令
pip3 install ./dist/sophon-3.9.0-py3-none-any.whl --force-reinstall
3.3.1.2. SOC MODE
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。
从算能官网中获取‘libsophon_soc_0.4.1_aarch64.tar.gz’,并解压
tar -xvf libsophon_soc_0.4.1_aarch64.tar.gz
解压后libsophon的目录为‘libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’
从算能官网中获取‘sophon-mw-soc_0.4.1_aarch64.tar.gz’,并解压
tar -xvf sophon-mw-soc_0.4.1_aarch64.tar.gz
解压后sophon-ffmpeg的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。
解压后sophon-opencv的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。
.安装g++-aarch64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
.编译包含多媒体模块的SAIL
使用指定版本的python3(和目标SOC上的python3保持一致),通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=soc \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \ -DFFMPEG_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \ -DOPENCV_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_arm-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon_arm-3.9.0-py3-none-any.whl’拷贝到目标SOC上,然后执行如下安装命令
pip3 install sophon_arm-3.9.0-py3-none-any.whl --force-reinstall
.编译不包含多媒体模块的SAIL
使用指定版本的python3(和目标SOC上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。
通过此方式编译出来的SAIL无法使用其Decoder、Encoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=soc \ -DONLY_RUNTIME=ON \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_arm-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon_arm-3.9.0-py3-none-any.whl’拷贝到目标SOC上,然后执行如下安装命令
pip3 install sophon_arm-3.9.0-py3-none-any.whl --force-reinstall
3.3.1.3. ARM PCIE MODE
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。
从算能官网中获取‘libsophon_0.4.1_aarch64.tar.gz’,并解压
tar -xvf libsophon_0.4.1_aarch64.tar.gz
解压后libsophon的目录为‘libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’
从算能官网中获取‘sophon-mw_0.4.1_aarch64.tar.gz’,并解压
tar -xvf sophon-mw_0.4.1_aarch64.tar.gz
解压后sophon-ffmpeg的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。
解压后sophon-opencv的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。
.安装g++-aarch64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
.编译包含多媒体模块的SAIL
使用指定版本的python3(和目标ARM主机上的python3保持一致),通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=arm_pcie \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \ -DFFMPEG_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \ -DOPENCV_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_arm_pcie-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon_arm_pcie-3.9.0-py3-none-any.whl’拷贝到目标ARM主机上,然后执行如下安装命令
pip3 install sophon_arm_pcie-3.9.0-py3-none-any.whl --force-reinstall
.编译不包含多媒体模块的SAIL
使用指定版本的python3(和目标ARM主机上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。
通过此方式编译出来的SAIL无法使用其Decoder、Encoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=arm_pcie \ -DONLY_RUNTIME=ON \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_arm_pcie-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon_arm_pcie-3.9.0-py3-none-any.whl’拷贝到目标ARM主机上,然后执行如下安装命令
pip3 install sophon_arm_pcie-3.9.0-py3-none-any.whl --force-reinstall
3.3.1.4. LOONGARCH64 MODE
此小节描述的是,如何在x86主机上,使用交叉编译的方式编译 LoongArch64 版本的SAIL 。 如果需要在 LoongArch64 主机上本地编译,操作过程与x86本地编译类似,请参考 PCIE MODE 章节。
.安装loongarch64-linux-gnu工具链
从LoongArch64官网获取其`交叉编译的工具链 <http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1.tar.xz>`_, 解压到本地,解压后的目录结构如下:
└── loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1
├── bin
├── lib
├── lib64
├── libexec
├── loongarch64-linux-gnu
├── share
├── sysroot
└── versions
.获取交叉编译需要使用的libsophon
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.7。
.编译包含多媒体模块的SAIL
使用指定版本的python3(和目标龙芯主机上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.7.3/bin/python3’,python3的动态库目录‘python_3.7.3/lib’。
通过此方式编译出来的SAIL无法使用其Decoder、Encoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=loongarch \ -DONLY_RUNTIME=ON \ -DTOOLCHAIN_BASIC_PATH=toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_LoongArch64/ToolChain_loongarch64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.7.3/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.7.3/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.7_loongarch64/opt/sophon/libsophon-0.4.7 \ .. make pysail
cmake选项中的路径需要您根据环境的配置进行调整
DLIBSOPHON_BASIC_PATH: SOPHONSDK中libsophon下对应libsophon_<x.y.z>_loongarch64.tar.gz解压后的目录。
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_loongarch64-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
注:此处易出现setuptools版本过高的问题,原则上python3.8最高兼容setuptools版本 < 66.0.0
安装python wheel
将‘sophon_loongarch64-3.9.0-py3-none-any.whl’拷贝到目标主机上,然后执行如下安装命令
pip3 install sophon_loongarch64-3.9.0-py3-none-any.whl --force-reinstall
3.3.1.5. RISCV MODE
此小节描述的是,如何在x86主机上,使用交叉编译的方式编译 riscv64 版本的SAIL。 如果需要在 riscv64 主机上本地编译,操作过程与x86本地编译类似,请参考 PCIE MODE 章节。
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.5.0, sophon-ffmpeg的版本为0.6.0,sophon-opencv的版本为0.6.0。
从算能官网中获取‘libsophon_0.5.0_riscv64.tar.gz’,并解压
tar -xvf libsophon_0.5.0_riscv64.tar.gz
解压后libsophon的目录为‘libsophon_0.5.0_riscv64/opt/sophon/libsophon-0.5.0’
从算能官网中获取‘sophon-mw_0.6.0_riscv_64.tar.gz’,并解压
tar -xvf sophon-mw_0.6.0_riscv_64.tar.gz
解压后sophon-ffmpeg的目录为‘sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-ffmpeg_0.6.0’。
解压后sophon-opencv的目录为‘sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-opencv_0.6.0’。
.安装g++-riscv64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
.编译包含多媒体模块的SAIL
使用指定版本的python3(和目标RISCV服务器上的python3保持一致),通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.11.0/bin/python3’,python3的动态库目录‘python_3.11.0/lib’。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=riscv \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_RISCV/ToolChain_riscv64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.11.0/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.11.0/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_0.5.0_riscv64/opt/sophon/libsophon-0.5.0 \ -DFFMPEG_BASIC_PATH=sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-ffmpeg_0.6.0 \ -DOPENCV_BASIC_PATH=sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-opencv_0.6.0 .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_riscv64-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon_riscv64-3.9.0-py3-none-any.whl’拷贝到目标SOC上,然后执行如下安装命令
pip3 install sophon_riscv64-3.9.0-py3-none-any.whl --force-reinstall
.编译不包含多媒体模块的SAIL
使用指定版本的python3(和目标RISCV服务器上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[获取在X86主机上进行交叉编译的Python3]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.11.0/bin/python3’,python3的动态库目录‘python_3.11.0/lib’。
通过此方式编译出来的SAIL无法使用其Decoder、Encoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=riscv \ -DONLY_RUNTIME=ON \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_RISCV/ToolChain_riscv64_linux.cmake \ -DPYTHON_EXECUTABLE=python_3.11.0/bin/python3 \ -DCUSTOM_PY_LIBDIR=python_3.11.0/lib \ -DLIBSOPHON_BASIC_PATH=libsophon_0.5.0_riscv64/opt/sophon/libsophon-0.5.0 .. make pysail
打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_riscv64-3.9.0-py3-none-any.whl’
cd ../python chmod +x sophon_whl.sh ./sophon_whl.sh
安装python wheel
将‘sophon_riscv64-3.9.0-py3-none-any.whl’拷贝到目标SOC上,然后执行如下安装命令
pip3 install sophon_riscv64-3.9.0-py3-none-any.whl --force-reinstall
3.3.1.6. WINDOWS MODE
.安装libsophon,sophon-ffmpeg,sophon-opencv的SAIL
windows下libsophon,sophon-ffmpeg,sophon-opencv的安装方式可参考算能官方文档
.编译包含多媒体模块的SAIL
编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
执行cmake指令,生成项目文件(.sln)
cmake -DBUILD_PYSAIL=ON -DBUILD_TYPE=windows -DTARGET_TYPE=release -DRUNTIME_LIB=MT -DLIBSOPHON_DIR=C:/sophon_sdk_win_release_MT/libsophon_0.4.9/data -DOPENCV_DIR=C:/sophon_sdk_win_release_MT/sophon-opencv_0.6.0/lib/cmake/opencv4 -DFFMPEG_DIR=C:/sophon_sdk_win_release_MT/sophon-ffmpeg_0.6.0/lib/cmake -DPYTHON_EXECUTABLE=C:\Users\SOPHGO\AppData\Local\Programs\Python\Python38\python.exe ..
在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。
在sophon-sail/python/windows路径下运行指令python setup.py bdist_wheel 打包生成dist文件夹下的wheel包,文件名为‘sophon-3.9.0-py3-none-any.whl’
安装python wheel
pip3 install ./dist/sophon-3.9.0-py3-none-any.whl --force-reinstall
python3.8及以上版本需要显示添加DLL动态库路径才能成功导入sail包,例:
import os os.add_dll_directory(r'C:\sophon_sdk_win_release_MT\libsophon_0.4.9\bin') os.add_dll_directory(r'C:\sophon_sdk_win_release_MT\sophon-ffmpeg_0.6.0\lib') os.add_dll_directory(r'C:\sophon_sdk_win_release_MT\sophon-opencv_0.6.0\lib') import sophon.sail as sail
.编译不包含多媒体模块的SAIL
编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,
通过此方式编译出来的SAIL无法使用其Decoder、Encoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
执行cmake指令,生成项目文件(.sln)
cmake -DONLY_RUNTIME=ON -DBUILD_PYSAIL=ON -DBUILD_TYPE=windows -DTARGET_TYPE=release -DRUNTIME_LIB=MT -DLIBSOPHON_DIR=C:/sophon_sdk_win_release_MT/libsophon_0.4.9/data -DPYTHON_EXECUTABLE=C:\\Users\\SOPHGO\\AppData\\Local\\Programs\\Python\\Python38\\python.exe ..
在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。
在sophon-sail/python/windows路径下运行指令python setup.py bdist_wheel 打包生成dist文件夹下的wheel包,文件名为‘sophon-3.9.0-py3-none-any.whl’
安装python wheel
pip3 install ./dist/sophon-3.9.0-py3-none-any.whl --force-reinstall
python3.8及以上版本需要显示添加DLL动态库路径才能成功导入sail包,例:
import os os.add_dll_directory(r'C:\sophon_sdk_win_release_MT\libsophon_0.4.9\bin') os.add_dll_directory(r'C:\sophon_sdk_win_release_MT\sophon-ffmpeg_0.6.0\lib') os.add_dll_directory(r'C:\sophon_sdk_win_release_MT\sophon-opencv_0.6.0\lib') import sophon.sail as sail
3.3.2. 使用SAIL的Python接口进行开发
注意: BM1688和CV186AH处理器仅支持SOC MODE章节,BM1684和BM1684X处理器无此限制。对于BM1688或者CV186AH处理器,下列命令中的sophon-mw应改为sophon-media。
3.3.2.1. PCIE MODE
在使用PCIE MODE编译好SAIL,执行安装python wheel之后,即可以使用python中调用SAIL,其接口文档可参考API章节。
3.3.2.2. SOC MODE
.使用自己编译的Python wheel包
在使用SOC MODE通过交叉编译的方式编译好SAIL之后,将python wheel拷贝到SOC上面进行安装,即可以使用python中调用SAIL,其接口文档可参考API章节。
.使用预编译的Python wheel包
查看SOC上的libsophon版本和sophon-mw(sophon-ffmpeg,sophon-opencv)的版本
ls /opt/sophon/
查看SOC上的Python3版本
python3 --version
从预编译的Python wheel包中找到对应版本的wheel包,将对应的wheel包拷贝到SOC上面进行安装,即可以使用python中调用SAIL,其接口文档可参考API章节。
3.3.2.3. ARM PCIE MODE
在使用ARM PCIE MODE通过交叉编译的方式编译好SAIL之后,将python wheel拷贝到ARM主机上面进行安装,即可以在python中调用SAIL,其接口文档可参考API章节。
查看ARM主机上的libsophon版本和sophon-mw(sophon-ffmpeg,sophon-opencv)的版本
ls /opt/sophon/
查看ARM主机上的Python3版本
python3 --version
从预编译的Python wheel包中找到对应版本的wheel包,将对应的wheel包拷贝到ARM主机上面进行安装,即可以使用python中调用SAIL,其接口文档可参考API章节。
3.4. C++ SAIL的编译与安装
3.4.1. 编译可被C++接口调用的动态库及头文件
注意: BM1688和CV186AH处理器仅支持SOC MODE章节,BM1684和BM1684X处理器无此限制。对于BM1688或者CV186AH处理器,下列命令中的sophon-mw应改为sophon-media。
3.4.1.1. PCIE MODE
.安装libsophon,sophon-ffmpeg,sophon-opencv的SAIL
libsophon,sophon-ffmpeg,sophon-opencv的安装方式可参考算能官方文档
.编译包含多媒体模块的SAIL
使用默认安装路径,编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_PYSAIL=OFF .. make sail
安装SAIL动态库及头文件,编译结果将安装在‘/opt/sophon’下面
sudo make install
.编译不包含多媒体模块的SAIL
使用默认安装路径,编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,
通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DONLY_RUNTIME=ON -DBUILD_PYSAIL=OFF .. make sail
安装SAIL动态库及头文件,编译结果将安装在‘/opt/sophon’下面
sudo make install
3.4.1.2. SOC MODE
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。
从算能官网中获取‘libsophon_soc_0.4.1_aarch64.tar.gz’,并解压
tar -xvf libsophon_soc_0.4.1_aarch64.tar.gz
解压后libsophon的目录为‘libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’
从算能官网中获取‘sophon-mw-soc_0.4.1_aarch64.tar.gz’,并解压
tar -xvf sophon-mw-soc_0.4.1_aarch64.tar.gz
解压后sophon-ffmpeg的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。
解压后sophon-opencv的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。
.安装g++-aarch64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
.编译包含多媒体模块的SAIL
通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=soc -DBUILD_PYSAIL=OFF \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \ -DFFMPEG_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \ -DOPENCV_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_soc’,编译结果将安装在‘build_soc’下面
make install
将‘build_soc’文件夹下的‘sophon-sail’拷贝至目标SOC的‘/opt/sophon’目录下,即可在soc上面进行调用。
.编译不包含多媒体模块的SAIL
通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=soc \ -DBUILD_PYSAIL=OFF \ -DONLY_RUNTIME=ON \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_soc’,编译结果将安装在‘build_soc’下面
make install
将‘build_soc’文件夹下的‘sophon-sail’拷贝至目标SOC的‘/opt/sophon’目录下,即可在soc上进行调用。
3.4.1.3. ARM PCIE MODE
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。
从算能官网中获取‘libsophon_0.4.1_aarch64.tar.gz’,并解压
tar -xvf libsophon_0.4.1_aarch64.tar.gz
解压后libsophon的目录为‘libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’
从算能官网中获取‘sophon-mw_0.4.1_aarch64.tar.gz’,并解压
tar -xvf sophon-mw_0.4.1_aarch64.tar.gz
解压后sophon-ffmpeg的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。
解压后sophon-opencv的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。
.安装g++-aarch64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
.编译包含多媒体模块的SAIL
通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=arm_pcie \ -DBUILD_PYSAIL=OFF \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \ -DFFMPEG_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \ -DOPENCV_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_arm_pcie’,编译结果将安装在‘build_arm_pcie’下面
make install
将‘build_arm_pcie’文件夹下的‘sophon-sail’拷贝至目标ARM主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。
.编译不包含多媒体模块的SAIL
通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=arm_pcie \ -DONLY_RUNTIME=ON \ -DBUILD_PYSAIL=OFF \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_arm_pcie’,编译结果将安装在‘build_arm_pcie’下面
make install
将‘build_arm_pcie’文件夹下的‘sophon-sail’拷贝至目标ARM主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。
3.4.1.4. LOONGARCH64 MODE
此小节描述的是,如何在x86主机上,使用交叉编译的方式编译 LoongArch64 版本的SAIL。 如果需要在 LoongArch64 主机上本地编译,操作过程与x86本地编译类似,请参考 PCIE MODE 章节。
.安装loongarch64-linux-gnu工具链
从LoongArch64官网获取其[交叉编译的工具链](http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1.tar.xz), 解压到本地,解压后的目录结构如下:
└── loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1
├── bin
├── lib
├── lib64
├── libexec
├── loongarch64-linux-gnu
├── share
├── sysroot
└── versions
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.7, sophon-ffmpeg的版本为0.6.0,sophon-opencv的版本为0.6.0。
.编译包含多媒体模块的SAIL
通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=loongarch \ -DBUILD_PYSAIL=OFF \ -DTOOLCHAIN_BASIC_PATH=toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_LoongArch64/ToolChain_loongarch64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.7_loongarch64/opt/sophon/libsophon-0.4.7 \ -DFFMPEG_BASIC_PATH=sophon-mw_0.6.0_loongarch64/opt/sophon/sophon-ffmpeg_0.6.0 \ -DOPENCV_BASIC_PATH=sophon-mw_0.6.0_loongarch64/opt/sophon/sophon-opencv_0.6.0 \ .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_loongarch’,编译结果将安装在‘build_loongarch’下面
make install
将‘build_loongarch’文件夹下的‘sophon-sail’拷贝至目标龙芯主机的‘/opt/sophon’目录下,即可在目标机器上调用。
.编译不包含多媒体模块的SAIL
通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=loongarch \ -DBUILD_PYSAIL=OFF \ -DONLY_RUNTIME=ON \ -DTOOLCHAIN_BASIC_PATH=toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_LoongArch64/ToolChain_loongarch64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.7_loongarch64/opt/sophon/libsophon-0.4.7 \ .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_loongarch’,编译结果将安装在‘build_loongarch’下面
make install
将‘build_loongarch’文件夹下的‘sophon-sail’拷贝至目标龙芯主机的‘/opt/sophon’目录下,即可在目标机器上调用。
3.4.1.5. RISCV MODE
此小节描述的是,如何在x86主机上,使用交叉编译的方式编译 riscv64 版本的SAIL。 如果需要在 riscv64 主机上本地编译,操作过程与x86本地编译类似,请参考 PCIE MODE 章节。
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.5.0, sophon-ffmpeg的版本为0.6.0,sophon-opencv的版本为0.6.0。
从算能官网中获取‘libsophon_0.5.0_riscv64.tar.gz’,并解压
tar -xvf libsophon_0.4.0_riscv64.tar.gz
解压后libsophon的目录为‘libsophon_0.5.0_riscv64/opt/sophon/libsophon-0.5.0’
从算能官网中获取‘sophon-mw_0.6.0_riscv_64.tar.gz’,并解压
tar -xvf sophon-mw_0.6.0_riscv_64.tar.gz
解压后sophon-ffmpeg的目录为‘sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-ffmpeg_0.6.0’。
解压后sophon-opencv的目录为‘sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-opencv_0.6.0’。
.安装g++-riscv64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
.编译包含多媒体模块的SAIL
通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=riscv \ -DBUILD_PYSAIL=OFF \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_RISCV/ToolChain_riscv64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_0.5.0_riscv64/opt/sophon/libsophon-0.5.0 \ -DFFMPEG_BASIC_PATH=sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-ffmpeg_0.6.0 \ -DOPENCV_BASIC_PATH=sophon-mw_0.6.0_riscv_64/opt/sophon/sophon-opencv_0.6.0 .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_riscv’,编译结果将安装在‘build_riscv’下面
make install
将‘build_riscv’文件夹下的‘sophon-sail’拷贝至目标RISCV主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。
.编译不包含多媒体模块的SAIL
通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。
通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
mkdir build && cd build
执行编译命令
cmake -DBUILD_TYPE=riscv \ -DONLY_RUNTIME=ON \ -DBUILD_PYSAIL=OFF \ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_RISCV/ToolChain_riscv64_linux.cmake \ -DLIBSOPHON_BASIC_PATH=libsophon_0.5.0_riscv64/opt/sophon/libsophon-0.5.0 .. make sail
安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_riscv’,编译结果将安装在‘build_riscv’下面
make install
将‘build_riscv’文件夹下的‘sophon-sail’拷贝至目标RISCV主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。
3.4.1.6. WINDOWS MODE
.安装libsophon,sophon-ffmpeg,sophon-opencv的SAIL
windows下libsophon,sophon-ffmpeg,sophon-opencv的安装方式可参考算能官方文档
下载并安装Visual Studio 2019 作为windows下的开发工具
.编译包含多媒体模块的SAIL
编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
执行cmake命令,生成项目文件 .sln
cmake -DBUILD_TYPE=windows -DTARGET_TYPE=release -DRUNTIME_LIB=MT -DBUILD_PYSAIL=OFF -DLIBSOPHON_DIR=C:/sophon_sdk_win_release_MT/libsophon_0.4.9/data -DOPENCV_DIR=C:/sophon_sdk_win_release_MT/sophon-opencv_0.6.0/lib/cmake/opencv4 -DFFMPEG_DIR=C:/sophon_sdk_win_release_MT/sophon-ffmpeg_0.6.0/lib/cmake ..
在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。
项目编译成功后会在build/lib/Release文件夹下生成sail.lib,sail.exp,sail.dll等文件。
安装sail库,在build路径下运行指令,生成build_windows文件夹
cmake --install .
在CMakeLists.txt文件中引入sail库即可,如:
set(SAIL_DIR your_path/build_windows/sophon-sail/lib/cmake) find_package(SAIL REQUIRED) include_directories(${SAIL_INCLUDE_DIRS}) link_directories(${SAIL_LIB_DIRS}) ... target_link_libraries(your_project sail.lib)
.编译不包含多媒体模块的SAIL
编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,
通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。
下载SOPHON-SAIL源码,解压后进入其源码目录
创建编译文件夹build,并进入build文件夹
执行cmake命令,生成项目文件 .sln
cmake -DBUILD_TYPE=windows -DTARGET_TYPE=release -DRUNTIME_LIB=MT -DBUILD_PYSAIL=OFF -DONLY_RUNTIME=ON -DLIBSOPHON_DIR=C:/sophon_sdk_win_release_MT/libsophon_0.4.9/data ..
在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。
项目编译成功后会在build/lib/Release文件夹下生成sail.lib,sail.exp,sail.dll等文件。
安装sail库,在build路径下运行指令,生成build_windows文件夹
cmake --install .
在CMakeLists.txt文件中引入sail库即可,如:
set(SAIL_DIR your_path/build_windows/sophon-sail/lib/cmake) find_package(SAIL REQUIRED) include_directories(${SAIL_INCLUDE_DIRS}) link_directories(${SAIL_LIB_DIRS}) ... target_link_libraries(your_project sail.lib)
3.4.2. 使用SAIL的C++接口进行开发
注意: BM1688和CV186AH处理器仅支持SOC MODE章节,BM1684和BM1684X处理器无此限制。对于BM1688或者CV186AH处理器,下列命令中的sophon-mw应改为sophon-media。
3.4.2.1. PCIE MODE
在使用PCIE MODE编译好SAIL,并且通过执行‘sudo make install’或者通过拷贝的方式安装好SAIL的c++库之后, 推荐使用cmake来将SAIL中的库链接到自己的程序中,如果需要使用SAIL多媒体相关的功能, 也需要将libsophon,sophon-ffmpeg,sophon-opencv的头文件目录及动态库目录添加到自己的程序中。 可以在您程序的CMakeLists.txt中添加如下段落:
find_package(libsophon REQUIRED)
include_directories(${LIBSOPHON_INCLUDE_DIRS})
# 添加libsophon的头文件目录
set(SAIL_DIR /opt/sophon/sophon-sail/lib/cmake)
find_package(SAIL REQUIRED)
include_directories(${SAIL_INCLUDE_DIRS})
link_directories(${SAIL_LIB_DIRS})
# 添加SAIL的头文件及动态库目录
find_package(libsophon REQUIRED)
include_directories(${LIBSOPHON_INCLUDE_DIRS})
# 添加libsophon的头文件目录
set(OpenCV_DIR /opt/sophon/sophon-opencv-latest/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加sophon-opencv的头文件目录
set(FFMPEG_DIR /opt/sophon/sophon-ffmpeg-latest/lib/cmake)
find_package(FFMPEG REQUIRED)
include_directories(${FFMPEG_INCLUDE_DIRS})
link_directories(${FFMPEG_LIB_DIRS})
# 添加sophon-ffmpeg的头文件及动态库目录
add_executable(${YOUR_TARGET_NAME} ${YOUR_SOURCE_FILES})
target_link_libraries(${YOUR_TARGET_NAME} sail)
在您的代码中即可以调用sail中的函数:
#define USE_FFMPEG 1
#define USE_OPENCV 1
#define USE_BMCV 1
#include <stdio.h>
#include <sail/cvwrapper.h>
#include <iostream>
#include <string>
using namespace std;
int main()
{
int device_id = 0;
std::string video_path = "test.avi";
sail::Decoder decoder(video_path,true,device_id);
if(!decoder.is_opened()){
printf("Video[%s] read failed!\n",video_path.c_str());
exit(1) ;
}
sail::Handle handle(device_id);
sail::Bmcv bmcv(handle);
while(true){
sail::BMImage ost_image = decoder.read(handle);
bmcv.imwrite("test.jpg", ost_image);
break;
}
return 0;
}
3.4.2.2. SOC MODE
.SOC设备上编译程序
在SOC设备上安装好libsophon,sophon-ffmpeg,sophon-opencv,及SAIL之后,您可以参考PCIE MODE的开发方法使用cmake将SAIL中的库链接到自己的程序中, 如果需要使用SAIL多媒体相关的功能, 也需要将libsophon,sophon-ffmpeg,sophon-opencv的头文件目录及动态库目录添加到自己的程序中。
.x86交叉编译程序
如果您希望使用SAIL搭建交叉编译环境,您需要用到libsophon,sophon-ffmpeg,sophon-opencv以及gcc-aarch64-linux-gnu工具链。
.创建‘soc-sdk’文件夹
创建‘soc-sdk’文件夹,后续交叉编译需要用到的头文件及动态库都将存放在此目录中。
mkdir soc-sdk
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。
从算能官网中获取‘libsophon_soc_0.4.1_aarch64.tar.gz’,并解压拷贝至‘soc-sdk’文件夹
tar -xvf libsophon_soc_0.4.1_aarch64.tar.gz cp -r libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/include soc-sdk cp -r libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/lib soc-sdk
解压后libsophon的目录为‘libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’
从算能官网中获取‘sophon-mw-soc_0.4.1_aarch64.tar.gz’,并解压拷贝至‘soc-sdk’文件夹
tar -xvf sophon-mw-soc_0.4.1_aarch64.tar.gz cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/include soc-sdk cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/lib soc-sdk cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/include/opencv4/opencv2 soc-sdk/include cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/lib soc-sdk
.将交叉编译好的SAIL,也即是‘build_soc’拷贝至‘soc-sdk’文件夹
cp build_soc/sophon-sail/include soc-sdk cp build_soc/sophon-sail/lib soc-sdk
.安装g++-aarch64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
上述步骤配置好之后,可以通过配置cmake来完成交叉编译,在您程序的CMakeLists.txt中添加如下段落:
CMakeLists.txt中需要使用‘soc-sdk’的绝对路径为‘/opt/sophon/soc-sdk’,实际应用中需要根据自己实际的位置来进行配置。
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
include_directories("/opt/sophon/soc-sdk/include")
include_directories("/opt/sophon/soc-sdk/include/sail")
# 添加交叉编译需要使用的头文件目录
link_directories("/opt/sophon/soc-sdk/lib")
# 添加交叉编译需要使用的动态库目录
add_executable(${YOUR_TARGET_NAME} ${YOUR_SOURCE_FILES})
target_link_libraries(${YOUR_TARGET_NAME} sail)
# sail为需要链接的库
3.4.2.3. ARM PCIE MODE
.ARM主机上编译程序
在ARM主机上安装好libsophon,sophon-ffmpeg,sophon-opencv,及SAIL之后,您可以参考PCIE MODE的开发方法使用cmake将SAIL中的库链接到自己的程序中, 如果需要使用SAIL多媒体相关的功能, 也需要将libsophon,sophon-ffmpeg,sophon-opencv的头文件目录及动态库目录添加到自己的程序中。
.x86交叉编译程序
如果您希望使用SAIL搭建交叉编译环境,您需要用到libsophon,sophon-ffmpeg,sophon-opencv以及gcc-aarch64-linux-gnu工具链。
.创建‘arm_pcie-sdk’文件夹
创建‘arm_pcie-sdk’文件夹,后续交叉编译需要用到的头文件及动态库都将存放在此目录中。
mkdir arm_pcie-sdk
.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv
下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。
从算能官网中获取‘libsophon_0.4.1_aarch64.tar.gz’,并解压拷贝至‘arm_pcie-sdk’文件夹
tar -xvf libsophon_0.4.1_aarch64.tar.gz cp -r libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/include arm_pcie-sdk cp -r libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/lib arm_pcie-sdk
解压后libsophon的目录为‘libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’
从算能官网中获取‘sophon-mw_0.4.1_aarch64.tar.gz’,并解压拷贝至‘arm_pcie-sdk’文件夹
tar -xvf sophon-mw_0.4.1_aarch64.tar.gz cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/include arm_pcie-sdk cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/lib arm_pcie-sdk cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/include/opencv4/opencv2 arm_pcie-sdk/include cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/lib arm_pcie-sdk
.将交叉编译好的SAIL,也即是‘build_arm_pcie’拷贝至‘arm_pcie-sdk’文件夹
cp build_arm_pcie/sophon-sail/include arm_pcie-sdk cp build_arm_pcie/sophon-sail/lib arm_pcie-sdk
.安装g++-aarch64-linux-gnu工具链
如果已经安装,可忽略此步骤
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
上述步骤配置好之后,可以通过配置cmake来完成交叉编译,在您程序的CMakeLists.txt中添加如下段落:
CMakeLists.txt中需要使用‘arm_pcie-sdk’的绝对路径为‘/opt/sophon/arm_pcie-sdk’,实际应用中需要根据自己实际的位置来进行配置。
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
include_directories("/opt/sophon/arm_pcie-sdk/include")
include_directories("/opt/sophon/arm_pcie-sdk/include/sail")
# 添加交叉编译需要使用的头文件目录
link_directories("/opt/sophon/arm_pcie-sdk/lib")
# 添加交叉编译需要使用的动态库目录
add_executable(${YOUR_TARGET_NAME} ${YOUR_SOURCE_FILES})
target_link_libraries(${YOUR_TARGET_NAME} sail)
# sail为需要链接的库
3.5. 编译用户手册
.安装软件包
# 更新apt
sudo apt update
# 安装latex
sudo apt install texlive-xetex texlive-latex-recommended
# 安装Sphinx
pip3 install sphinx sphinx-autobuild sphinx_rtd_theme rst2pdf
# 安装结巴中文分词库,以支持中文搜索
pip3 install jieba3k
.安装字体
[Fandol](https://ctan.org/pkg/fandol) - Four basic fonts for Chinese typesetting
# 下载Fandol字体
wget http://mirrors.ctan.org/fonts/fandol.zip
# 解压缩字体包
unzip fandol.zip
# 拷贝安装字体包
sudo cp -r fandol /usr/share/fonts/
cp -r fandol ~/.fonts
.执行编译
下载SOPHON-SAIL源码,解压后进入其源码的docs目录
export LC_ALL="zh_CN.UTF-8"
cd docs
make pdf
编译好的用户手册路径为‘docs/build/SOPHON-SAIL_zh.pdf’
如果编译仍然报错,可以安装以下 ‘sudo apt-get install texlive-lang-chinese’,然后重新执行上述命令。