samba.utils¶
init_output_grads¶
- init_output_grads(output_tensors: List[str], unspecified_tensor_grad: List[str] = [], customized_tensors_dict: Dict[str, Tensor | SambaTensor] = {}, is_variable_batch_size=False) None ¶
Initializes tensor gradient values to those provided by the user. If values are unspecified, initializes to a tensor of ones.
- Parameters:
output_tensors – Output SambaTensors, usually all of the tensors from the model
unspecified_tensor_grad – List of tensor names whose grad values are unspecified but need to be initialized
customized_tensors_dict – Dictionary that maps tensor names to the corresponding gradient to initialize for initialization by the user
is_variable_batch_size – If the grad is variable batch size
utils¶
- trace_graph(model: torch.nn.Module | onnx.onnx_ml_pb2.ModelProto, inputs: Tuple[SambaTensor, ...] | List[SambaTensor], optim: torch.optim.Optimizer | List[torch.optim.Optimizer] | None = None, init_output_grads: bool = True, loss_indices: List[Tuple[int]] | None = None, pef: str = '', mapping: str = 'section', data_parallel_mode: str = 'normal', transfer_device: bool = True)¶
Traces a graph when running an app to initialize the model weights and input/output tensors on the device.
- Parameters:
model – the model to be traced
inputs – a list of input tensors to the
model
optim – if set, initializes the state of all optimizers on the device
init_output_grads – if True, initializes output gradients on device
loss_indices – The indices of the model outputs that are loss tensors. For example, if
outputs=[out0, out1, loss0, loss1]
, then specifyloss_indices=[2, 3]
. If not specified, the compiler assumes that all model output tensors are loss tensors and attempts backpropagation from all output tensors. Defaults toNone
.pef – path to the compiled PEF file
mapping –
the graph mapping method to use. The methods are:
'section'
: the normal mapping method where each section is individually mapped onto the RDU in order to run large models that cannot fit onto one RDU. This mapping mode is used for most apps.'spatial'
: an extreme case of model parallel where both forward and backward graphs are mapped onto the RDU at the same time. Section swapping is not required and we can exploit the fast SRAM on-chip bandwidth. However, this mapping mode is only feasible for small models.
Defaults to
'section'
.data_parallel_mode –
the data parallel method to use. Should be what is passed to
SambaSession.run()
. Supported methods are:'normal'
: executes the schedule specified in the PEF in order.'inorder'
: runs with gradient synchronization overlap, where gradient synchronization across replicas can occur in parallel. The device runs sections in the order of the schedule in the PEF.'optimal'
: runs with gradient synchronization overlap, where gradient synchronization across replicas can occur in parallel. The device can perform optimizer updates and gradient normalization computations sections out-of-order for better performance.
Defaults to
'normal'
.transfer_device – if
True
, transfers initialized tensors from host memory to the device. Otherwise, tensors are not automatically transferred to the device, so the user has more flexibility in controlling which tensors are transferred and when they are transferred. Defaults toTrue
.
- Returns:
The traced output tensors. The traced output tensors can also be accessed via
model.output_tensors
.
- trace_multigraph(graph: Module, inputs: SambaTensor | List[SambaTensor], optimizers: List[Optimizer] | None = None, init_output_grads: bool | None = None, mapping: str = '', trace_prefix: str | None = None) Tuple[SambaTensor, ...] ¶
New in version 1.18.
The function for tracing graphs in the multigraph feature. Traces a
graph
when running an app to initialize the graph’s weights and input/output tensors on device. Calltrace_multigraph()
only once for each graph. Returns a handle to the output tensors ofgraph
.- Parameters:
graph – the graph to trace.
inputs – the graph’s input tensors.
optimizers – graph’s optimizers. Defaults to
None
.init_output_grads – whether to initialize output gradients. Defaults to
None
.mapping – the graph mapping method to use. See
trace_graph()
for details. Defaults to “”.trace_prefix – append a prefix to SambaFlow Operation names. This is useful to distinguish which SambaGraph a particular operator belongs to.