本章节内容包括两个部分,首先编译出可用于分布式部署的om离线模型,然后使用LoadGraph接口加载模型,最后使用RunGraph运行加载了该模型的Graph,得到图的执行结果。
编译用于分布式部署的离线模型,除了本章节介绍的方法外,还可以通过ATC工具模型转换获取,模型转换时需要使能--distributed_cluster_build参数。具体方法请参见《ATC工具使用指南》。
涉及的主要接口为:
aclgrphBuildModel接口通过options配置ENABLE_GRAPH_PARALLEL、GRAPH_PARALLEL_OPTION_PATH参数(ENABLE_GRAPH_PARALLEL参数开启算法切分,GRAPH_PARALLEL_OPTION_PATH参数配置切分策略配置文件路径)。
大模型算法切分后会将子模型要部署的logic device id存放在子模型的属性中,重新加载部署后,部署模块根据该属性进行分布式部署。
aclgrphBuildModel接口通过options配置MODEL_RELATION_CONFIG(设置多个切片模型之间的输入输出关系)。
涉及的主要接口为:
1
|
#include "ge_api.h" |
Graph定义完成后,调用GEInitialize进行系统初始化(也可在Graph定义前调用),申请系统资源。示例代码如下:
1 2 3 |
std::map<AscendString, AscendString>config = {{"ge.exec.deviceId", "0"}, {"ge.graphRunMode", "1"}}; Status ret = ge::GEInitialize(config); |
可以通过config配置传入ge运行的初始化信息,当前必选的配置参数为示例代码中的ge.exec.deviceId和ge.graphRunMode,分别用于指定GE实例运行设备,图执行模式(在线推理请配置为0,训练请配置为1)。更多配置请参考表1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
std::map <AscendString, AscendString> options; ge::Session *session = new Session(options); if(session == nullptr) { std::cout << "Create session failed." << std::endl; ... ... #释放资源 ge::GEFinalize(); return FAILED; } auto session = std::make_shared<ge::Session>(options); const std::string model_path //加载离线模型 只支持加载可用于分布式部署的离线模型,且模型中不包含变量 auto ret = session->LoadGraph(graph_id, load_option, model_path); // 执行模型 ret = session->RunGraph(graph_id, inputs, outputs); if(ret != SUCCESS) { ... ... #释放资源 ge::GEFinalize(); delete session; return FAILED; } |
用户可以通过传入options配置图运行相关配置信息,相关配置请参考Session构造函数。其中图运行完之后的数据保存在Tensor output_cov中。
1
|
ret = ge::GEFinalize(); |