昇腾社区首页
EN
注册
开发者
下载

纯模型推理和服务化拉起或推理时,出现Out of memory(OOM)报错

问题描述

纯模型推理和服务化拉起/推理时,出现各种Out of memory(OOM)报错,报错信息类似如下所示:

RuntimeError: NPU out of memory. Tried to allocate xxx GiB."

原因分析

  • 模型权重文件较大。
  • 用户输入shape超大(batch size较大、过长的文本、过大的图片、音频或视频)。
  • 配置文件参数配置超大。

解决方案

  1. 适当调高NPU_MEMORY_FRACTION环境变量的值(代表内存分配比例,默认值为0.8),参考示例如下所示。
    export NPU_MEMORY_FRACTION=0.96 
    export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True 
    export OMP_NUM_THREADS=1
  2. 适当调低服务化配置文件config.json中maxSeqLen、maxInputTokenLen、maxPrefillBatchSize、maxPrefillTokens、maxBatchSize等参数的值,主要是调整maxPrefillTokens、maxSeqLen和maxPrefillToken参数。
    • maxPrefillTokens需要大于等于maxInputToken。
    • maxPrefillTokens会影响到atb初始化阶段的workspace,其值过大时拉起服务后可能直接出现Out of memory报错。
  3. 调整npuMemSize(代表单个NPU可以用来申请KV Cache的size上限,默认值为-1,表示自动分配KV Cache;大于0表示手动分配,会根据设置的值固定分配KV Cache大小)参数值。

    npuMemSize = 单卡总内存 * 内存分配比例

  4. 使用更多显卡,比如当前使用2张卡,可以适当增加至4张或者8张,前提是需要确认当前模型在当前硬件中支持几张卡。