Files
nvcurve/docs/Installation.md
T
ARIA e148c83622 feat: experimental NVIDIA power control via RM ioctl interface
Adds an experimental power-cap mode using the undocumented RM ioctl
interface (based on panchovix's LACT PR #1205) to set power limits
below the VBIOS minimum (down to 30 W).

- hal/rm_power.py: RM ioctl power-cap read/write/reset + runtime probe
- limits.py: power_cap_mode (nvml/ioctl) with support detection
- config.py: persist power_cap_mode per GPU
- profiles: record/apply power_cap_mode
- server.py: POST /api/limits validates ioctl support (409 on failure)
- cli.py: profile save falls back to persisted mode
- client.py: power_cap_mode in Limits
- frontend: toggle + warning with panchovix attribution (LACT #1205)
- tests: test_rm_power.py (unit) + integration coverage
- Makefile: add test_rm_power.py to make test

Also includes automated linter reformatting (prettier, ruff, shellcheck,
isort, markdownlint) that the linter would apply anyway.
2026-09-17 22:44:27 +02:00

3.8 KiB

Installation

This guide covers installing NVCurve from source, including building the frontend.

Important

Blackwell GPU Fork — This repository contains Blackwell-specific features (extended memory offset > +1000 MHz, fan curve control). The pre-built PyPI package does NOT include these. You must build from source.

Prerequisites

  • Linux with NVIDIA proprietary drivers
  • Python 3.12+
  • Node.js 18+ and npm
  • uv — Python package manager
  • Root/sudo access (required for GPU hardware interactions)

Installing uv

curl -LsSf https://astral.sh/uv/install.sh | sh

Or via your package manager:

# Arch Linux
sudo pacman -S uv

# Debian/Ubuntu
pip install uv

Installation

curl -fsSL https://gitea.zephyre.one/Pakobbix/nvcurve/raw/branch/main/install.sh | bash

The script checks prerequisites (installs uv if missing), clones the repository, and installs NVCurve. The React frontend is compiled automatically during the build by a hatchling build hook (hatch_build.py).

Option 2: From a clone

git clone https://gitea.zephyre.one/Pakobbix/nvcurve.git
cd nvcurve
./install.sh

Equivalent manual steps (what the script does):

git clone https://gitea.zephyre.one/Pakobbix/nvcurve.git
cd nvcurve
uv tool install .   # frontend is built automatically if missing/stale

Option 3: Direct from git (no clone, no script)

uv tool install "git+https://gitea.zephyre.one/Pakobbix/nvcurve.git"

To install a specific branch:

uv tool install "git+https://gitea.zephyre.one/Pakobbix/nvcurve.git@<branch>"

Verify

nvcurve setup

This performs four checks:

  1. NvAPI function probe — verifies all required functions resolve in your driver
  2. Curve read — reads and displays your current V/F curve as a baseline
  3. Write-verify — writes +5 MHz to a safe point, reads it back, and confirms the change
  4. Restore — automatically restores the state from before the test write

If setup reports Compatible, you're ready to go.

Frontend Development Mode

For active frontend development, run the Vite dev server instead of building:

cd frontend
npm run dev

This starts a hot-reload development server. The backend server runs separately:

# In another terminal
nvcurve serve start

Upgrading

cd nvcurve
git pull
uv tool install --force .

The frontend is rebuilt automatically if it is missing or older than the frontend sources. If you modified frontend code locally, run make frontend first (or rm -rf frontend/dist).

If running as a systemd service:

nvcurve service restart

Troubleshooting

nvcurve command not found

Ensure uv tools directory is on your PATH. After installing uv, log out and back in, or run:

source ~/.local/bin/env  # or wherever uv installed

Frontend not loading in the web UI

Verify that the installed package contains the frontend. If frontend/dist is empty or missing, rebuild with make frontend (or cd frontend && npm ci && npm run build) and reinstall with uv tool install --force ..

NvAPI functions not found

Your NVIDIA driver may not expose the required undocumented functions. Try updating to the latest driver version. Run nvcurve read --diag for detailed diagnostics.

Permission denied on hardware operations

All hardware-interacting commands require root. The CLI will automatically escalate via sudo when needed. If sudo is not configured for your user, run commands with sudo explicitly.

Blackwell memory offset limited to +1000 MHz

The standard NVCurve on PyPI caps memory offset at +1000 MHz. This fork raises the cap to +3000 MHz for Blackwell GPUs. If you installed from PyPI, uninstall and rebuild from source.