lhallee commited on
Commit
ff66c71
·
verified ·
1 Parent(s): ac02e4e

Give this artifact's bridge its own config and model subclasses (FastPLMs#50)

Browse files

Artifacts share one FastPLMs runtime per process. Re-exported shared classes let one artifact's model class answer for another with the same config class, for example ESMFold2-300 built as ESMFold2Model after ESMFold2-Fast loaded. Only modeling_fastplms.py changes; the runtime bundle and weights are untouched. https://github.com/Synthyra/FastPLMs/issues/50

Files changed (1) hide show
  1. modeling_fastplms.py +28 -11
modeling_fastplms.py CHANGED
@@ -180,14 +180,31 @@ def _install_runtime():
180
  return package
181
 
182
  _install_runtime()
183
- _module_182 = _import_without_bytecode("fastplms.models.esm_plusplus.modeling_esm_plusplus")
184
- ESMplusplusConfig = _module_182.ESMplusplusConfig
185
- ESMplusplusConfig.__module__ = __name__
186
- ESMplusplusForMaskedLM = _module_182.ESMplusplusForMaskedLM
187
- ESMplusplusForMaskedLM.__module__ = __name__
188
- ESMplusplusForSequenceClassification = _module_182.ESMplusplusForSequenceClassification
189
- ESMplusplusForSequenceClassification.__module__ = __name__
190
- ESMplusplusForTokenClassification = _module_182.ESMplusplusForTokenClassification
191
- ESMplusplusForTokenClassification.__module__ = __name__
192
- ESMplusplusModel = _module_182.ESMplusplusModel
193
- ESMplusplusModel.__module__ = __name__
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  return package
181
 
182
  _install_runtime()
183
+
184
+ def _artifact_class(base, config_class=None):
185
+ """Subclass a shared runtime class so this artifact registers its own classes.
186
+
187
+ The base constructor is kept explicitly because Transformers turns every config
188
+ subclass into a dataclass, which would otherwise generate a new constructor.
189
+ """
190
+ namespace = {
191
+ "__module__": __name__,
192
+ "__qualname__": base.__name__,
193
+ "__doc__": base.__doc__,
194
+ "__init__": base.__init__,
195
+ }
196
+ base_config_class = getattr(base, "config_class", None)
197
+ if (
198
+ config_class is not None
199
+ and isinstance(base_config_class, type)
200
+ and issubclass(config_class, base_config_class)
201
+ ):
202
+ namespace["config_class"] = config_class
203
+ return type(base.__name__, (base,), namespace)
204
+
205
+ _module_204 = _import_without_bytecode("fastplms.models.esm_plusplus.modeling_esm_plusplus")
206
+ ESMplusplusConfig = _artifact_class(_module_204.ESMplusplusConfig)
207
+ ESMplusplusForMaskedLM = _artifact_class(_module_204.ESMplusplusForMaskedLM, config_class=ESMplusplusConfig)
208
+ ESMplusplusForSequenceClassification = _artifact_class(_module_204.ESMplusplusForSequenceClassification, config_class=ESMplusplusConfig)
209
+ ESMplusplusForTokenClassification = _artifact_class(_module_204.ESMplusplusForTokenClassification, config_class=ESMplusplusConfig)
210
+ ESMplusplusModel = _artifact_class(_module_204.ESMplusplusModel, config_class=ESMplusplusConfig)