in optimum/graphcore/modeling_utils.py [0:0]
def to_pipelined(model: nn.Module, ipu_config: IPUConfig, force: bool = False):
model_cls = model.get_base_model().__class__ if isinstance(model, PeftModel) else model.__class__
pipelined_cls = _PRETRAINED_TO_PIPELINED_REGISTRY.get(model_cls, None)
if pipelined_cls is not None and isinstance(model, PeftModel):
return pipelined_cls.from_peft(model, ipu_config)
elif pipelined_cls is not None:
return pipelined_cls.from_transformers(model, ipu_config)
# If the user defined his/her own model and already subclassed from PipelineMixin. I.e., the model is already pipelined.
elif isinstance(model, PipelineMixin):
clone = copy.deepcopy(model)
clone.ipu_config = copy.deepcopy(ipu_config)
return clone
else:
if force:
logger.warning(
f"No pipelined version exists for {model_cls.__name__}, creating it dynamically so it might not work as expected."
)
pipelined_cls = type(f"Pipelined{model_cls.__name__}", (model_cls, PipelineMixin), {})
return pipelined_cls.from_model(model)
else:
raise KeyError(f"{model_cls.__name__} pipelined version not found in registry.")