1 Star 0 Fork 0

YuJianfeng/ms_cxx_graph_api_example

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
cxx_graph_api.cc 2.81 KB
一键复制 编辑 原始数据 按行查看 历史
YuJianfeng 提交于 2021-04-23 16:01 +08:00 . update
#include "cxx_graph_api.h"
#include "core/base/core_ops.h"
#include "vm/backend.h"
#include "vm/transform.h"
// Create a float32 tensor which fills with ones.
tensor::TensorPtr CreateOnesFloatTensor(const std::vector<int64_t> &shape) {
auto tensor = std::make_shared<tensor::Tensor>(kNumberTypeFloat32, shape);
float *data = reinterpret_cast<float *>(tensor->data_c());
for (size_t i = 0; i < IntToSize(tensor->ElementsNum()); ++i) {
data[i] = 1.0f;
}
return tensor;
}
// Create a float32 tensor which fills like np.arange(end).
tensor::TensorPtr CreateArangeFloatTensor(const std::vector<int64_t> &shape, float end) {
auto tensor = std::make_shared<tensor::Tensor>(kNumberTypeFloat32, shape);
auto tensor_elem_num = tensor->ElementsNum();
if (end < 0 || ceil(end) != tensor_elem_num) {
MS_LOG(EXCEPTION) << "Cannot arange the array with end = " << end;
}
float *data = reinterpret_cast<float *>(tensor->data_c());
for (size_t i = 0; i < IntToSize(tensor_elem_num); ++i) {
data[i] = i * 1.0f;
}
return tensor;
}
// Create an empty graph.
FuncGraphPtr CreateFuncGraph() {
static int id = 0;
auto graph = std::make_shared<FuncGraph>();
graph->debug_info()->set_name("FuncGraph_" + std::to_string(id++));
return graph;
}
// Create a parameter for a graph according to the tensor input.
ParameterPtr CreateAndAddParameter(const FuncGraphPtr &graph, const tensor::TensorPtr &input) {
ParameterPtr param = graph->add_parameter();
param->set_abstract(input->ToAbstract());
return param;
}
// Create a weight parameter for a graph according to the tensor input.
ParameterPtr CreateAndAddWeightParameter(const FuncGraphPtr &graph, const tensor::TensorPtr &input,
const std::string &name) {
ParameterPtr param = graph->AddWeightParameter(name);
param->set_abstract(input->ToAbstract());
return param;
}
// Create the `input0` value node of a cnode, the primitive info is in the `input0`.
ValueNodePtr CreatePrimitiveValueNode(const std::string &op_name) {
auto prim = std::make_shared<Primitive>(op_name);
return NewValueNode(prim);
}
// Create a CNode.
CNodePtr CreateCNode(const FuncGraphPtr &graph, const std::vector<AnfNodePtr> &inputs,
const std::unordered_map<std::string, ValuePtr> &attrs) {
auto cnode = graph->NewCNode(inputs);
auto prim = GetValueNode<PrimitivePtr>(cnode->input(0));
prim->SetAttrs(attrs);
return cnode;
}
// Compile a graph for cpu backend.
compile::FinalVMPtr CompileGraphForCpuBackend(const FuncGraphPtr &graph) {
auto backend = std::make_shared<compile::MsBackend>("ms", "CPU", 0);
const std::vector<PrimitivePtr> &cut_list = compile::GetMsNonlinearOps();
auto compile = std::make_shared<compile::CompileGraphs>(backend, cut_list);
compile::FinalVMPtr vm = compile->CompileAndLink(graph);
return vm;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/ginfung/ms_cxx_graph_api_example.git
git@gitee.com:ginfung/ms_cxx_graph_api_example.git
ginfung
ms_cxx_graph_api_example
ms_cxx_graph_api_example
master

搜索帮助