Files
2026-07-13 13:18:33 +08:00

73 lines
2.6 KiB
Python

# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0
# DeepSpeed Team
from typing import List, Tuple
import torch
from torch.fx import GraphModule
from ..util import get_deepcompile_handle
from ..fx import (add_postprocess, move_primals_to_head, _make_node_meta, add_end_backward,
replace_reduce_outputs_with_none, should_release_reduce_buckets)
NAME = "zero1_compile"
def add_z1_reduce_fw(gm: GraphModule, graph_id: int, profiling_results, param_manager, use_z2=False) -> GraphModule:
dc = get_deepcompile_handle()
param_indices = profiling_results[graph_id].param_indices
# Need this before profiling
if use_z2:
dc.register_graph_z2(graph_id, [v[1] for v in param_indices])
else:
dc.register_graph_z1(graph_id, [v[1] for v in param_indices])
return gm
def add_z1_reduce_bw(gm: GraphModule, graph_id: int, graph_order: List[Tuple[int, bool]],
param_manager) -> GraphModule:
graph = gm.graph
pm = param_manager[graph_id]
_, param_name_to_grad = pm.get_bwd_mapping(graph)
for param_name in pm.param_names:
grad_node = param_name_to_grad[param_name]
assert param_name in pm.ds_ids, f"param_name={param_name} not in ds_ids"
ds_id = pm.ds_ids[param_name]
new_node = add_postprocess(graph,
grad_node,
torch.ops.dc.reduce_grad.default,
extra_args=[graph_id, ds_id],
name=f"reduce_param_{param_name}",
meta=_make_node_meta(grad_node, param_name, True))
new_node.meta["val"] = None
gm.graph = move_primals_to_head(graph)
add_end_backward(gm.graph, graph_id, should_release_reduce_buckets(graph_order, graph_id))
replace_reduce_outputs_with_none(gm.graph)
return gm
def add_z1_reduce(gm: GraphModule, graph_id: int, graph_order: List[Tuple[int, bool]], profiling_results,
create_inputs_fn, mem_budget: float, param_manager, bwd: bool) -> GraphModule:
if bwd:
return add_z1_reduce_bw(gm, graph_id, graph_order, param_manager)
return add_z1_reduce_fw(gm, graph_id, profiling_results, param_manager, use_z2=False)
def add_z2_reduce(gm: GraphModule, graph_id: int, graph_order: List[Tuple[int, bool]], profiling_results,
create_inputs_fn, mem_budget: float, param_manager, bwd: bool) -> GraphModule:
if bwd:
return add_z1_reduce_bw(gm, graph_id, graph_order, param_manager)
return add_z1_reduce_fw(gm, graph_id, profiling_results, param_manager, use_z2=True)