Skip to main content

Simple objective optimization orchestration for Slurm clusters

Project description

slurptuna – Run Optuna on Slurm (HPC hyperparameter optimization made simple)

Run Optuna hyperparameter optimization on Slurm clusters without writing sbatch scripts or managing distributed workers.

Running Optuna on a Slurm cluster (HPC) is not straightforward. slurptuna provides a simple way to run Optuna on Slurm with minimal setup.

In practice, running Optuna on Slurm clusters usually means:

  • writing and managing sbatch job arrays
  • coordinating distributed Optuna trials
  • aggregating results across workers

While Optuna supports distributed optimization, integrating it with Slurm typically requires custom orchestration.

slurptuna removes that overhead by handling job submission, parallel execution, and result aggregation automatically.

Install

pip install slurptuna

Or with uv:

uv add slurptuna

Usage

Here is a minimal example of running Optuna on Slurm using slurptuna:

(1) Write your loss function in a script

# my_model.py
from datetime import timedelta
from slurptuna import ExecutionMode, loss, optimize_run

@loss(
    name="my_model",
    description="Fit alpha/beta",
    parameter_space={"alpha": (0.0, 1.0), "beta": (0.0, 1.0)},
)
def my_model(params, seed):
    return abs(params["alpha"] - 0.3) + abs(params["beta"] - 0.7)

if __name__ == "__main__":
    result = optimize_run(
        my_model,
        mode=ExecutionMode.DISTRIBUTED,
        n_trials=20,
        n_seeds=400,
        chunk_size=20,
        worker_time_limit=timedelta(minutes=30),
    )
    print(result.best_params)
    # best params and best value are also written to runs/my_model_v0001/summary.json

Parameter space

Loss functions may accept either (params, seed) or (params, seed, context). Use context only when you need framework-provided metadata such as entry_id from optimize_entries.

Tuple shorthand is interpreted as (min, max):

parameter_space={"alpha": (0.0, 1.0)}

You can also use explicit specs when needed:

from slurptuna import search_param

parameter_space={
    "alpha": search_param(range=(0.0, 1.0)),
    "steps": search_param(range=(1, 10), dtype="int"),
    "mode": search_param(allowed=["fast", "slow"]),
}

(2) Submit your script as a long-running controller job on Slurm:

sbatch run_controller.sh my_model.py

run_controller.sh:

#!/bin/bash
#SBATCH --job-name=slurptuna-controller
#SBATCH --time=04:00:00
#SBATCH --cpus-per-task=1
#SBATCH --mem=4G

source .venv/bin/activate
python "$1"

The controller submits and monitors chunk/reduce array jobs automatically — you just wait for the result.

Docs

younesstrittmatter.github.io/slurptuna

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slurptuna-0.0.3.tar.gz (68.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slurptuna-0.0.3-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

Details for the file slurptuna-0.0.3.tar.gz.

File metadata

  • Download URL: slurptuna-0.0.3.tar.gz
  • Upload date:
  • Size: 68.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for slurptuna-0.0.3.tar.gz
Algorithm Hash digest
SHA256 803c46bc463b9f3f939ea8fa49f935e697cff399ca9c5fa7dba80acba4a3ea43
MD5 3bbb35e012032e9043c6880e86dc7b33
BLAKE2b-256 5150fa59294958f7cdd07dc06b08f4d99b1551bd4c0a4daf11b0342429120885

See more details on using hashes here.

Provenance

The following attestation bundles were made for slurptuna-0.0.3.tar.gz:

Publisher: publish.yml on younesStrittmatter/slurptuna

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slurptuna-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: slurptuna-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for slurptuna-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 166fe9079e79f9e83c4ebf7f35f2659adc74db0cc6e9d8346c7bfe1a0cf7b40b
MD5 76ece779dd335611c701ec280939b790
BLAKE2b-256 af9dbcb96b7afc0b78116d250a44b8dad1bb12e013f88547134ae32c8af2a291

See more details on using hashes here.

Provenance

The following attestation bundles were made for slurptuna-0.0.3-py3-none-any.whl:

Publisher: publish.yml on younesStrittmatter/slurptuna

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page