This is a companion post to three smaller RFCs which I’ve pushed to tvm-rfcs:
- Command Line Composition from Internal Registry
- Migrating Target Attributes to IRModule
- Command Line Configuration Files
This is a series of inter-related RFCs which improve the user experience of tvmc by expanding the --target
argument from:
tvmc compile --target="cmsisnn, c -runtime=c -executor=aot --unpacked-api=1"
to:
tvmc compile \
--target=cmsisnn,c \
--runtime=c \
--executor=aot \
--executor-aot-unpacked-api=1
Which provides a more straight forward and compelling command line experience for users approaching TVM for the first time. To do this, we need to relocate some pieces within TVM which were contributed with the AOT executor, an example of this is the --executor
flag which resides within the Target
currently but in practice the effects it has are broader than the Target
itself.
Command Line Composition from Internal Registry
The first RFC Command Line Composition from Internal Registry, proposes using the Target
registry and populate command line arguments from it, taking:
TVM_REGISTER_TARGET_KIND("c", kDLCPU)
.add_attr_option<String>("mcpu")
And allowing compose-able command line arguments:
tvmc --target=c --target-c-mcpu=cortex-m3
This enables users to chain together parameters as they experiment and get feedback from tvmc
regarding appropriate inputs for each of the Target
options.
Migrating Target Attributes to IRModule
One major problem this surfaces, is having the current executor
flag combined with the Target
, it blocks a straight forward translation of the TargetKind
registry - if the executor is left in place at this point, you’d have nested arguments for the executor such as:
tvmc --target=c --target-c-executor=aot --target-c-unpacked-api=1
And other arguments which don’t necessarily relate to a specific target such as the runtime; in order to rectify this, the second RFC Migrating Target Attributes to IRModule proposes moving the Executor
configuration out of the Target
and into the attrs
on the IRModule
(introduced in this PR). By moving to attrs
on an IRModule
, these correctly apply to all Target
s and functions within the compilation.
Command Line Configuration Files
The final RFC Command Line Configuration Files, is designed to help accommodate this increase in arguments and provide a place to collect together standard configurations. So that rather than having to re-type:
tvmc compile \
--target=cmsisnn,c \
--runtime=c \
--executor=aot \
--executor-aot-unpacked-api=1
You can instead have a board configuration, or system configuration, such as:
tvmc compile --config=my_board my_model.tflite
Or even better, if you just want to start using tvmc
as a new user:
tvmc compile my_model.tflite
How to get involved
I’d suggest replying on the RFC that most interests you directly in tvm-rfcs but your feedback is always welcomed here