纯模型推理和服务化拉起或推理时,出现Out of memory(OOM)报错
问题描述
纯模型推理和服务化拉起/推理时,出现各种Out of memory(OOM)报错,报错信息类似如下所示:
RuntimeError: NPU out of memory. Tried to allocate xxx GiB."
原因分析
- 模型权重文件较大。
- 用户输入shape超大(batch size较大、过长的文本、过大的图片、音频或视频)。
- 配置文件参数配置超大。
解决方案
- 适当调高NPU_MEMORY_FRACTION环境变量的值(代表内存分配比例,默认值为0.8),参考示例如下所示。
export NPU_MEMORY_FRACTION=0.96 export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True export OMP_NUM_THREADS=1
- 适当调低服务化配置文件config.json中maxSeqLen、maxInputTokenLen、maxPrefillBatchSize、maxPrefillTokens、maxBatchSize等参数的值,主要是调整maxPrefillTokens、maxSeqLen和maxPrefillToken参数。
- maxPrefillTokens需要大于等于maxInputToken。
- maxPrefillTokens会影响到atb初始化阶段的workspace,其值过大时拉起服务后可能直接出现Out of memory报错。
- 调整npuMemSize(代表单个NPU可以用来申请KV Cache的size上限,默认值为-1,表示自动分配KV Cache;大于0表示手动分配,会根据设置的值固定分配KV Cache大小)参数值。
npuMemSize = 单卡总内存 * 内存分配比例
- 使用更多显卡,比如当前使用2张卡,可以适当增加至4张或者8张,前提是需要确认当前模型在当前硬件中支持几张卡。
父主题: FAQ