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

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    cmake ..
    make pysail
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    cmake -DONLY_RUNTIME=ON ..
    make pysail
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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’。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    cmake -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 -DCUSTOM_PY_LIBDIR=python_3.8.2/lib ..
    make pysail
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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。

  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’

  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’。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_arm-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_arm-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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。

  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’

  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’。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 打包生成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
    
  5. 安装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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 打包生成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
    
  5. 安装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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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解压后的目录。

  1. 打包生成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

  1. 安装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。

  1. 从算能官网中获取‘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’

  1. 从算能官网中获取‘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’。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_riscv64-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 打包生成python wheel,生成的wheel包的路径为‘python/dist’,文件名为‘sophon_riscv64-3.9.0-py3-none-any.whl’

    cd ../python
    chmod +x sophon_whl.sh
    ./sophon_whl.sh
    
  5. 安装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

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

  3. 执行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 ..
    
  4. 在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。

  5. 在sophon-sail/python/windows路径下运行指令python setup.py bdist_wheel 打包生成dist文件夹下的wheel包,文件名为‘sophon-3.9.0-py3-none-any.whl’

  6. 安装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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

  3. 执行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 ..
    
  4. 在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。

  5. 在sophon-sail/python/windows路径下运行指令python setup.py bdist_wheel 打包生成dist文件夹下的wheel包,文件名为‘sophon-3.9.0-py3-none-any.whl’

  6. 安装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包

  1. 查看SOC上的libsophon版本和sophon-mw(sophon-ffmpeg,sophon-opencv)的版本

    ls /opt/sophon/
    
  2. 查看SOC上的Python3版本

    python3 --version
    
  3. 从预编译的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章节。

  1. 查看ARM主机上的libsophon版本和sophon-mw(sophon-ffmpeg,sophon-opencv)的版本

    ls /opt/sophon/
    
  2. 查看ARM主机上的Python3版本

    python3 --version
    
  3. 从预编译的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

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    cmake -DBUILD_PYSAIL=OFF ..
    make sail
    
  4. 安装SAIL动态库及头文件,编译结果将安装在‘/opt/sophon’下面

    sudo make install
    

.编译不包含多媒体模块的SAIL

使用默认安装路径,编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,

通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    cmake -DONLY_RUNTIME=ON -DBUILD_PYSAIL=OFF ..
    make sail
    
  4. 安装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。

  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’

  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。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_soc’,编译结果将安装在‘build_soc’下面

    make install
    
  5. 将‘build_soc’文件夹下的‘sophon-sail’拷贝至目标SOC的‘/opt/sophon’目录下,即可在soc上面进行调用。

.编译不包含多媒体模块的SAIL

通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。

通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_soc’,编译结果将安装在‘build_soc’下面

    make install
    
  5. 将‘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。

  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’

  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。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_arm_pcie’,编译结果将安装在‘build_arm_pcie’下面

    make install
    
  5. 将‘build_arm_pcie’文件夹下的‘sophon-sail’拷贝至目标ARM主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。

.编译不包含多媒体模块的SAIL

通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。

通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_arm_pcie’,编译结果将安装在‘build_arm_pcie’下面

    make install
    
  5. 将‘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,

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_loongarch’,编译结果将安装在‘build_loongarch’下面

    make install
    
  5. 将‘build_loongarch’文件夹下的‘sophon-sail’拷贝至目标龙芯主机的‘/opt/sophon’目录下,即可在目标机器上调用。

.编译不包含多媒体模块的SAIL

通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。

通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_loongarch’,编译结果将安装在‘build_loongarch’下面

    make install
    
  5. 将‘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。

  1. 从算能官网中获取‘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’

  1. 从算能官网中获取‘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。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_riscv’,编译结果将安装在‘build_riscv’下面

    make install
    
  5. 将‘build_riscv’文件夹下的‘sophon-sail’拷贝至目标RISCV主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。

.编译不包含多媒体模块的SAIL

通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。

通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

    mkdir build && cd build
    
  3. 执行编译命令

    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
    
  4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_riscv’,编译结果将安装在‘build_riscv’下面

    make install
    
  5. 将‘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

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

  3. 执行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 ..
    
  4. 在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。

  5. 项目编译成功后会在build/lib/Release文件夹下生成sail.lib,sail.exp,sail.dll等文件。

  6. 安装sail库,在build路径下运行指令,生成build_windows文件夹

    cmake --install .
    
  7. 在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等多媒体相关接口。适用于只需要大语言模型推理能力、不需要处理图片或视频的场景。

  1. 下载SOPHON-SAIL源码,解压后进入其源码目录

  2. 创建编译文件夹build,并进入build文件夹

  3. 执行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 ..
    
  4. 在vs2019下打开.sln项目文件,修改编译模式为release,点击生成项目。

  5. 项目编译成功后会在build/lib/Release文件夹下生成sail.lib,sail.exp,sail.dll等文件。

  6. 安装sail库,在build路径下运行指令,生成build_windows文件夹

    cmake --install .
    
  7. 在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。

  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’

  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。

  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’

  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’,然后重新执行上述命令。