当前位置:首页 > 系统教程 > 正文

SS928V100(Hi3403V100)ATC模型转换工具踩坑实录

SS928V100(Hi3403V100)ATC模型转换工具踩坑实录

SVP_NNN和NNN错误深度解析与解决方案(Linux版)

欢迎来到SS928V100 ATC模型转换踩坑记录!本文将带你深入了解在Linux系统下使用ATC工具时遇到的Hi3403V100 SVP_NNNNNN错误解决方法,是一篇详细的Linux ATC工具教程,小白也能看懂。

1. 背景与环境准备

SS928V100(Hi3403V100)是华为海思的AI芯片,ATC(Ascend Tensor Compiler)是将其它框架模型转换为.om离线模型的工具。本文基于Ubuntu 20.04,CANN 6.0.1版本。

2. 基础转换命令

假设我们有一个ResNet50的ONNX模型,转换命令如下:

    atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="input:1,3,224,224" --soc_version=Ascend310  

正常情况下会生成resnet50.om文件。

3. 踩坑点1:SVP_NNN内存分配错误

在执行转换时,可能会遇到类似错误:E10001: SVP_NNN memory allocation failed. Request size: xxx MB。这是由于ATC在分配设备内存时超出限制。解决方案:

  • 减小batch size,例如将--input_shape中的batch从1改为更小(如1)其实已经是1,可以尝试动态batch?或者减少输入尺寸。
  • 增加--memory参数,例如--memory=4096(单位MB)。
  • 检查系统swap和物理内存,确保足够。

SS928V100(Hi3403V100)ATC模型转换工具踩坑实录 SS928V100 ATC模型转换  Hi3403V100 SVP_NNN NNN错误解决 Linux ATC工具教程 第1张

修改后的命令:atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="input:1,3,224,224" --soc_version=Ascend310 --memory=4096

4. 踩坑点2:NNN算子不支持错误

如果模型中有ATC不支持的算子,会报NNN: Unsupported op type "SomeOp"。此时需要:

  • 查看CANN支持的算子列表:atc --help或查阅文档。
  • 升级CANN版本以获得更多算子支持。
  • 对于自定义算子,需要开发插件或使用--op_name_map映射。

例如,遇到不支持的"Gelu"算子,可以尝试替换为其他激活函数,或者使用更高版本的CANN。

5. 总结

通过本文的SS928V100 ATC模型转换踩坑记录,我们学习了如何处理Hi3403V100 SVP_NNNNNN错误,希望这篇Linux ATC工具教程能帮助你顺利转换模型。更多问题欢迎交流!