Runtime Scaling for Large Datasets

Hi,

We are running ShapeWorks on datasets containing thousands of shapes and have noticed a cubic runtime growth with the number of shapes, and 100 iterations can take several days. Could you please share any insights into the potential bottleneck, and how we could accelerate the optimization for large-scale datasets if possible?

The main process appears to use only one CPU core (%CPU around 99.7%) most of the time:

shapeworks optimize --progress --name ../ssm/custom_multiscale.swproj

However, when running it on smaller datasets, we observe higher CPU utilization and more frequent use of multiple cores. This makes us wonder whether the single-core behavior for larger datasets is expected, or whether it could be improved through ways such as configuration changes.

The swproj configuration file (for ShapeWorks-6.6.1, incremental optimization) is

{

"data": \[

    {

        "name": "",

        "notes": "",

        "shape_1": "../seg/2984739_sag_3d_pd_space__0\_.stl",

        "landmarks_file_1": "custom_multiscale_particles/2984739_sag_3d_pd_space__0\_.stl_local.particles",

        "groomed_1": "groomed/meshes/2984739_sag_3d_pd_space__0\_.stl.vtk",

        "alignment_1": "0.991719 -0.014045 0.017912 -0.118646 0.013786 0.991780 0.014405 -0.048738 -0.018112 -0.014152 0.991714 -0.381316 0.000000 0.000000 0.000000 1.000000",

        "fixed": "no"

    },

    ...

\],

"groom": {

    "1": {}

},

"optimize": {

    "number_of_particles": "256",

    "use_normals": "0",

    "normals_strength": "10",

    "checkpointing_interval": "1000",

    "keep_checkpoints": "0",

    "iterations_per_split": "0",

    "optimization_iterations": "1000",

    "starting_regularization": "1000",

    "ending_regularization": "10",

    "relative_weighting": "1",

    "initial_relative_weighting": "0.05",

    "procrustes": "1",

    "procrustes_interval": "10",

    "procrustes_scaling": "1",

    "save_init_splits": "0",

    "verbosity": "0",

    "multiscale": "0",

    "multiscale_particles": "256",

    "use_landmarks": "1"

},

"studio": {},

"project": {

    "version": "2"

},

"analysis": {},

"deepssm": {},

"landmarks": \[\]

}

Thank you very much for your time. We would greatly appreciate any guidance or recommendations you may have.

Yes, that’s an accurate assessment. For the optimization-only phase, the runtime at N>1000 will collapse to a single core because of a serial NxN SVD call.

In general, ShapeWorks shows significantly better scaling behavior as the initialization phase (which doesn’t have this SVD call) takes up often the majority of the time.

We are aware of the limitations of the serialized svd call in the optimization and are looking into ways to improve this.

Thank you very much for the prompt and helpful reply! That explains the scaling behavior observed. I will keep an eye on future related ShapeWorks updates.