文档首页> Atlas 200 DK 开发者套件(1.0.7.alpha)> ATC工具使用指导> FAQ> 包含NPU自定义算子的网络模型freeze出错解决方法
更新时间:2021-03-18 GMT+08:00
分享

包含NPU自定义算子的网络模型freeze出错解决方法

当在NPU上进行模型训练时,如果训练后的模型包含NPU自定义算子,则在调用Tensorflow中的freeze方法冻结训练后的模型时会失败。通过导入NPU自定义算子库到Tensorflow中的freeze方法内可以解决上述问题。举例如下:

图1是NPU训练bert模型后通过estimator.export_model导出的模型文件,该模型文件中包含NPU自定义算子。

图1 训练后的模型文件

执行如下命令调用Tensorflow中的freeze方法冻结该模型。

python3 freeze_npu_savedModel.py --input_saved_model_dir=savedModel --output_node_names=loss/Softmax --output_graph=bert_910.pb

会出现如下报错:

由于该模型文件中包含NPU自定义算子,保存在npu_ops包中,因此freeze方法在Tensorflow的算子库中找不到该算子。

解决方法如下:

  1. 找到Tensorflow的freeze方法python文件,并编写该文件,在导入模块加入npu_ops,即添加如下内容:

  2. 再次执行如下命令调用Tensorflow中的freeze方法冻结该模型。

    python3 freeze_npu_savedModel.py --input_saved_model_dir=savedModel --output_node_names=loss/Softmax --output_graph=bert_910.pb

    执行该命令后,调用Tensorflow中的freeze方法冻结该模型成功,可以生成正常的bert_910.pb文件。

Tensorflow中的freeze方法可以独立调用,建议用户复制一份freeze方法python文件到用户目录后,再在导入模块加入npu_ops ,这样后续针对NPU训练的模型可以重复使用,使用前请确保环境变量配置正确。

分享:

    相关文档

    相关产品

关闭导读