def _initialize_graph_builder(self, training): """Creates a new OrtModuleGraphBuilder, initializes it and saves it to self._graph_builder""" # All initializer names along with user inputs are a part of the onnx graph inputs # since the onnx model was exported with the flag keep_initializers_as_inputs=True onnx_initializer_names = {p.name for p in self._onnx_model.graph.input} # TODO: PyTorch exporter bug: changes the initializer order in ONNX model initializer_names = [ name for name, _ in self._flattened_module.named_parameters() if name in onnx_initializer_names ] initializer_names_to_train = [ name for name, param in self._flattened_module.named_parameters() if param.requires_grad and name in onnx_initializer_names ] # Build and optimize the full graph grad_builder_config = C.OrtModuleGraphBuilderConfiguration() grad_builder_config.initializer_names = initializer_names grad_builder_config.initializer_names_to_train = initializer_names_to_train grad_builder_config.input_names_require_grad = self._input_info.require_grad_names grad_builder_config.build_gradient_graph = training grad_builder_config.graph_transformer_config = self._get_graph_transformer_config( ) grad_builder_config.loglevel = _logger.ortmodule_loglevel_to_onnxruntime_c_loglevel( self._loglevel) self._graph_builder = C.OrtModuleGraphBuilder() # It is assumed here that the order and names of the inputs and outputs are not modified by the backend in any way # and are kept as they appear in the exported onnx model. self._graph_builder.initialize(self._onnx_model.SerializeToString(), grad_builder_config)
def _initialize_graph_builder(self, training): """Creates a new OrtModuleGraphBuilder, initializes it and saves it to self._graph_builder""" # TODO: PyTorch exporter bug: changes the initializer order in ONNX model initializer_names = [name for name, _ in self._flattened_module.named_parameters()] initializer_names_to_train = [name for name, param in self._flattened_module.named_parameters() if param.requires_grad] # Build and optimize the full graph grad_builder_config = C.OrtModuleGraphBuilderConfiguration() grad_builder_config.initializer_names = initializer_names grad_builder_config.initializer_names_to_train = initializer_names_to_train grad_builder_config.input_names_require_grad = self._input_info.require_grad_names grad_builder_config.build_gradient_graph = training grad_builder_config.graph_transformer_config = C.GraphTransformerConfiguration() grad_builder_config.graph_transformer_config.propagate_cast_ops_level = self._propagate_cast_ops_level grad_builder_config.graph_transformer_config.propagate_cast_ops_allow = self._propagate_cast_ops_allow grad_builder_config.graph_transformer_config.allow_layer_norm_mod_precision = self._allow_layer_norm_mod_precision grad_builder_config.loglevel = {_logger.LogLevel.VERBOSE : C.Severity.VERBOSE, _logger.LogLevel.INFO : C.Severity.INFO, _logger.LogLevel.WARNING : C.Severity.WARNING, _logger.LogLevel.ERROR : C.Severity.ERROR, _logger.LogLevel.FATAL : C.Severity.FATAL}.get(self._loglevel, C.Severity.WARNING) self._graph_builder = C.OrtModuleGraphBuilder() self._graph_builder.initialize(self._onnx_model.SerializeToString(), grad_builder_config)
def _initialize_graph_builder(self, training): """Creates a new OrtModuleGraphBuilder, initializes it and saves it to self._graph_builder""" # TODO: PyTorch exporter bug: changes the initializer order in ONNX model initializer_names = [ name for name, _ in self._flattened_module.named_parameters() ] initializer_names_to_train = [ name for name, param in self._flattened_module.named_parameters() if param.requires_grad ] # Build and optimize the full graph grad_builder_config = C.OrtModuleGraphBuilderConfiguration() grad_builder_config.initializer_names = initializer_names grad_builder_config.initializer_names_to_train = initializer_names_to_train grad_builder_config.input_names_require_grad = self._input_info.require_grad_names grad_builder_config.build_gradient_graph = training grad_builder_config.graph_transformer_config = C.GraphTransformerConfiguration( ) grad_builder_config.graph_transformer_config.propagate_cast_ops_level = self._propagate_cast_ops_level grad_builder_config.graph_transformer_config.propagate_cast_ops_allow = self._propagate_cast_ops_allow self._graph_builder = C.OrtModuleGraphBuilder() self._graph_builder.initialize(self._onnx_model.SerializeToString(), grad_builder_config)
def _initialize_graph_builder(self, training): """Creates a new OrtModuleGraphBuilder, initializes it and saves it to self._graph_builder""" # All initializer names along with user inputs are a part of the onnx graph inputs # since the onnx model was exported with the flag keep_initializers_as_inputs=True onnx_initializer_names = { p.name for p in self._onnx_models.exported_model.graph.input } # TODO: PyTorch exporter bug: changes the initializer order in ONNX model initializer_names = [ name for name, _ in self._flattened_module.named_parameters() if name in onnx_initializer_names ] initializer_names_to_train = [ name for name, param in self._flattened_module.named_parameters() if param.requires_grad and name in onnx_initializer_names ] # Build and optimize the full graph grad_builder_config = C.OrtModuleGraphBuilderConfiguration() grad_builder_config.initializer_names = initializer_names grad_builder_config.initializer_names_to_train = initializer_names_to_train grad_builder_config.input_names_require_grad = self._input_info.require_grad_names grad_builder_config.build_gradient_graph = training grad_builder_config.graph_transformer_config = self._get_graph_transformer_config( ) grad_builder_config.enable_caching = self._enable_grad_acc_optimization grad_builder_config.loglevel = _logger.ortmodule_loglevel_to_onnxruntime_c_loglevel( self._debug_options.logging.log_level) grad_builder_config.use_memory_efficient_gradient = self._use_memory_efficient_gradient self._graph_builder = C.OrtModuleGraphBuilder() # It is assumed here that the order and names of the inputs and outputs are not modified by the backend in any way # and are kept as they appear in the exported onnx model. self._graph_builder.initialize( self._onnx_models.exported_model.SerializeToString(), grad_builder_config) # TODO: Explore ways to make self._graph_info.initializer_names and self._graph_info.initializer_names_to_train # a set (unordered_set in the backend) that does not require a copy on each reference. self._graph_initializer_names = set(initializer_names) self._graph_initializer_names_to_train = set( initializer_names_to_train) # Initializers can be cached and used since they are expected not to be re-instantiated # between forward calls. self._graph_initializers = [ param for name, param in self._flattened_module.named_parameters() if name in self._graph_initializer_names ]