NEML2 2.0.0
|
Compiling the NEML2 core library requires
Recent PyTorch releases within a few minor versions are likely to be compatible. In the PyTorch official download page, several download options are provided: conda, pip, libTorch, and source distribution.
LIBTORCH_DIR
to be the location of libTorch when using CMake to configure NEML2.If no PyTorch installation can be detected and LIBTORCH_DIR
is not set at configure time, the NEML2 CMake script will automatically download and use the libTorch obtained from the official website. Note, however, that this method only works on Linux and Mac systems.
First, obtain the NEML2 source code.
Then, configure NEML2.
Finally, compile NEML2.
-j N
option could be passed through the commandline to accelerate the build process by running N
jobs in parallel.The compiled NEML2 can be installed as a system library.
--prefix
option specifies the path where NEML2 will be installed. Write permission is needed for the installation path.For more fine-grained control over the configure, build, and install commands, please refer to the CMake User Interaction Guide.
NEML2 also provides an experimental Python package which provides bindings for the primitive tensors and parsers for deserializing and running material models. Package source distributions are available on PyPI, but package wheels are currently not built and uploaded to PyPI.
To install the NEML2 Python package, run the following command at the repository's root. Note that unlike the C++ backend, we do not expose any interface for customizing the build. The default configuration is already optimized for building the Python package.
The command installs a package named neml2
to the site-packages directory, and so it can be imported in Python scripts using
For security reasons, static analysis tools and IDEs for Python usually refuse to extract function signature, type hints, etc. from binary extensions such as the NEML2 Python bindings. As a workaround, NEML2 automatically generates "stubs" using pybind11-stubgen
immediately after Python bindings are built to make them less opaque. Refer to the pybind11-stubgen documentation for more information.
CMake presets are provided by NEML2 to simplify the installation process. The presets are defined in CMakePresets.json
. While presets are useful in getting a quick start, finer control is oftentimes needed during installation. This section documents how the build can be customized without the presets.
Commonly used configuration options are summarized below. Default options are underlined.
Option | Values (default) | Description |
---|---|---|
NEML2_TESTS | ON, OFF | Master knob for including/excluding all tests |
NEML2_RUNNER | ON, OFF | Create a simple runner |
NEML2_CPU_PROFILER | ON, OFF | Linking against gperftools libprofiler to enable CPU profiling |
NEML2_DOC | ON, OFF | Create the documentation target |
NEML2_PYBIND | ON, OFF | Create the Python bindings target |
Additional configuration options can be passed via command line using the -DOPTION
or -DOPTION=ON
format. For example,
turns on the NEML2_PYBIND
option, and additional targets for building the Python bindings will be created. Note that this would also download additional optional dependencies, e.g., pybind11, that are required to build the Python bindings.
Integrating NEML2 into a project that already uses CMake is fairly straightforward. The following CMakeLists.txt snippet links NEML2 into the target executable called foo
:
The above snippet assumes NEML2 is checked out to the directory neml2, i.e., as a git submodule. Alternatively, you may use CMake's FetchContent
module to integrate NEML2 into your project: