Skip to content

Conversation

@martinnormark
Copy link
Owner

@martinnormark martinnormark commented Feb 1, 2025

This PR improves performance of mesh_to_tensor in dataset and configures pytest in VS Code to make debugging easier.

Tested performance of new and old mesh_to_tensor:

Profiling mesh_to_tensor_old:
         24332857 function calls in 9.498 seconds

Profiling mesh_to_tensor:
         21965 function calls (21737 primitive calls) in 0.305 seconds

Full log

Loaded 76 meshes.
Profiling mesh_to_tensor:
         21965 function calls (21737 primitive calls) in 0.305 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       76    0.001    0.000    0.304    0.004 /Users/martinnormark/Dev/neural-mesh-simplification/src/neural_mesh_simplification/data/dataset.py:78(mesh_to_tensor)
   304/76    0.001    0.000    0.278    0.004 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:121(get_cached)
       76    0.017    0.000    0.277    0.004 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:913(edges_unique)
       76    0.001    0.000    0.211    0.003 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/grouping.py:431(unique_rows)
       76    0.000    0.000    0.189    0.002 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:144(unique)
       76    0.031    0.000    0.188    0.002 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:342(_unique1d)
       76    0.144    0.002    0.144    0.002 {method 'argsort' of 'numpy.ndarray' objects}
       76    0.000    0.000    0.046    0.001 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:962(edges_sorted)
       76    0.000    0.000    0.025    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:915(sort)
       76    0.022    0.000    0.022    0.000 {method 'sort' of 'numpy.ndarray' objects}
       76    0.014    0.000    0.022    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/grouping.py:160(hashable_rows)
       76    0.000    0.000    0.021    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:884(edges)
       76    0.006    0.000    0.020    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/geometry.py:92(faces_to_edges)
       76    0.000    0.000    0.012    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2609(cumsum)
       76    0.012    0.000    0.012    0.000 {method 'contiguous' of 'torch._C.TensorBase' objects}
      380    0.012    0.000    0.012    0.000 {method 'reshape' of 'numpy.ndarray' objects}
       76    0.000    0.000    0.012    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:51(_wrapfunc)
       76    0.012    0.000    0.012    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
      228    0.008    0.000    0.008    0.000 {built-in method torch.tensor}
       76    0.004    0.000    0.004    0.000 {method 'astype' of 'numpy.ndarray' objects}
      532    0.000    0.000    0.003    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:364(verify)
       76    0.003    0.000    0.003    0.000 {method 'copy' of 'numpy.ndarray' objects}
      532    0.001    0.000    0.003    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:679(__hash__)
       76    0.000    0.000    0.003    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:516(__init__)
       76    0.001    0.000    0.002    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1197(tile)
      152    0.002    0.000    0.002    0.000 {method 'reduce' of 'numpy.ufunc' objects}
      380    0.000    0.000    0.002    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:561(__setattr__)
      228    0.000    0.000    0.002    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:445(__setitem__)
      532    0.000    0.000    0.002    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:100(__setattr__)
      684    0.001    0.000    0.001    0.000 {built-in method numpy.array}
       76    0.000    0.000    0.001    0.000 {method 'min' of 'numpy.ndarray' objects}
       76    0.001    0.000    0.001    0.000 {method 'repeat' of 'numpy.ndarray' objects}
       76    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/_methods.py:46(_amin)
      380    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:120(__setitem__)
     1900    0.000    0.000    0.001    0.000 {built-in method builtins.getattr}
       76    0.001    0.000    0.001    0.000 {method 'clone' of 'torch._C.TensorBase' objects}
      380    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:82(_pop_cache)
       76    0.000    0.000    0.001    0.000 {method 'max' of 'numpy.ndarray' objects}
       76    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/_methods.py:42(_amax)
     1064    0.000    0.000    0.001    0.000 {built-in method builtins.hash}
      152    0.001    0.000    0.001    0.000 {method 't' of 'torch._C.TensorBase' objects}
      228    0.000    0.000    0.001    0.000 {built-in method builtins.setattr}
       76    0.001    0.000    0.001    0.000 {method 'flatten' of 'numpy.ndarray' objects}
       76    0.001    0.000    0.001    0.000 {built-in method numpy.zeros}
       76    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:952(x)
      380    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:89(__getattr__)
       76    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:66(__init__)
     2584    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
       76    0.000    0.000    0.000    0.000 {built-in method numpy.arange}
     1064    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:207(__hash__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:960(edge_index)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:1016(face)
     2128    0.000    0.000    0.000    0.000 {built-in method builtins.len}
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:616(num_nodes)
      532    0.000    0.000    0.000    0.000 {built-in method xxhash._xxhash.xxh3_64_intdigest}
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:992(pos)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/feature_store.py:276(__init__)
      152    0.000    0.000    0.000    0.000 {built-in method numpy.empty}
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:567(edge_index)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:466(num_nodes)
      152    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/graph_store.py:109(__init__)
      912    0.000    0.000    0.000    0.000 {method 'values' of 'dict' objects}
      380    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:117(__getitem__)
      532    0.000    0.000    0.000    0.000 {method 'tobytes' of 'numpy.ndarray' objects}
      152    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:434(vertices)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/grouping.py:226(float_to_int)
      152    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:288(faces)
      304    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:627(__getitem__)
      380    0.000    0.000    0.000    0.000 {built-in method numpy.asanyarray}
      152    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1269(<genexpr>)
       76    0.000    0.000    0.000    0.000 {built-in method builtins.all}
      228    0.000    0.000    0.000    0.000 {method 'items' of 'dict' objects}
       76    0.000    0.000    0.000    0.000 {method 'view' of 'numpy.ndarray' objects}
      228    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1279(<genexpr>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:131(_unpack_tuple)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2605(_cumsum_dispatcher)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:139(_unique_dispatcher)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1193(_tile_dispatcher)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:911(_sort_dispatcher)



Profiling mesh_to_tensor_old:
         24332857 function calls in 9.498 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       76    0.112    0.001    9.498    0.125 /Users/martinnormark/Dev/neural-mesh-simplification/src/neural_mesh_simplification/data/dataset.py:100(mesh_to_tensor_old)
       76    1.321    0.017    8.580    0.113 /Users/martinnormark/Dev/neural-mesh-simplification/src/neural_mesh_simplification/utils/mesh_operations.py:25(build_graph_from_mesh)
  3243720    3.846    0.000    5.208    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:899(add_edge)
   540166    1.388    0.000    1.553    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:517(add_node)
  3783886    0.431    0.000    0.674    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/utils/misc.py:595(_clear_cache)
  1621406    0.408    0.000    0.498    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:178(__array_finalize__)
  3243796    0.431    0.000    0.431    0.000 {method 'get' of 'dict' objects}
  3783962    0.422    0.000    0.422    0.000 {method 'update' of 'dict' objects}
  1621936    0.409    0.000    0.409    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1265(__iter__)
      228    0.253    0.001    0.253    0.001 {built-in method torch.tensor}
  3785710    0.243    0.000    0.243    0.000 {built-in method builtins.getattr}
       76    0.000    0.000    0.130    0.002 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1261(__len__)
       76    0.029    0.000    0.129    0.002 {built-in method builtins.sum}
   540242    0.079    0.000    0.101    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1262(<genexpr>)
  1621406    0.090    0.000    0.090    0.000 {built-in method builtins.isinstance}
   540242    0.022    0.000    0.022    0.000 {built-in method builtins.len}
       76    0.011    0.000    0.011    0.000 {method 'contiguous' of 'torch._C.TensorBase' objects}
       76    0.000    0.000    0.003    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:516(__init__)
      380    0.000    0.000    0.002    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:561(__setattr__)
      532    0.000    0.000    0.002    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:100(__setattr__)
      380    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:120(__setitem__)
      380    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:82(_pop_cache)
      152    0.001    0.000    0.001    0.000 {method 't' of 'torch._C.TensorBase' objects}
      228    0.000    0.000    0.001    0.000 {built-in method builtins.setattr}
       76    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:952(x)
       76    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:66(__init__)
      380    0.000    0.000    0.001    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:89(__getattr__)
       76    0.000    0.000    0.000    0.000 /opt/homebrew/Cellar/python@3.12/3.12.1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/functools.py:979(__get__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:332(__init__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:960(edge_index)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/feature_store.py:276(__init__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:616(num_nodes)
      152    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/graph_store.py:109(__init__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:992(pos)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:1016(face)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:1361(edges)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:567(edge_index)
      228    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:434(vertices)
      380    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:117(__getitem__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:466(num_nodes)
      380    0.000    0.000    0.000    0.000 {method 'items' of 'dict' objects}
      380    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:627(__getitem__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1058(__init__)
      152    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:288(faces)
      380    0.000    0.000    0.000    0.000 {method 'values' of 'dict' objects}
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:59(__set__)
       76    0.000    0.000    0.000    0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:37(__set__)
       76    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

@martinnormark martinnormark changed the title chore: Add VS Code settings for pytest testing Improve mesh_to_tensor and configure pytest in VS Code Feb 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants