Using the MLSimKit SDK Interactively (Notebooks, IPython)

You may use MLSimKit programmatically, without the CLI as a Pythom module.

To access your MLSimKit module from ipython, run:

% source .venv/bin/activate
% pip install ipython
% python -m IPython

Running the Surface Training Pipeline

The example below runs the Surface model end-to-end on the sample dataset.

#
# Setup preprocessing using the sample dataset manifest
#
from mlsimkit.learn.surface.schema import *
from mlsimkit.learn.surface.data import SurfaceDataset
from mlsimkit.learn.surface.preprocessing import run_preprocess

settings = PreprocessingSettings(
    manifest_path="tutorials/surface/sample/training.manifest",
    output_dir="notebook_example",
    manifest_base_relative_path="PackageRoot")

#
# Run preprocessing convert mesh inputs to training data
#
working_manifest = run_preprocess(
    settings,
    surface_variables=[SurfaceVariables(name='pMean')])

#
# Split the preprocessed manifest into train, validation and test sets
#
from mlsimkit.learn.manifest.schema import SplitSettings
from mlsimkit.learn.manifest import split_manifest

split_settings = SplitSettings(train_size=0.6, valid_size=0.2, test_size=0.2)
manifests = split_manifest(working_manifest, split_settings, settings.output_dir)

#
# Run training using the same settings as tutorials/surface/sample/training.yaml
#
from mlsimkit.learn.surface.schema.training import TrainingSettings
from mlsimkit.learn.surface.training import run_train
from mlsimkit.learn.common.training import make_accelerator

settings = TrainingSettings(
    train_manifest_path=manifests['train'],
    validation_manifest_path=manifests['validation'],
    training_output_dir="notebook_example/training_output",
    device="cpu",
    epochs=5,
    batch_size=1)

run_train(settings, make_accelerator(settings))

#
# Make predictions on the meshes in the test manifest
#
from mlsimkit.learn.surface.schema.inference import InferenceSettings
from mlsimkit.learn.surface.inference import run_predict

inference_settings = InferenceSettings(
    model_path="notebook_example/training_output/best_model.pt",
    manifest_path=manifests['test'],
    inference_results_dir="notebook_example/predictions",
    device="cpu")

run_predict(inference_settings)

You will now have training and predicted outputs. For example,

% find notebook_example/predictions
notebook_example/predictions
notebook_example/predictions/pMean_errors_by_geometry.csv
notebook_example/predictions/results
notebook_example/predictions/results/predicted_boundary_7_mapped.vtp
notebook_example/predictions/results/predicted_boundary_5_mapped.vtp
notebook_example/predictions/results/predicted_boundary_3_mapped.vtp
notebook_example/predictions/error_metrics.csv

To get the original vs. predict files, load the training or validation manifest into a dataset:

dataset = SurfaceDataset("notebook_example/validate.manifest", device='cpu')

# Original mesh file
print(dataset.data_files(0))
# prints ['.../datasets/ahmed-sample/mapped_vtps/boundary_6_mapped.vtp']

# Prediction mesh results
print(dataset.predicted_file(0))
# prints '.../notebook_example/training_output/best_model_predictions/validation/results/predicted_boundary_6_mapped.vtp'

To learn more, see Programmatic Dataset Interaction.