环境变量

  // UCP
  HB_UCP_LOG_LEVEL                       // 使用hlog设置ucp模块log等级,值为0、1、2、3、4、5、6,分别对应trace、debug、info、warn、error、critical、never,默认为warn
  HB_UCP_LOG_PATH                        // 使用hlog设置日志存储路径,支持滚动切分特性,可指定单个文件大小和切分文件数量
  HB_UCP_LOG_MAX_SIZE                    // 设置滚动切分时的文件大小,单位是MB,默认值为1024
  HB_UCP_LOG_ROTATE_NUM                  // 设置滚动切分时的文件数量,默认值为16
  HB_UCP_SCHEDULE_PRIORITY               // 设置ucp调度器线程的优先级,取值范围为0~99,默认为1,当优先级设置大于0时,线程的调度方式为SCHED_FIFO 
  HB_UCP_CPU_PROCESS_THREAD_PRIORITY     // 设置ucp模型推理的cpu算子处理线程优先级,取值范围为0~99,默认为0,当优先级设置大于0时,线程的调度方式为SCHED_RR 
  HB_UCP_ALL_BACKENDS_DEFAULT_DISABLE    // 禁用所有后端,值非0则禁用,默认值为0,即不禁用;此环境变量优先级低于其他所有使能后端的环境变量HB_UCP_ENABLE_XXX_BACKEND_CORE_NUM,一般的用法是先禁用所有后端,然后单独打开需要的后端
  HB_UCP_ENABLE_GDC_BACKEND_CORE_NUM     // 设置GDC可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭GDC,关闭可减少线程资源的占用
  HB_UCP_ENABLE_STITCH_BACKEND_CORE_NUM  // 设置STITCH可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭STITCH,关闭可减少线程资源的占用
  HB_UCP_ENABLE_JPU_BACKEND_CORE_NUM     // 设置JPEG Process Unit 可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭JPU,关闭可减少线程资源的占用
  HB_UCP_ENABLE_VPU_BACKEND_CORE_NUM     // 设置Video Process Unit可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭VPU,关闭可减少线程资源的占用
  HB_UCP_ENABLE_DSP_BACKEND_CORE_NUM     // 设置DSP可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭DSP,关闭可减少线程资源的占用
  HB_UCP_ENABLE_BPU_BACKEND_CORE_NUM     // 设置BPU可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭BPU,关闭可减少线程资源的占用
  HB_UCP_ENABLE_PYM_BACKEND_CORE_NUM     // 设置PYM可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭PYM,关闭可减少线程资源的占用
  HB_UCP_ENABLE_ISP_BACKEND_CORE_NUM     // 设置ISP可支持的核数,默认当前计算平台可支持的最大核数,值为0即关闭ISP
  HB_UCP_ENABLE_CPU_BACKEND_CORE_NUM     // 设置模型推理中CPU算子推理线程池的线程数量,默认为6
  HB_UCP_MAX_TASK_NUM                    // 设置VP、HPL、NN各自每个模块允许同时存在的最多任务个数,默认为32
  HB_UCP_SIM_PLATFORM_TYPE               // 设置仿真环境下的计算平台类型,值为nash-e、nash-m、nash-p、nash-b、nash-b-plus、nash-b-lite、nash-h分别对应各个计算平台,默认为nash-e
  HB_UCP_ENABLE_LAZY_HLOG                // 控制hlog初始化的时机。当设置为1时,在链接libhbucp库后不会立即初始化hlog(默认值为0)。此设置适用于仅链接库而不调用接口的场景,以避免hlog预分配造成的内存占用。请注意:设置为1后,hlog的相关环境变量将不生效,且后续调用ucp接口时仅输出错误级别日志

  // VP
  HB_VP_LOG_LEVEL                        // 使用hlog设置vp模块log等级,值为0、1、2、3、4、5、6,分别对应trace、debug、info、warn、error、critical、never,默认为warn

  // HPL
  HB_HPL_LOG_LEVEL                       // 使用hlog设置hpl模块log等级,值为0、1、2、3、4、5、6,分别对应trace、debug、info、warn、error、critical、never,默认为warn

  // DSP
  HB_DSP_LOG_LEVEL                       // 设置DSP模块ARM侧日志等级,值为0、1、2、3、4、5、6,分别对应Verbose、Debug、Info、Warning、Error、Critical、Never,默认为Warning
  HB_DSP_VDSP_LOG_LEVEL                  // 设置DSP模块DSP侧日志等级,值为1、2、3、4、5,分别对应为Debug、Info、Warning、Error、Always等级,默认为Warning
  HB_DSP_ENABLE_CONFIG_VDSP              // 设置ARM侧配置DSP侧日志等级及日志写入ARM侧显示,默认为false
  HB_DSP_WRITE_VDSP_LOG_TO_ARM           // 设置DSP端DSP侧日志ARM侧显示,默认为false

  // NN
  HB_NN_LOG_LEVEL                        // 使用hlog设置nn模块log等级,值为0、1、2、3、4、5、6,分别对应trace、debug、info、warn、error、critical、never,默认为warn
  HB_NN_HBIR_GPU_ENABLE                  // 设置NN模块是否使用GPU加速,true为使用。
  HB_NN_ENABLE_MEM_LRU_CACHE             // 设置NN模块是否使用内存LRU缓存,true为使用,默认不使用。
  HB_NN_MEM_LRU_CACHE_CLEAN_INTERVAL     // 设置NN模块清理LRU缓存的时间间隔,单位为毫秒,默认为1000ms。
  HB_DNN_USER_DEFINED_L2M_SIZES          // 设置NN模块分配给每个BPU核心的L2 Memory大小,4核BPU配置示例:6:6:6:6,代表每个核心分配6MB。

日志等级设置说明

  • 日志等级:

    UCPVPNNHPL 模块中的日志主要分为7个等级:

    log等级可设置为0、1、2、3、4、5、6,分别对应Verbose、Debug、Info、Warning、Error、Critical、Never,默认为Warning。

    DSP 模块中ARM侧的日志主要分为7个等级:

    log等级可设置为0、1、2、3、4、5、6,分别对应Verbose、Debug、Info、Warning、Error、Critical、Never,默认为Warning。

    DSP 模块中DSP侧的日志主要分为5个等级:

    log等级可设置为1、2、3、4、5,分别对应Debug、Info、Warning、Error、Always等级,默认为Warning。

  • 日志等级设置规则:

    • 若发生的log等级 >= 设置的等级,则该log可以被打印,反之被屏蔽。
    • 设置的log等级越小,打印信息越多。例如:设置log等级为3,即为Warning级别,则3、4、5等级的log均可以被打印。VP 模块默认log等级为Warning级别,即以下log级别的信息可以被打印:Warning、Error、Critical。
注解

DSP侧日志可以通过如下步骤获取:

  • 配置环境变量,使能DSP日志输出

    export HB_DSP_ENABLE_CONFIG_VDSP=true
    export HB_DSP_WRITE_VDSP_LOG_TO_ARM=true
  • 启动日志监听服务

    # VDSP0的日志服务:
    hrut_remoteproc_log -b /sys/class/remoteproc/remoteproc1/log

HBIR模型推理说明

DNN支持X86环境下推理HBIR模型,由于您的环境中可能不存在GPU,因此默认不使用GPU加速。

若您的机器上存在GPU,可以通过设置环境变量 HB_NN_HBIR_GPU_ENABLEtrue 来使用GPU加速。

注解
  • 使用GPU加速时,应确保您的机器上已安装了相应的GPU驱动和CUDA环境,环境要求请参考环境部署

  • 使用GPU加速时,应确保 libhbdnn.soLD_LIBRARY_PATH 所设置的目录下。

  • 使用GPU加速时,可以设置控制参数中的 deviceId 来指定GPU进行计算,应确保设置的值在 [0, gpu_dvice_count) 范围内。

内存LRU缓存说明

BPU内存在BPU实际使用前,NN模块内部需要对该块内存进行特殊处理才能够正常使用,对内存的频繁处理会导致CPU负载变大,从而可能会引发性能问题。

为了解决这个问题,推理库提供了内存LRU缓存功能,通过设置环境变量 HB_NN_ENABLE_MEM_LRU_CACHEtrue 来使用。设置方式如下:

export HB_NN_ENABLE_MEM_LRU_CACHE=true
注解
  • NN模块内部基于LRU(最近最少使用原理)对输入输出内存进行管理,因此使用缓存功能时,您申请的内存在调用释放接口后,不会立即释放,直到缓存被清理后才会实际释放内存。可以通过设置 HB_NN_MEM_LRU_CACHE_CLEAN_INTERVAL 环境变量来控制缓存清理的时间间隔。

  • 场景约束:您申请的内存在反复使用的情况才有收益。

  • 该缓存功能只适用于NN模块。

L2M模型推理支持说明

UCP侧L2 Cache采用静态映射方案,需要您使用环境变量 HB_DNN_USER_DEFINED_L2M_SIZES 配置分配给每个BPU核心的L2 Cache大小。每个核的Size间使用 : 分割,单位为 MB ,Size值仅支持整数。 UCP会在推理准备阶段按照您的配置分配所有核心的L2 Cache。如下是几种配置示例及说明:

export HB_DNN_USER_DEFINED_L2M_SIZES=6:6:6:6    # 4个核心,每个核心分配6MB
export HB_DNN_USER_DEFINED_L2M_SIZES=0:6:0:0    # 4个核心,核1分配6MB,其他核不分配
export HB_DNN_USER_DEFINED_L2M_SIZES=12:0:0:12  # 4个核心,核0分配12MB,核3分配12MB,其他核不分配
注意
  1. 仅J6P/H平台支持推理L2M模型。

  2. 启用L2 Cache优化时,不支持推理优先级设置为抢占。

  3. UCP支持不同进程间L2 Cache共享,此特性依赖较新版本的bsp版本,具体版本要求可咨询地平线工具链团队。若您使用L2 Cache进程间共享特性,则需要各进程做同样的分配策略,即设置的 HB_DNN_USER_DEFINED_L2M_SIZES 环境变量值保持一致。若您的底软版本不支持进程间共享,需要各进程配置的L2 Cache大小总和不超过硬件所支持的最大值。

  4. 最大L2 Cache大小可以通过命令 cat /sys/kernel/debug/ion/heaps/custom 进行查看。