The orchestration layer for modern Slurm clusters.
Project description
🐘 Jazari
The orchestration layer for modern Slurm clusters.
Jazari is a command-line tool that makes launching distributed AI/ML training jobs on high-performance computing (HPC) clusters as easy as running a script on your laptop.
It abstracts away the complexity of writing Slurm (#SBATCH) scripts, handling multi-node networking, and managing environment variables.
Why Jazari?
If you are a researcher using a university or national supercomputer (like Compute Canada/Digital Alliance), you know the pain:
- The Script Nightmare: Copy-pasting old bash scripts, accidentally leaving in wrong parameters, and debugging obscure
sbatcherrors. - Networking Headaches: Manually figuring out how to get PyTorch DDP to find the master node's IP address across multiple machines.
- Experiment Fragmentation: Having a 4-node training run spawn 4 separate experiments in Weights & Biases.
- Slurm Arcana: Remembering obscure flags for accounts, time formats, and memory allocation.
Jazari solves this. You write your Python training script, and Jazari handles the rest.
✨ Key Features
- 🚀 One-Command Launch: Go from Python script to running distributed job with a single CLI command.
- 🤖 Automatic Slurm Generation: Uses robust Jinja2 templates to generate correct, safe
#SBATCHscripts on the fly. - 🧠 Zero-Config DDP Networking: Automatically resolves master IP, ports, and world size for PyTorch Distributed Data Parallel.
- 📈 Seamless Weights & Biases: Securely propagates your local API key and ensures multi-node jobs log as a single, clean run.
- ⚙️ User "Init" Profiles: Save your default account, time limits, and preferences once and never type them again.
- 🎨 Beautiful CLI: Modern, color-coded output with rich error reporting.
🛠️ Installation
Jazari is designed to be installed in a virtual environment on your cluster's login node.
# 1. Clone the repository
git clone [https://github.com/levoz92/jazari.git](https://github.com/levoz92/jazari.git)
cd jazari
# 2. Create and activate a virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate
# 3. Install in editable mode
pip install -e .
Verify the installation:
jazari --help
⚡ Quick Start
1. One-Time Setup
On your cluster login node, run the init command to save your defaults (like your allocation account).
jazari init
2. Create a Python Script
Here is a minimal PyTorch DDP example (train.py):
import os
import torch
import torch.distributed as dist
def main():
# 1. Initialize Process Group (Jazari sets all necessary env vars)
dist.init_process_group(backend="nccl")
rank = dist.get_rank()
world_size = dist.get_world_size()
print(f"👋 Hello from rank {rank} of {world_size} on node {os.uname().nodename}!")
# Your training loop here...
# 3. Clean up
dist.destroy_process_group()
if __name__ == "__main__":
main()
3. Launch It!
Run your script on 2 nodes with 4 GPUs per node (8 GPUs total).
jazari run -N 2 -G 4 --name "my-big-run" --track-wandb python train.py --batch-size 128
That's it. Jazari will generate the script, submit it to Slurm, and stream the output.
📖 Usage Reference
jazari init
Interactively configure your default settings. These are saved to ~/.jazari/config.yaml.
jazari run [OPTIONS] COMMAND
| Option | Shorthand | Description | Default |
|---|---|---|---|
--nodes |
-N |
Number of compute nodes to request. | 1 (or config default) |
--gpus |
-G |
Number of GPUs per node. | 1 (or config default) |
--cpus |
-c |
Number of CPU cores per task. | 1 (or config default) |
--time |
-t |
Time limit in D-HH:MM format (e.g., 0-02:30 for 2.5 hours). |
01:00:00 (or config default) |
--account |
-A |
Slurm account to charge (e.g., def-user). |
Config default |
--name |
-n |
Name for the job in Slurm and W&B. | jazari_run |
--track-wandb |
Auto-configure Weights & Biases environment. | False (or config default) |
|
--dry-run |
Print the generated generated #SBATCH script to stdout without submitting. |
False |
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
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
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 jazari-0.1.2.tar.gz.
File metadata
- Download URL: jazari-0.1.2.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
047f750b5ee7caa6afdd0f333f1f0dbf53ae7d81deb4b58c3b49c1b7d49e4683
|
|
| MD5 |
94434c471584f31ddd3b6e92b5edb5ef
|
|
| BLAKE2b-256 |
143f829a50177ad266e3755c2facabc9a9c46d222deee93d77d8113806be12bf
|
File details
Details for the file jazari-0.1.2-py3-none-any.whl.
File metadata
- Download URL: jazari-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d02f02590ad9768caaeafc12618cdb98b9ffe72540ade0326c1da682f960074
|
|
| MD5 |
f405209ade109f9b1617c2c8f4f1f93e
|
|
| BLAKE2b-256 |
f6317ed038ec9e11a22e3bcb4f925bce547eb1cb1d843237880e5e9da1070f44
|