Skip to content

Commit

Permalink
TVMC - a command line driver for TVM (apache#6112)
Browse files Browse the repository at this point in the history
* Introduce a command line driver to compile, run and tune models, using TVM graph runtime
 * Include tvmc tests and integrate tvmc with linting, testing and CI
 * RFC: https://discuss.tvm.ai/t/rfc-a-tvm-command-line-interface/5165


Co-authored-by: Marcus Shawcroft <[email protected]>
Co-authored-by: Matthew Barrett <[email protected]>
Co-authored-by: Dmitriy Smirnov <[email protected]>
Co-authored-by: Luke Hutton <[email protected]>
Co-authored-by: Giuseppe Rossini <[email protected]>
Co-authored-by: Matthew Barrett <[email protected]>
Co-authored-by: Elen Kalda <[email protected]>
Co-authored-by: Ramana Radhakrishnan <[email protected]>
Co-authored-by: Jeremy Johnson <[email protected]>
Co-authored-by: Ina Dobreva <[email protected]>

Co-authored-by: Marcus Shawcroft <[email protected]>
Co-authored-by: Matthew Barrett <[email protected]>
Co-authored-by: Dmitriy Smirnov <[email protected]>
Co-authored-by: Luke Hutton <[email protected]>
Co-authored-by: Giuseppe Rossini <[email protected]>
Co-authored-by: Elen Kalda <[email protected]>
Co-authored-by: Ramana Radhakrishnan <[email protected]>
Co-authored-by: Jeremy Johnson <[email protected]>
Co-authored-by: Ina Dobreva <[email protected]>
  • Loading branch information
10 people authored and Trevor Morris committed Aug 26, 2020
1 parent 4c2767f commit 9eec77b
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 0 deletions.
1 change: 1 addition & 0 deletions python/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ def get_package_data_files():
version=__version__,
description="TVM: An End to End Tensor IR/DSL Stack for Deep Learning Systems",
zip_safe=False,
entry_points={"console_scripts": ["tvmc = tvm.driver.tvmc.main:main"]},
install_requires=[
'numpy',
'scipy',
Expand Down
16 changes: 16 additions & 0 deletions python/tvm/driver/tvmc/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# 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.
24 changes: 24 additions & 0 deletions python/tvm/driver/tvmc/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 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.
"""
TVMC - TVM driver command-line interface
"""

from .main import main

if __name__ == "__main__":
main()
22 changes: 22 additions & 0 deletions python/tvm/driver/tvmc/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# 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.
"""
Common utility functions shared by TVMC modules.
"""

class TVMCException(Exception):
"""TVMC Exception"""
98 changes: 98 additions & 0 deletions python/tvm/driver/tvmc/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#!/usr/bin/env python

# 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.
"""
TVMC - TVM driver command-line interface
"""
import argparse
import logging
import sys

import pkg_resources

from tvm.driver.tvmc.common import TVMCException


REGISTERED_PARSER = []


def register_parser(make_subparser):
"""
Utility function to register a subparser for tvmc.
Functions decorated with `tvm.driver.tvmc.main.register_parser` will be invoked
with a parameter containing the subparser instance they need to add itself to,
as a parser.
Example
-------
@register_parser
def _example_parser(main_subparser):
subparser = main_subparser.add_parser('example', help='...')
...
"""
REGISTERED_PARSER.append(make_subparser)
return make_subparser


def _main(argv):
""" TVM command line interface. """

parser = argparse.ArgumentParser(
prog='tvmc',
formatter_class=argparse.RawDescriptionHelpFormatter,
description="TVM compiler driver",
epilog=__doc__,
)
parser.add_argument(
"-v", "--verbose", action="count", default=0, help="increase verbosity"
)
parser.add_argument(
"--version", action="store_true", help="print the version and exit"
)

subparser = parser.add_subparsers(title="commands")
for make_subparser in REGISTERED_PARSER:
make_subparser(subparser)

args = parser.parse_args(argv)
if args.verbose > 4:
args.verbose = 4

logging.getLogger().setLevel(40 - args.verbose * 10)

if args.version:
version = pkg_resources.get_distribution("tvm").version
sys.stdout.write("%s\n" % version)
return 0

assert hasattr(args, "func"), "Error: missing 'func' attribute for subcommand {0}".format(argv)

try:
return args.func(args)
except TVMCException as err:
sys.stderr.write("Error: %s\n" % err)
return 4

def main():
sys.exit(_main(sys.argv[1:]))

if __name__ == "__main__":
main()

0 comments on commit 9eec77b

Please sign in to comment.