模型推理加速

模型推理加速配置说明

TextEmbedding模型当前支持bert、roberta、xlm_roberta类embedding模型向量化推理加速,支持的数据类型为float16。如需使用该功能,安装RAG SDK软件包时需将算子模块一并安装,并且确保已经启用该功能(默认为关闭状态),具体示例可以参考开启推理加速调用示例

clip模型加速只支持ViT-B-16、ViT-L-14、ViT-L-14-336 、ViT-H-14,下载链接参见模型下载说明,开启加速后首次推理会进行图编译,预计耗时 1-2分钟。

  • 各类模型推理加速配置如下:
  1. 方式1:

    from modeling_bert_adapter import enable_bert_speed
    from modeling_roberta_adapter import enable_roberta_speed
    from modeling_xlm_roberta_adapter import enable_xlm_roberta_speed
    from modeling_clip_adapter import enable_clip_speed
    
  2. 方式2:

    from mx_rag.transformer_adapter.modeling_bert_adapter import enable_bert_speed
    from mx_rag.transformer_adapter.modeling_roberta_adapter import enable_roberta_speed
    from mx_rag.transformer_adapter.modeling_xlm_roberta_adapter import enable_xlm_roberta_speed
    from mx_rag.transformer_adapter.modeling_clip_adapter import enable_clip_speed
    

说明: 软件包如果是通过run包安装的,支持方式1和方式2;如果是通过whl包安装的,只支持方式2。执行pip3 show mx_rag命令获取软件包安装路径判断通过哪种包安装的,如果是run安装的,mx_rag安装在$HOME/./local/lib下,后续会逐步废弃第一种方式导包使用。

  • 设置ENABLE_BOOST变量是否使能模型推理加速,设置值为"True"、"true"、"1"时表示使能加速,设置其他值表示不使能加速。

    os.environ["ENABLE_BOOST"] = "True"
    
  • 模型加速日志相关环境变量说明。

    ATB_LOG_TO_STDOUT:设置为1时表示日志记录到标准输出
    ATB_LOG_TO_FILE:设置为1时表示日志记录到文件
    ATB_LOG_LEVEL:设置日志等级,可配置为TRACE,DEBUG,INFO,WARN,ERROR,FATAL
    

Note

对于clip系列模型在Atlas 300I Duo 推理卡上推理,支持加速的batch为<=4,其他batch加速无明显性能提升甚至有劣化情况。

绑CPU核提升推理性能

如果设备为鲲鹏系列服务器,可通过numactl绑核运行程序,提升推理性能。

  1. 通过npu-smi info命令获取对应npu卡的_<bus-id>_。

  2. 通过lspci -vs _<bus-id>_命令查询npu卡对应的NUMA node。

    lspci -vs 0000:83:00.0
    

  3. 通过lscpu获得NUMA node对应的CPU核数。

    lscpu | grep NUMA
    

  4. 在程序执行前添加numactl -C _<CPU核数>_。

    numactl -C 48-71 xxxx程序
    

开启推理加速调用示例

import os
import torch
import torch_npu
# 适配bert类模型向量化推理加速
from modeling_bert_adapter import enable_bert_speed
from mx_rag.embedding.local import TextEmbedding

# 使能向量化推理加速(设置为"True"时表示使能,"False"表示不使能)
os.environ["ENABLE_BOOST"] = "True"

device_id = 1
torch_npu.npu.set_device(f"npu:{device_id}")

embed = TextEmbedding(model_path="/path/to/model", dev_id=device_id)
print(embed.embed_documents(["北京有哪些景点?"]))
print(embed.embed_query("北京有哪些景点?"))