Thanks for the discussions. To begin with, I am not that attached to the particular choice of name. We can for example, decide to introduce another target kind ("hetero-target", "myawesome-target", "platform", "CompilationOption").
I think our discussion boils down to the following quenstion ## What can be called a "Target" in tvm Intuitively, to many users, target refers to the "target platform" or environment that they want to run the program on. In a typical clang target triple, the following elements can be part of a target: - ISA (x86, arm, riscv) - runtime library (musl, libc) - operation system env (windows, linux) - vendor Of course in most of the settings here target refers to a single device, usually with a single codegen path. These are targets at the leaf level. However, as we start to build compilers for ML. The "target" in users' mind is different. For example, I want to run my program as fast as possible on `aws/c4.4xlarge`, or `nvidia/jetson-nano`. Some of these "targets" already involves multiple codegen path(host code and device code). When we start to involve graph or vm for the high level program driver, the vm/graph/aot choice is another codegen path on the driving path of the program. As the field evolves, the concept of "target" can change further. Right now we are talking about a single SoC with multiple devices. What if we are interested in deploying onto the following distributed environment. ``` - machine0: - host: x86 - vdevice0: cuda - machine1: - host: arm - vdevice0: vulkan ``` We might also interested in the following byoc customization where we offload part of the computation to `byoc-myawesome-cuda` strategy, which needs a self-contained specification of host and library targets that makes use of cuda-graph runtime. We want to embed it in a vm runtime that invoke the byoc-myawesome-cuda as an opaque function. ``` - host: x86 - vdevice0: byoc-myawesome-cuda - host: x86 - runtime: cuda-graph - vdevice0: cuda - library: tensor-rt - vdevice1: cuda - runtime: vm ``` Can we call the above descriptions as "target"? From a UX's perspective they certainly can be called target. Since from user's perspective it is a specification of "target environtment". In the context of machine learning they certainly can usually go beyond a single codegen path. Another thing to note here is that some of these examples requires a level of compositionality that goes beyond one level. In the context of multi-machine setting, the setting per machine roughly maps to CompilationOption being used here. Similarly, in the case of `byoc-myawesome-cuda`, vdevice0 itself would benefit from its own runtime specification. Another concept(another target kind) is needed to introduce another concept in order to support the top-level composition. ## UX Benefit of a Target -- Tagging Besides the benefit of the compositionality, one major UX benefit of target is the ability to tag. It can be really complicated to manually specify a compositional compilatin option. In most cases, we want users to directly leverage pre-built tags. For example, build for nvidia/jetson-nano:cuda, build for `aws/c4.4xlarge`, build for `arm/soc-name:aot`(that directly implies unpacked_api). These tags create short hands for us to setup the compositional configurations. The ability to let build function takes in tags that quickly maps to both codegen, runtime, and library configurations would greatly improve overall user experiences. Making CompilationOption would allow us to reuse this feature effectively and recursively. ## Discussions The main discussion point here is what is the scope of target. As we can see that: - A0: On one hand, we can say that the configuration strictly follows a two-level structure. Where target is on the leaf, specifies a single codegen path. While we use a separate name for the top-level compositions. - A1: On the other hand, we can see the need of: - More than two levels of compositions - The UX need to reuse tagging mechanism and simplify users' inputs to the compiler. >From a two-level compositional view. Personally I think reusing Target for >CompilationOption is not strictly more complicated, modulo the right kind naming. While the needs in ML can certainly go beyond that. Which makes me think going for target compositionality is not a bad idea. --- [Visit Topic](https://discuss.tvm.apache.org/t/pre-rfc-compilation-configuration-representation/11372/8) to respond. You are receiving this because you enabled mailing list mode. To unsubscribe from these emails, [click here](https://discuss.tvm.apache.org/email/unsubscribe/969166766f1ec0b4bd1cc5670480ce01237f7f722f09616c8be941f7417952a7).