使用tensorflow的C++接口使用npu设备的方法

场景说明

部分用户会直接将tensorflow的源码拿出来跟自己的业务代码一起编译使用,这种情况下,就不是从python接口入口了,资料中提供的使用npu的方法就不再适用,此处给用户提供了一种在tensorflow源码层面适配使用npu设备的方法,此方法仅供参考。

操作步骤

1. 编译代码时,需要在链接动态库选项中增加一个_tf_adapter.so的链接,这个so是一个让tensorflow能找到npu设备的插件

以gcc为例,使用方法如下

2. 对tensorflow的sessionOptions做适配,使其能将图下发到npu上计算,tensorflow的sessionOptions变量可以通过以下代码获取。

tensorflow::SessionOptions sessOpts = tensorflow::SessionOptions();

接着对此SessionOptions的内容增加以下内容

auto *custom_op =

sessOpts.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers();

custom_op->set_name("NpuOptimizer");

AttrValue value_bool;

value_bool.set_b(true);

custom_op->mutable_parameter_map()->insert({"use_off_line", value_bool});

AttrValue value_string;

value_string.set_s(std::string("force_fp16"));

custom_op->mutable_parameter_map()->insert({"precision_mode", value_string});

AttrValue value_int;

value_int.set_i(0);

custom_op->mutable_parameter_map()->insert({"graph_run_mode", value_int});

sessOpts.config.mutable_graph_options()->mutable_rewrite_options()->set_remapping(RewriterConfig::OFF);

sessOpts.config.mutable_graph_options()->mutable_rewrite_options()->set_memory_optimization(RewriterConfig_MemOptType_MANUAL);

3. 设置环境变量,使其能找到npu的相关so

source /usr/local/Ascend/latest/bin/setenv.bash

接着按照正常的npu的执行方法执行即可。