in optimum/neuron/modeling_diffusion.py [0:0]
def _load_models_to_neuron(submodels, models_on_both_cores=None, models_on_a_single_core=None):
# loading models to both cores, eg. unet, transformer.
if models_on_both_cores:
for model_name in models_on_both_cores:
submodel_paths = submodels[model_name]
# for the case of multiple controlnets the path could be a list
if not isinstance(submodel_paths, list):
submodel_paths = [submodel_paths]
submodels_list = []
for submodel_path in submodel_paths:
if submodel_path is not None and submodel_path.is_file():
submodel = NeuronTracedModel.load_model(
submodel_path, to_neuron=False
) # No need to load to neuron manually when dp
submodel = torch_neuronx.DataParallel(
submodel,
[0, 1],
set_dynamic_batching=dynamic_batch_size,
)
submodels_list.append(submodel)
if submodels_list:
submodels[model_name] = submodels_list if len(submodels_list) > 1 else submodels_list[0]
else:
submodels[model_name] = None
# loading models to a single core, eg. text encoders, vae.
if models_on_a_single_core:
for model_name in models_on_a_single_core:
submodel_paths = submodels[model_name]
# for the case of multiple controlnets the path could be a list
if not isinstance(submodel_paths, list):
submodel_paths = [submodel_paths]
submodels_list = []
for submodel_path in submodel_paths:
if submodel_path is not None and submodel_path.is_file():
submodel = NeuronTracedModel.load_model(submodel_path, to_neuron=to_neuron)
submodels_list.append(submodel)
if submodels_list:
submodels[model_name] = submodels_list if len(submodels_list) > 1 else submodels_list[0]
else:
submodels[model_name] = None
return submodels