Add a python tutorial of deploying tvm module with tvm runtime only (#4094)
authorLiangHao <hliangac@connect.ust.hk>
Thu, 10 Oct 2019 19:59:58 +0000 (03:59 +0800)
committerTianqi Chen <tqchen@users.noreply.github.com>
Thu, 10 Oct 2019 19:59:58 +0000 (12:59 -0700)
apps/howto_deploy/python_deploy.py [new file with mode: 0644]
apps/howto_deploy/run_example.sh

diff --git a/apps/howto_deploy/python_deploy.py b/apps/howto_deploy/python_deploy.py
new file mode 100644 (file)
index 0000000..6a32187
--- /dev/null
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Copyright (c) 2017 by Contributors
+# brief Example code on load and run TVM module.s
+# file python_deploy.py
+
+import tvm
+import numpy as np
+
+def verify(mod, fname):
+  # Get the function from the module
+  f = mod.get_function(fname)
+  # Use tvm.nd.array to convert numpy ndarray to tvm
+  # NDArray type, so that function can be invoked normally
+  N = 10 
+  x = tvm.nd.array(np.arange(N, dtype=np.float32))
+  y = tvm.nd.array(np.zeros(N, dtype=np.float32))
+  # Invoke the function
+  f(x, y)
+  np_x = x.asnumpy() 
+  np_y = y.asnumpy() 
+  # Verify correctness of function
+  assert(np.all([xi+1 == yi for xi, yi in zip(np_x, np_y)]))
+  print("Finish verification...")
+  
+
+if __name__ == "__main__":
+  # The normal dynamic loading method for deployment
+  mod_dylib = tvm.module.load("lib/test_addone_dll.so")
+  print("Verify dynamic loading from test_addone_dll.so")
+  verify(mod_dylib, "addone")
+  # There might be methods to use the system lib way in
+  # python, but dynamic loading is good enough for now.
index 4bf1066..6bbdc1f 100755 (executable)
@@ -25,5 +25,8 @@ export DYLD_LIBRARY_PATH=../../build:${DYLD_LIBRARY_PATH}
 echo "Run the deployment with all in one packed library..."
 lib/cpp_deploy_pack
 
-echo "Run the deployment with all in normal library..."
+echo "Run the cpp deployment with all in normal library..."
 lib/cpp_deploy_normal
+
+echo "Run the python deployment with all in normal library..."
+python python_deploy.py