Prepare your model
What you supply
Two functions. Nothing gets rewritten:
def make_model(): # a fresh, untrained model
return LogisticRegression(max_iter=1000)
def load_data(partition_id, num_partitions): # this client's local data
...
return x_train, y_train, x_test, y_test
- scikit-learn (linear estimators) and PyTorch (
nn.Module) are supported. - The factory may be a plain function, a
@staticmethod, or thenn.Moduleclass itself. If it needs configuration, the wizard asks you for it — a config-driven model is normal, not an edge case. load_datamay take(partition_id, num_partitions)or not. If it doesn't, every client loads the same thing unless your arguments say otherwise, and the wizard tells you so.
Analysis and validation
Upload a zip of your code. It is analyzed statically, never executed, and the generated adapter is validated in a locked-down sandbox (2 simulated clients, synthetic data, no network) before you get an artifact. A model that only looks right cannot ship.