You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@singa.apache.org by wa...@apache.org on 2015/12/10 15:05:12 UTC
[11/12] incubator-singa git commit: SINGA-108 Add Python wrapper to
singa
SINGA-108 Add Python wrapper to singa
Add a new python API -- InitLog(char* log) to initialize singa logs.
The related code is also added in driver.h and driver.cc.
Please test via the guidance in last commit.
Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/9aaba610
Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/9aaba610
Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/9aaba610
Branch: refs/heads/master
Commit: 9aaba610df0a51471f4933a1c1a7577685af6068
Parents: be0f179
Author: xiezl <xi...@comp.nus.edu.sg>
Authored: Thu Dec 10 21:40:13 2015 +0800
Committer: xiezl <xi...@comp.nus.edu.sg>
Committed: Thu Dec 10 21:40:13 2015 +0800
----------------------------------------------------------------------
include/singa/driver.h | 7 ++++++
src/driver.cc | 5 +++++
tool/python/singa.py | 1 +
tool/python/singa/driver.i | 3 ++-
tool/python/singa/driver.py | 1 +
tool/python/singa/driver_wrap.cxx | 39 +++++++++++++++++++++++++++++++++-
tool/python/singa/generatepy.sh | 4 ++--
7 files changed, 56 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/include/singa/driver.h
----------------------------------------------------------------------
diff --git a/include/singa/driver.h b/include/singa/driver.h
index 1c73db1..f28f8c6 100644
--- a/include/singa/driver.h
+++ b/include/singa/driver.h
@@ -46,6 +46,13 @@ class Driver {
*/
void Init(int argc, char** argv);
/**
+ * Init SINGA LOG
+ * Used for python binding. Users can also directly call it as a C++ API.
+ * - init glog with given parameters
+ *
+ */
+ void InitLog(char *arg);
+ /**
* Update job configuration and call Train(const JobProto&) to start the
* training.
*
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/src/driver.cc
----------------------------------------------------------------------
diff --git a/src/driver.cc b/src/driver.cc
index 816e0df..4ffd9b1 100644
--- a/src/driver.cc
+++ b/src/driver.cc
@@ -150,6 +150,11 @@ void Driver::Init(int argc, char **argv) {
RegisterParamGenerator<UniformSqrtFanInOutGen>(kUniformSqrtFanInOut);
}
+void Driver::InitLog(char* arg)
+{
+ google::InitGoogleLogging(arg);
+}
+
void Driver::Train(bool resume, const std::string str){
JobProto job_conf;
job_conf.ParseFromString(str);
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/tool/python/singa.py
----------------------------------------------------------------------
diff --git a/tool/python/singa.py b/tool/python/singa.py
index 6d03331..c179192 100755
--- a/tool/python/singa.py
+++ b/tool/python/singa.py
@@ -38,5 +38,6 @@ if __name__ == '__main__':
Merge(s,j)
b = j.SerializeToString()
d = driver.Driver()
+ d.InitLog(sys.argv[0])
d.Init(sys.argv)
d.Train(False,b)
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/tool/python/singa/driver.i
----------------------------------------------------------------------
diff --git a/tool/python/singa/driver.i b/tool/python/singa/driver.i
index 0054943..56599b6 100644
--- a/tool/python/singa/driver.i
+++ b/tool/python/singa/driver.i
@@ -27,7 +27,7 @@
%include "argcargv.i"
%apply (int ARGC, char **ARGV) { (int argc, char **argv) }
%{
-#include "../include/singa/driver.h"
+#include "singa/driver.h"
%}
namespace singa{
@@ -36,6 +36,7 @@ class Driver{
public:
void Train(bool resume, const std::string job_conf);
void Init(int argc, char **argv);
+void InitLog(char* arg);
};
}
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/tool/python/singa/driver.py
----------------------------------------------------------------------
diff --git a/tool/python/singa/driver.py b/tool/python/singa/driver.py
index f84df9c..c5f3b4f 100644
--- a/tool/python/singa/driver.py
+++ b/tool/python/singa/driver.py
@@ -106,6 +106,7 @@ class Driver(_object):
__repr__ = _swig_repr
def Train(self, *args): return _driver.Driver_Train(self, *args)
def Init(self, *args): return _driver.Driver_Init(self, *args)
+ def InitLog(self, *args): return _driver.Driver_InitLog(self, *args)
def __init__(self):
this = _driver.new_Driver()
try: self.this.append(this)
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/tool/python/singa/driver_wrap.cxx
----------------------------------------------------------------------
diff --git a/tool/python/singa/driver_wrap.cxx b/tool/python/singa/driver_wrap.cxx
index 9ff35e9..99756f1 100644
--- a/tool/python/singa/driver_wrap.cxx
+++ b/tool/python/singa/driver_wrap.cxx
@@ -3413,7 +3413,7 @@ SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val)
#include <vector>
-#include "../include/singa/driver.h"
+#include "singa/driver.h"
SWIGINTERN int
@@ -3605,6 +3605,9 @@ SWIG_AsArgcArgv(PyObject *input,
}
}
+
+
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -4543,6 +4546,39 @@ fail:
}
+SWIGINTERN PyObject *_wrap_Driver_InitLog(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ singa::Driver *arg1 = (singa::Driver *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:Driver_InitLog",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Driver, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Driver_InitLog" "', argument " "1"" of type '" "singa::Driver *""'");
+ }
+ arg1 = reinterpret_cast< singa::Driver * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Driver_InitLog" "', argument " "2"" of type '" "char *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ (arg1)->InitLog(arg2);
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_Driver(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
singa::Driver *result = 0 ;
@@ -4606,6 +4642,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_VARARGS, NULL},
{ (char *)"Driver_Train", _wrap_Driver_Train, METH_VARARGS, NULL},
{ (char *)"Driver_Init", _wrap_Driver_Init, METH_VARARGS, NULL},
+ { (char *)"Driver_InitLog", _wrap_Driver_InitLog, METH_VARARGS, NULL},
{ (char *)"new_Driver", _wrap_new_Driver, METH_VARARGS, NULL},
{ (char *)"delete_Driver", _wrap_delete_Driver, METH_VARARGS, NULL},
{ (char *)"Driver_swigregister", Driver_swigregister, METH_VARARGS, NULL},
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/9aaba610/tool/python/singa/generatepy.sh
----------------------------------------------------------------------
diff --git a/tool/python/singa/generatepy.sh b/tool/python/singa/generatepy.sh
index 5b224f9..22176a8 100755
--- a/tool/python/singa/generatepy.sh
+++ b/tool/python/singa/generatepy.sh
@@ -22,8 +22,8 @@
#!/usr/bin/env bash
#The following commands are only for developers adding new py apis.
swig -c++ -python driver.i
-g++ -fPIC /../../../src/driver.cc driver_wrap.cxx -shared -o _driver.so \
+g++ -fPIC ../../../src/driver.cc driver_wrap.cxx -shared -o _driver.so \
-L../../../.libs/ -lsinga -DMSHADOW_USE_CUDA=0 \
-DMSHADOW_USE_CBLAS=1 -DMSHADOW_USE_MKL=0 -std=c++11 \
- -I/../../../include \
+ -I../../../include \
-I/usr/include/python2.7/