openmm / NNPOps

High-performance operations for neural network potentials
Other
79 stars 17 forks source link

Install via pip #105

Open RaulPPelaez opened 1 year ago

RaulPPelaez commented 1 year ago

This PR is an effort to include the possibility of installing NNPops via pip.

I mainly took the example here and adapted it: https://github.com/pybind/cmake_example/blob/master/setup.py

Having pip as an option would simplify installing NNPops in environments which are not covered by the conda feedstock. If this is not something that fits the current view of the project, please feel free to close this PR, @peastman.

I added a "pip wheel" section to the CI, lets see if it runs...

peastman commented 1 year ago

Being able to install with pip would be great. Eventually we want to make the whole OpenMM stack pip installable.

RaulPPelaez commented 1 year ago

Great! In theory it is straight forward to make pip just configure and call CMake when a pre built binary is not found, which is what I am trying to do here. In practice the thing is really obtuse -.-. I am having a hard time telling CMake about CUDA archs and whatnot.

RaulPPelaez commented 1 year ago

I can do this from my laptop:

$ mamba create -n nnpops && mamba activate nnpops
$ mamba install cudatoolkit-dev==11.7
$ pip install git+https://github.com/openmm/NNPOps@refs/pull/105/head

There are however some things I still do not know how to solve:

  1. A valid CUDA and gcc must be present in the system. AFAIK you cannot install that via pip, nor modify pyproject.toml depending on the environment.
  2. Link CUDA with dependencies. Currently pip will install torch>=2 to build regardless of the CUDA version in the system, which will easily result in a failed build. Ideally pip should decide to install a lower version of torch depending on the available CUDA version.
peastman commented 1 year ago

The standard way of building pip packages is with cibuildwheel. It provides a set of standard build environments to ensure compatibility between packages.

CUDA can be installed with pip.