开发者
资源
[object Object][object Object]

算子融合、量化、Tensor并行、ContinuousBatching等。

[object Object][object Object]

纯模型推理时,报错出现“out of memory, need block”,具体报错信息示例如下图:

[object Object]

通常是由于大图片或者视频导致的序列增长,导致预分配的KV cache不够用。

[object Object]

在“run_pa.sh”脚本中修改“max_input_length”,根据实际应用场景,设置一个更大的值。

[object Object][object Object]

单卡专家数较多,平均每个专家分到token不多,当精度有差异的场景下,有可能遇到chat接口比非chat接口性能更差的情况。

[object Object]

chat接口激活的专家分布更均衡,但单卡激活的专家数更多,需要搬运的专家也多,会导致性能变差,造成GMM算子性能波动。

[object Object]

这个是chat/no chat接口导致的固有差异,属于正常现象。

[object Object][object Object]

需要确认MindIE LLM和ATB,CANN,torch,torch_npu是否匹配,ABI=0/1的选择是否正确 。

[object Object][object Object]

当模型在模型侧使用torch.distributed多卡分布时,从服务侧拉起出现没有MASTER_ADDR或者MASTER_PORT环境变量:

[object Object]

没有设置环境变量MASTER_ADDR或MASTER_PORT。

[object Object]

可以通过如下两种方式设置环境变量:

  • 在代码中设置:
[object Object]
  • 通过环境变量设置:

    [object Object]
[object Object][object Object]

服务侧拉起模型时出现“Max retries exceeded with url”报错,具体报错信息如下:

[object Object]

大概率是内网访问的问题。

[object Object]

以Qwen-VL为例,打开权重文件夹下tokenization_qwen.py文件,按照如下29~30行修改:

[object Object][object Object]

Service侧加载模型后快速退出程序,出现“Socket bind failed”报错,具体日志如下:

[object Object]

MindIE Motor使用HTTP或者HTTPS协议进行通信,让客户端先断开连接可以减少服务器的负担,保证资源的合理释放,包括端口资源等。

[object Object]

进入配置文件修改对应的“port”、“managementPort”和“metricsPort”参数。为避免该类问题发生,请在断开服务进程之前确保先断开请求。或使用**lsof -i :{port}**查看端口状态,若仍被残留进程占用,使用kill信号清理残留进程。其中_{port}_替换为查看的端口号。

[object Object][object Object]

服务侧成功拉起,发送请求却迟迟无法得到响应。

[object Object]

可查看模型侧日志,可能是out of memory。

[object Object]

在配置文件中,更改“npuDeviceIds”和“npuMemSize”。

[object Object]

若服务化拉起失败,优先查看日志信息,日志路径默认在“/root/mindie/log/debug”下。

[object Object]

可尝试protobuf升级,pip install protobuf==5.28。

[object Object][object Object]

拉起服务化时,遇到Check_path: config.json failed报错,具体报错信息如下:

[object Object]

模型权重路径下的模型配置文件“config.json”没有640的权限。

[object Object]

可通过如下两种方法修改权限:

  • 执行如下命令,修改“config.json文件”的权限,:

    [object Object]
  • 执行如下命令,修改模型权重整个文件夹的权限:

    [object Object]
[object Object][object Object]

拉起服务时,出现“pybind11::error_already_set”报错,具体报错信息如下:

[object Object]

模型侧的三方依赖不正确,此时需要重新安装模型依赖的三方包。

[object Object]

根据模型的“requirements.txt”文件,重新安装第三方依赖,依赖文件默认路径为:“{MindIE安装目录}/atb_llm/requirements/models/requirements__{model}._txt”

[object Object][object Object]

拉起服务时core dump无报错日志。

[object Object]

模型侧的三方依赖不正确,如Protobuf等,此时需要重新安装模型依赖的三方包。

[object Object]

根据模型的“requirements.txt”文件,重新安装第三方依赖,依赖文件默认路径为:“{MindIE安装目录}/atb_llm/requirements/models/requirements_{model}.txt”

[object Object][object Object]
[object Object]

开启环境变量后,运行模型推理,根据加速库日志中的第一个error进一步定位。

[object Object]

确定性计算,是指在输入数据集等输入条件不变时,多次运行推理应用,输出结果每次保持一致。

[object Object]
  1. 将模型后处理部分从sampling改为greedy后,可以基本保证输出文本的稳定性。
  2. 由于确定性计算的问题,输出可能存在略微差异。
[object Object][object Object]
  1. 由于matmul算子在不同行上的累加顺序不完全相同,加之浮点精度没有加法交换律的特性,导致不同行上即使输入完全相同,计算结果也会存在一定的误差。
  2. 可以通过设置环境变量export ATB_MATMUL_SHUFFLE_K_ENABLE=0将加速库matmul的shuffle k功能关闭,关闭之后可以保证所有行上算子累加顺序一致,但matmul性能会下降10%左右 。
[object Object]

调度框架代码(block查询模式下)是可以保证确定性的,但是在CPU负载等环境因素的影响下,可能会对请求到达时间产生影响,最终影响调度的确定性。例如,客户外部服务查询引擎后得知可以提交10个请求,第一次运行时,10个请求快速到达并组成batch;但第二次运行时,受环境影响部分请求到达较晚,仅有5个请求组成了batch;那么两次运行的结果就会产生差异。

[object Object][object Object]

纯模型推理时遇到定位困难的报错。

[object Object]

由于模型推理中有异步执行,导致报错信息可能不是真实报错信息,需要同步后进行定位。

[object Object]

设置环境变量“export ASCEND_LAUNCH_BLOCKING=1”,打开同步运行后再进行定位。

[object Object]

确定性计算,是指在输入数据集等输入条件不变时,多次运行推理应用,输出结果每次保持一致。

  1. 模型层面:

    通信算子:

    [object Object]

    MatMul:

    [object Object]
  2. 推理引擎:

    MindIE:基于block进行新request的获取。

    TGI:暂不支持。

[object Object][object Object]

检查tokenizer在token转id时,是否使用了正确的模型路径。

[object Object][object Object]

推理过程中,D节点在拉取KV cache时,出现“Pull kv failed”的“ERROR”级别报错日志,并且CANN的status_code中出现了timeout的错误码。

[object Object]

PD分离场景中,D节点的KV cache需要从P节点那里拉取,出现这个错误,说明从P到D的KV cache传输超时,极有可能是网络质量差导致的。

[object Object]

  • (推荐)使用如下命令查看网络重传次数,如果有部分卡网络重传次数过高,请检查该光模块。

    [object Object]
  • 在MindIE的配置文件“ModelDeployConfig”字段中设置"kv_trans_timeout" 为“5”,表示Pull kv的超时时间为5秒。这样设置可能会掩盖由网络问题导致的推理性能问题,请谨慎设置。

[object Object][object Object]

部署MindIE LLM服务时,出现LLMPythonModel initializes fail的报错,如下图所示。

[object Object]

ibis缺少Python依赖。

[object Object]

进入/Service安装路径/logs目录,打开Python日志,根据日志报错信息,安装需要的依赖。

[object Object]

*### 问题描述

部署MindIE LLM服务,加载模型时出现out of memory报错提示,如下图所示。

[object Object]

权重太大,内存不足。

[object Object]

将config.json文件中ModelConfig的npuMemSize调小,比如调成8。

[object Object][object Object]

部署MindIE LLM服务时,出现atb_llm.runner无法import,如下图所示。

[object Object]

由于Python版本不是配套版本3.10,或者pip对应的Python版本不是目标版本3.10,找不到对应的包。可以通过python和pip -v查看对应的Python版本进行确认。

[object Object]
  1. 使用以下命令打开bashrc文件。

    [object Object]
  2. 在bashrc文件内添加如下环境变量,保存并退出。

    [object Object]
  3. 使用以下命令使环境变量生效。

    [object Object]
  4. 使用以下命令建立软链接。

    [object Object]
[object Object][object Object]

部署MindIE LLM服务时,找不到tlsCert等路径,如下图所示。

[object Object]

开启HTTPS服务时,未将需要的证书放到对应的目录下。

[object Object]

将生成服务器证书、CA证书、和服务器私钥等认证需要的文件,放置在对应的目录。

[object Object][object Object]

报错详细信息如下所示:

[object Object]

glibc.so本身的bug。

[object Object]

执行以下命令:

[object Object]
[object Object][object Object]

加载1300B大小的模型时耗时过长(约3个小时)。其中"B"代表"Billion",即十亿。

[object Object]

未使用异步加载。

[object Object]

通过设置环境变量OMP_NUM_THREADS进行模型加载优化,OMP_NUM_THREADS用于设置OpenMP(Open Multi-Processing)并行编程框架的线程数量,设置后加载1300B大小的模型只要10分钟左右。

[object Object]

此外,使用下面命令启动NPU显存碎片收集。

[object Object]
[object Object][object Object]

多模态模型输入(image_url/video_url/audio_url)时出现类似以下报错提示:

  • OpenAI接口:

    [object Object]
  • vLLM接口:

    [object Object]
  • Triton接口:

    [object Object]
[object Object][object Object]

可能输入的图片、音频或者视频是base64编码格式(Base64 编码后的数据通常是原始数据的4/3倍),导致整个message/prompt/text_input超过4MB而出现报错。

[object Object][object Object]
  • 方式一:参考接口约束

    • OpenAI接口:

      请求参数中的messages参数下所有字段的字符数被限制为不大于4MB,详情请参见推理接口

    • vLLM接口:

      请求参数中的prompt参数下所有字段的字符数被限制为不大于4MB,详情请参见《MindIE LLM开发指南》中的“API接口说明 > RESTful API参考 > EndPoint业务面RESTful接口 > 兼容vLLM 0.6.4版本接口 > 文本/流式推理接口”。

    • Triton接口:

      请求参数中的text_input参数下所有字段的字符数被限制为不大于4MB,详情请参见《MindIE LLM开发指南》中的“API接口说明 > RESTful API参考 > EndPoint业务面RESTful接口 > 兼容Triton接口 > 文本推理接口”。

    [object Object]
  • 方式二:手动修改源码

    比如修改输入inputs大小的限制为10MB,代码修改示例如下所示:

    图 1 示例一

    图 2 示例二

[object Object][object Object]

多模态模型推理服务时,文件MindIE-LLM-master\examples\atb_models\atb_llm\models\qwen2_vl\flash_causal_qwen2_using_mrope.py出现类似以下报错提示:

[object Object]

图 1 报错信息

图 2 报错文件

图 3 报错文件

[object Object][object Object]

可能是concat相关的某个算子,tensor 5在某个维度上是1,与要求的维度上是2大小不一致。可能与squeeze有关,因为squeeze会去掉大小为1的维度。

示例:如果某个算子(如:concat、matmul等),希望这个维度存在并匹配某个值(如:2),那被squeeze删除后shape就会报错。

[object Object]
[object Object][object Object]

修改代码,如下所示:

[object Object][object Object]

运行Qwen2.5-VL系列模型失败并出现类似以下报错提示:

  • 报错提示一:

    [object Object]
  • 报错提示二:

    [object Object]
[object Object][object Object]

模型配置等不支持,一般是因为安装的依赖不正确,需要安装对应的依赖文件。

[object Object][object Object]
  • 报错提示一处理方式:

    根据每个模型所需依赖安装对应的requirements.txt 文件。

    • 所有模型需要安装的通用依赖文件所在路径为:

      [object Object]
    • 不同的模型对应的依赖安装文件在models路径下,比如qwen2-vl 模型:

      [object Object]

    安装命令如下所示:

    [object Object]
  • 报错提示二处理方式:

    1. 单击查看该模型硬件环境是否支持。

    2. 使用以下命令排查驱动版本是否配套,驱动最低版本23.0.7才能运行,建议安装驱动版本为24.1.RC2及以上。

      [object Object]
    3. 初始环境变量检查下是否都已经配置好,并且已经生效。

    4. 检查系统空闲内存是否充足。

      使用以下命令查看free的内存大小,需保证大于权重大小/机器数

      [object Object]

      根据经验,尽量保证free_mem >= (权重大小/机器数) * 1.3

      [object Object]
    5. 导入以下环境变量:

      [object Object]
    6. 排查多机服务化参数配置是否一致。

    7. 重启服务器,并重新启动服务。

    [object Object]
[object Object][object Object]

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

[object Object]
[object Object][object Object]
  • 模型权重文件较大。
  • 用户输入shape超大(batch size较大、过长的文本、过大的图片、音频或视频)。
  • 配置文件参数配置超大。
[object Object][object Object]
  1. 适当调高NPU_MEMORY_FRACTION环境变量的值(代表内存分配比例,默认值为0.8),参考示例如下所示。

    [object Object]
  2. 适当调低服务化配置文件config.json中maxSeqLen、maxInputTokenLen、maxPrefillBatchSize、maxPrefillTokens、maxBatchSize等参数的值,主要是调整maxPrefillTokens、maxSeqLen和maxPrefillTokens参数。

    • 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张,前提是需要确认当前模型在当前硬件中支持几张卡。

[object Object][object Object]

多模态模型进行推理时出现类似以下报错提示:

[object Object]

或者:

[object Object]
[object Object][object Object]
  • 使用的模型在当前版本可能不支持该硬件环境。

  • 输入shape过大,self-attention算子不支持。

[object Object][object Object]
  • 使用的模型在当前版本可能不支持该硬件环境

    • 单击,查看MindIE各版本模型支持度,选择正确的MindIE版本。

    • 通过修改代码临时解决,可直接在镜像中修改相应的代码,只需要修改python代码,不需要重新编译,如下所示。

  • 输入shape过大,self-attention算子不支持

    将服务化配置文件config.json中的maxPrefillTokens参数适当调小。

[object Object][object Object]

多模态模型输入image_url/video_url/audio_url格式进行推理时,出现类似以下报错提示:

[object Object]
[object Object][object Object]

image_url/video_url/audio_url参数中的值未符合指定的要求。

[object Object][object Object]

Image

  1. 格式一:{"type": "image_url", "image_url": image_url}, 此类格式的image_url支持本地路径、jpg图片的base64编码、http和https协议url。

  2. 格式二:{"type": "image_url", "image_url": {"url": {image_url}}},此类格式的image_url支持本地路径、jpg图片的base64编码、http和https协议url。

  3. 格式三:{"type": "image_url", "image_url": {"url": "file://{local_path}"},此类格式仅支持本地路径。

  4. 格式四:{"type": "image_url", "image_url": {"url": f"data:<mime_type>/<subtype>;base64,<base64_data>"}},此类格式仅支持base64编码,源格式可以为jpg、jpeg、png,对应的MIME如下表所示。

[object Object]undefined

Video

  1. 格式一:{"type": "video_url", "video_url": video_url}, 此类格式的video_url支持本地路径、http和https协议url。

  2. 格式二:{"type": "video_url", "video_url": {"url": {video_url}}},此类格式的video_url支持本地路径、http和https协议url。

  3. 格式三:{"type": "video_url", "video_url": {"url": "file://{local_path}"},此类格式仅支持本地路径。

  4. 格式四:{"type": "video_url", "video_url": {"url": f"data:<mime_type>/<subtype>;base64,<base64_data>"}},此类格式仅支持base64编码,源格式可以为mp4、avi、wmv,对应的MIME如下表所示。另,由于视频编码的后的长度可能超出MindIE Service服务化请求字符长度的最大上限,因此并不建议使用base64编码格式传输视频。

[object Object]undefined

Audio

  1. 格式一:{"type": "audio_url", "audio_url": audio_url}, 此类格式的audio_url支持本地路径、http和https协议url。

  2. 格式二:{"type": "audio_url", "audio_url": {"url": {audio_url}}},此类格式的audio_url支持本地路径、http和https协议url。

  3. 格式三:{"type": "audio_url", "audio_url": {"url": "file://{local_path}"}},此类格式仅支持本地路径。

  4. 格式四:{"type": "audio_url", "audio_url": {"url": f"data:<mime_type>/<subtype>;base64,<base64_data>"}},此类格式仅支持base64编码,源格式可以为mp3、wav、flac,对应的MIME如下表所示。

    [object Object]undefined
  5. 格式五:{"type": "input_audio", "input_audio": {"data": f"{audio_base64}", "format": "wav"}},当type为input_audio时,仅支持base64编码格式,源格式支持mp3、wav、flac,同时,必须通过format字段明确源格式类型。

[object Object][object Object]

Qwen2-VL系列模型Tokenizer报错(其他模型也有可能报错,报错无关于模型),出现类似以下报错提示:

[object Object]

图 1 报错提示

[object Object][object Object]
  • 模型适配的transformers/tokenizer版本不正确。
  • trust_remote_code参数配置为false。
  • 服务化的config.json文件、模型权重路径和模型config.json文件权限不正确。
  • 模型权重文件下可能缺少config.json文件。
  • 词表文件损坏。
[object Object][object Object]
  • 模型适配的transformers/tokenizer版本不正确。

    • 确认每个模型需要安装依赖的transformers的版本,一般在模型文件的requirements.txt文件中可查看。然后查看模型权重路径下的config.json文件中的transformers版本号是否一致。

    • 使用以下tokenizer校验方法,创建一个Python脚本,如果运行成功,则tokenizer加载无问题。

      [object Object]
  • trust_remote_code参数配置为false。

    • 将trust_remote_code参数配置为true。
  • 服务化的config.json文件、模型权重路径和模型config.json文件权限不正确。

    • 将服务化的config.json文件、模型权重路径和模型config.json文件权限修改为640。
  • 模型权重文件下可能缺少config.json文件。

    • 如果缺少config.json文件,将其补齐。
  • 词表文件损坏。

    • 使用以下命令检查tokenizer.json文件的完整性

      [object Object]
[object Object][object Object]

MindIE部署Qwen2.5系列模型执行量化推理时出现以下报错信息:

[object Object]

[object Object]
[object Object][object Object]

未配置quantize字段。

[object Object][object Object]

执行量化推理时,需要在量化权重所在路径的config.json文件中添加quantize字段,值为当前量化权重的量化方式,示例如下:

[object Object]
[object Object][object Object]

使用MindIE进行推理,相同输入,组batch顺序不同时,模型推理输出结果不同。

[object Object][object Object]

由于matmul算子在不同行上的累加顺序不完全相同,且浮点精度没有加法交换律的特性,导致不同行上即使输入完全相同,计算结果也会存在一定的误差。

[object Object][object Object]

确定性计算,是指在输入数据集等输入条件不变时,多次运行推理应用,输出结果每次保持一致。可以通过设置环境变量export ATB_MATMUL_SHUFFLE_K_ENABLE=0将加速库matmul的shuffle k功能关闭,关闭之后可以保证所有行上算子累加顺序一致,但matmul性能会下降10%左右 。

通信算子:

[object Object]

MatMul:

[object Object]
[object Object][object Object]

启动MindIE LLM服务时,出现Gloo连接错误,日志显示类似信息:

[object Object]
[object Object]

该错误通常出现在多机部署场景下,核心原因是Gloo组件自动选择了错误的网络接口(网卡),导致节点间通信失败。

[object Object]

通过环境变量显式指定Gloo使用的网络接口:

  1. 查看可用网卡: 在每个节点执行以下命令查看网卡名称:

    [object Object]

    常见网卡命名格式:[object Object][object Object][object Object]

  2. 设置环境变量: 在启动服务前,为每个节点设置[object Object]环境变量:

    [object Object]
  3. 容器部署注意事项

    • 使用Docker时,需将容器网络模式设置为[object Object]模式
    • 每个机器的网卡名称可能不同,需分别配置为本机的网卡名称
  4. Kubernetes部署注意事项

    • Kubernetes集群中,网卡名称通常映射为[object Object]
    • 大EP部署时,可以在[object Object]脚本中配置环境变量
[object Object]

设置完成后重新启动服务,检查是否仍出现Gloo连接错误。