Commit d781a57f by Tianqi Chen

[RUNTIME] Minimum runtime module (#31)

parent 343c19a5
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
* All in one runtime * All in one runtime
* \file nnvm_runtime.cc * \file nnvm_runtime.cc
*/ */
/*
#include "../src/core/graph.cc" #include "../src/core/graph.cc"
#include "../src/core/node.cc" #include "../src/core/node.cc"
#include "../src/core/pass.cc" #include "../src/core/pass.cc"
#include "../src/core/op.cc" #include "../src/core/op.cc"
#include "../src/pass/saveload_json.cc" #include "../src/pass/saveload_json.cc"
#include "../src/runtime/graph_executor.cc" #include "../src/runtime/graph_executor.cc"*/
#include "../src/runtime/graph_runtime.cc"
...@@ -335,8 +335,9 @@ nnvm::Graph GraphFuseCompile(nnvm::Graph g) { ...@@ -335,8 +335,9 @@ nnvm::Graph GraphFuseCompile(nnvm::Graph g) {
for (uint32_t nid = 0; nid < idx.num_nodes(); ++nid) { for (uint32_t nid = 0; nid < idx.num_nodes(); ++nid) {
const auto& inode = idx[nid]; const auto& inode = idx[nid];
if (inode.source->is_variable()) { if (inode.source->is_variable()) {
// only copy over name since that is sufficient.
nnvm::NodePtr np = nnvm::Node::Create(); nnvm::NodePtr np = nnvm::Node::Create();
np->attrs = inode.source->attrs; np->attrs.name = inode.source->attrs.name;
old_new[nid] = np; old_new[nid] = np;
continue; continue;
} }
......
...@@ -97,8 +97,8 @@ size_t GraphHash(const Graph& graph) { ...@@ -97,8 +97,8 @@ size_t GraphHash(const Graph& graph) {
for (uint32_t nid = 0; nid < idx.num_nodes(); ++nid) { for (uint32_t nid = 0; nid < idx.num_nodes(); ++nid) {
const IndexedGraph::Node& inode = idx[nid]; const IndexedGraph::Node& inode = idx[nid];
// Use name instad op address so it is deterministic across runs // Use name instad op address so it is deterministic across runs
key = dmlc::HashCombine(key, inode.source->op()p);
if (inode.source->is_variable()) continue; if (inode.source->is_variable()) continue;
key = dmlc::HashCombine(key, inode.source->op()->name);
hash_temp.clear(); hash_temp.clear();
for (const auto& kv : GetAttrDict(inode.source->attrs)) { for (const auto& kv : GetAttrDict(inode.source->attrs)) {
hash_temp.push_back(dmlc::HashCombine(str_hash(kv.first), kv.second)); hash_temp.push_back(dmlc::HashCombine(str_hash(kv.first), kv.second));
......
...@@ -299,7 +299,6 @@ inline void TVMOpParamParser(nnvm::NodeAttrs* attrs) { ...@@ -299,7 +299,6 @@ inline void TVMOpParamParser(nnvm::NodeAttrs* attrs) {
attrs->parsed = std::move(param); attrs->parsed = std::move(param);
} }
DMLC_REGISTER_PARAMETER(TVMOpParam);
NNVM_REGISTER_OP(tvm_op) NNVM_REGISTER_OP(tvm_op)
.set_attr_parser(TVMOpParamParser) .set_attr_parser(TVMOpParamParser)
...@@ -328,12 +327,12 @@ tvm::runtime::Module RuntimeCreate(std::string sym_json, ...@@ -328,12 +327,12 @@ tvm::runtime::Module RuntimeCreate(std::string sym_json,
return tvm::runtime::Module(exec); return tvm::runtime::Module(exec);
} }
TVM_REGISTER_GLOBAL("nnvm.runtime.create") TVM_REGISTER_GLOBAL("nnvm.runtime.createx")
.set_body([](TVMArgs args, TVMRetValue *rv) { .set_body([](TVMArgs args, TVMRetValue *rv) {
*rv = RuntimeCreate(args[0], args[1], args[2], args[3]); *rv = RuntimeCreate(args[0], args[1], args[2], args[3]);
}); });
TVM_REGISTER_GLOBAL("nnvm.runtime.remote_create") TVM_REGISTER_GLOBAL("nnvm.runtime.remote_createx")
.set_body([](TVMArgs args, TVMRetValue *rv) { .set_body([](TVMArgs args, TVMRetValue *rv) {
void* mhandle = args[1]; void* mhandle = args[1];
*rv = RuntimeCreate(args[0], *rv = RuntimeCreate(args[0],
......
...@@ -17,33 +17,11 @@ ...@@ -17,33 +17,11 @@
#include <nnvm/pass.h> #include <nnvm/pass.h>
#include <vector> #include <vector>
#include <string> #include <string>
#include "./graph_runtime.h"
namespace nnvm { namespace nnvm {
namespace runtime { namespace runtime {
/*! \brief Magic number for NDArray file */
constexpr uint64_t kTVMNDArrayMagic = 0xDD5E40F096B4A13F;
/*! \brief Magic number for NDArray list file */
constexpr uint64_t kTVMNDArrayListMagic = 0xF7E58D4F05049CB7;
/*! \brief DLPack compatible data types */
using DLTypeVector = std::vector<DLDataType>;
/*! \brief operator attributes about tvm op */
struct TVMOpParam : public dmlc::Parameter<TVMOpParam> {
std::string func_name;
uint32_t num_inputs;
uint32_t num_outputs;
bool flatten_data;
DMLC_DECLARE_PARAMETER(TVMOpParam) {
DMLC_DECLARE_FIELD(func_name);
DMLC_DECLARE_FIELD(num_inputs).set_default(1);
DMLC_DECLARE_FIELD(num_outputs).set_default(1);
DMLC_DECLARE_FIELD(flatten_data).set_default(false);
}
};
/*! /*!
* \brief TVM Graph Executor. * \brief TVM Graph Executor.
* This is a minimum graph executor, embedded in TVM runtime * This is a minimum graph executor, embedded in TVM runtime
......
/*!
* Copyright (c) 2017 by Contributors
*
* Runtime module for graph deployment.
*
* \file graph_executor.h
*/
#ifndef NNVM_RUNTIME_GRAPH_RUNTIME_H_
#define NNVM_RUNTIME_GRAPH_RUNTIME_H_
#include <dmlc/parameter.h>
#include <string>
namespace nnvm {
namespace runtime {
/*! \brief Magic number for NDArray file */
constexpr uint64_t kTVMNDArrayMagic = 0xDD5E40F096B4A13F;
/*! \brief Magic number for NDArray list file */
constexpr uint64_t kTVMNDArrayListMagic = 0xF7E58D4F05049CB7;
/*! \brief operator attributes about tvm op */
struct TVMOpParam : public dmlc::Parameter<TVMOpParam> {
std::string func_name;
uint32_t num_inputs;
uint32_t num_outputs;
uint32_t flatten_data;
DMLC_DECLARE_PARAMETER(TVMOpParam) {
DMLC_DECLARE_FIELD(func_name);
DMLC_DECLARE_FIELD(num_inputs).set_default(1);
DMLC_DECLARE_FIELD(num_outputs).set_default(1);
DMLC_DECLARE_FIELD(flatten_data).set_default(0);
}
};
} // namespace runtime
} // namespace nnvm
#endif // NNVM_RUNTIME_GRAPH_RUNTIME_H_
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment