Menu
About
Articles
Papers
Resume
Speaking
Uses
Consulting
Model Registry Pattern
A Design Pattern for Dynamic Model Management in Python
Registration and Instantiation Flow
1. Model Definition
class ModelRegistry:
_registry = {}
@classmethod
def register(cls, name):
def wrapper(model_cls):
cls._registry[name] =
model_cls
2. Define & Register Models
@ModelRegistry.register('resnet18')
class ResNet18(nn.Module):
def __init__(self, **kwargs):
super().__init__()
# model implementation
def forward(self, x):
return x
3. Model Factory Methods
@classmethod
def get_model(cls, name, **kwargs):
try:
model_cls = cls._registry[
name]
return model_cls(**kwargs)
except KeyError:
Advanced Usage Examples
Configuration-Driven
# Load from config.json
import json
with open('config.json') as f:
config = json.load(f)
model_name = config['model']
model = ModelRegistry.get_model(
name=model_name,
**config.get('params', {})
)
Plugin Architecture
# Load models dynamically
import glob, importlib
def load_plugins(
plugins_dir='plugins'
):
pattern = f'{plugins_dir}/*.py'
for path in glob.glob(pattern):
spec = importlib.util
.spec_from_file(path)
Command-Line Interface
# CLI with argparse
import argparse
parser = argparse.ArgumentParser(
description='Model Selection'
)
parser.add_argument(
'--model',
choices=list(
ModelRegistry._registry.keys()
)
Mastodon