Thanks all for the valuable feedback. Here is the summary of the finalized RFC:
Interface
When extracting auto_scheduler tasks, users simply call extract_tasks.
extract_tasks now has an optional flag include_simple_task (default False). When set, each Relay function, including the one with only injective ops, becomes an auto_scheduler task.
When building a model, users need to use with tvm.transform.PassContext(config={"relay.backend.use_auto_scheduler": True}) to apply auto_scheduler tuning logs.
Changes in Compile Engine
Compile engine checks relay.backend.use_auto_scheduler to determine whether to use auto_scheduler schedules. If true, then compile engine calls auto_schedule_topi.
In the task extraction mode, auto_schedule_topi extracts a task and returns an initial schedule. Since we are not going to actually compile the model in this mode, whether the initial schedule is valid doesn’t matter.
In the build mode, auto_schedule_topi queries the auto_scheduler tuning log for the given workload. If success, then it returns the tuned schedule; otherwise it returns None. In this case, compile engine falls back to use TOPI schedule (with AutoTVM tuning logs if provided) for this workload to make sure it can be compiled and executed. As a result, mixing the use of auto_scheduler and AutoTVM schedules is also supported.