部分用户会直接将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的执行方法执行即可。