Derivative Informed Neural Operators in JAX and Equinox
Project description
dinox
dinox is a JAX implementation of Reduced Basis Derivative Informed Neural Operators, built for high performance in single-GPU environments where all training data fits in GPU memory.
The library is designed primarily for PDE learning workflows based on:
FEniCS 2019.1- Jacobians computed via
hippylib - Subspace methods provided by
bayesflux
Overview
dinox provides:
- Reduced basis neural operator architectures
- Derivative-informed training using PDE Jacobians
- GPU-accelerated implementations in
JAXandEquinox - Integration with FEniCS-discretized PDEs
Important: FEniCS & Hippylib Environment Required
dinox depends on bayesflux[hippylib], which requires:
- hippylib
- FEniCS 2019.1
FEniCS has system-level dependencies and cannot be installed via pip alone.
You must first create a conda environment with FEniCS 2019.1 before installing dinox.
Installation
Prerequisites
- NVIDIA driver >= 525 (check with
nvidia-smi) - conda or mamba
Note on CUDA libraries: You do not need to install CUDA Toolkit, cuDNN, or cuSPARSE via conda or your system package manager. The pip wheels for JAX and CuPy bundle their own CUDA 12 runtime libraries. Installing system CUDA alongside pip-bundled CUDA is the most common source of GPU detection failures.
Step 1 — Create a FEniCS 2019.1 environment
conda create -n fenics-2019.1_env -c conda-forge fenics==2019.1.0 python=3.11
conda activate fenics-2019.1_env
Step 2 — Fix LD_LIBRARY_PATH (critical for GPU)
A system-level or conda-set LD_LIBRARY_PATH pointing to a CUDA installation will conflict with the CUDA libraries bundled in the JAX and CuPy pip wheels, causing errors like Unable to load cuSPARSE.
unset LD_LIBRARY_PATH
Step 3 — Install GPU-enabled JAX
pip install "jax[cuda12]" cupy-cuda12x nvidia-curand-cu12
Step 4 — Install dinox
# With CuPy GPU support (recommended)
pip install dinox[cupy]
# Without CuPy
pip install dinox
Step 5 — Verify GPU
python -c "import jax; print('JAX devices:', jax.devices())"
python -c "import cupy; print('CuPy GPU count:', cupy.cuda.runtime.getDeviceCount())"
You should see your NVIDIA GPU listed. If JAX shows only CpuDevice, check that LD_LIBRARY_PATH is unset (see Step 2).
GPU Support
- Designed for single-GPU workflows where all data fits in GPU memory
- Requires CUDA 12-enabled JAX (
pip install "jax[cuda12]") — the pip wheel bundles its own CUDA runtime - Optional CuPy arrays for GPU operations via
dinox[cupy] - Without GPU, CPU fallback is automatic
Development
conda create -n fenics-2019.1_env -c conda-forge fenics==2019.1.0 python=3.11
conda activate fenics-2019.1_env
pip install "jax[cuda12]" cupy-cuda12x nvidia-curand-cu12
unset LD_LIBRARY_PATH # or use the permanent conda hook above
pip install -e ".[dev]"
This installs:
- dinox (editable)
- development tools (pytest, black, flake8, isort)
- bayesflux[hippylib]
- hippylib
- all required JAX dependencies
Requirements
- Python >= 3.10
- FEniCS 2019.1 (via conda)
- JAX >= 0.7.0 (for GPU:
pip install "jax[cuda12]") - NVIDIA driver >= 525 (for GPU)
- Optional: CuPy for GPU array operations (
pip install dinox[cupy])
Troubleshooting
| Problem | Solution |
|---|---|
Unable to load cuSPARSE |
unset LD_LIBRARY_PATH before running Python |
No such file: libcurand.so |
pip install nvidia-curand-cu12 |
JAX shows only CpuDevice |
Ensure jax[cuda12] was installed (not just jax) and LD_LIBRARY_PATH is unset |
nvidia-smi not found |
Install or update NVIDIA driver (>= 525) |
| JAX/CuPy CUDA version conflict | Do not conda install cudatoolkit — let pip wheels provide CUDA |
Repository
- Homepage: https://github.com/dinoSciML/dinox
- Repository: https://github.com/dinoSciML/dinox
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dinox-0.5.2.tar.gz.
File metadata
- Download URL: dinox-0.5.2.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3b7944864d6efa401ce008b5353a80a18f15d6dcb7513f70b051661638aa9e1
|
|
| MD5 |
f0ee3dea52067876aba31251cbdc1749
|
|
| BLAKE2b-256 |
9b662ffbd601d620a99a1bdf1228989623168e10db7e183a3b7f3dea749f36ad
|
File details
Details for the file dinox-0.5.2-py3-none-any.whl.
File metadata
- Download URL: dinox-0.5.2-py3-none-any.whl
- Upload date:
- Size: 19.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8f9cc77f45ac66a3a6f1fb956ba2a5bc9deb9d25ab3f11c9bc0800494298e6f
|
|
| MD5 |
dadc29c6298905145976f01364fc1a79
|
|
| BLAKE2b-256 |
182f888fae2290d74bee470d7cc33d980b99618bae8013cc45f7003864bc0f3f
|