Execution plan
3.8 План исполнения ExecutionPlan¶
Для ускорения форвард-прохода DAG компилируется один раз в структуру ExecutionPlan:
| Поле | Смысл |
|---|---|
input_slots |
Пары (view_index, slot_index) для входных вершин |
merge_steps |
Упорядоченный список MergeNodeStep(dst, pool_h, pool_w, edges[]) |
output_slot |
Индекс слота выходной вершины |
output_pool_h/w |
Финальный целевой размер \((H_\text{out}, W_\text{out})\) |
is_empty |
Флаг «граф не исполняется» |
Каждый MergeNodeStep содержит список ConvEdgeStep(src_slot, conv_name) — ссылки на зарегистрированные nn.Conv2d модули.
Инвалидация кэша: при structural rebuild (split/add/remove/crossover) счётчик plan_version инкрементируется, что сбрасывает кэш forward runtime (WeakKeyDictionary).
PlannedForwardBody — отсоединённый nn.Module (weakref на родителя) для torch.compile / CUDA Graphs без циклических ссылок.
Сложность форварда: \(O(|E_\text{active}|)\) операций Conv2d + \(O(|V|)\) операций стека/среднего.