Skip to main content

A lightweight, single-node job scheduler written in Rust.

Project description

gflow - A lightweight, single-node job scheduler

Documentation Status GitHub Actions Workflow Status codecov PyPI - Version TestPyPI - Version Crates.io Version PyPI - Downloads dependency status Crates.io License Crates.io Size Discord

English | 简体中文

gflow is a lightweight job scheduler for a single Linux machine. It gives you a Slurm-like workflow—submit, queue, inspect, cancel, and organize jobs—without deploying a cluster. It is especially useful on shared GPU workstations, lab servers, and small research boxes.

Demo

asciicast

When gflow fits well

  • You have one Linux machine instead of a full cluster.
  • Multiple users or experiments need to share GPUs safely.
  • You want job queues, dependencies, arrays, and time limits.
  • You want a lighter alternative to Slurm for local or lab infrastructure.

Core Features

  • Daemon-based scheduling: gflowd keeps the queue, state, and resource allocation in one place.
  • GPU-aware execution: schedule dedicated GPUs or shared GPUs with per-job VRAM limits.
  • Rich submission model: submit commands or scripts with priorities, dependencies, arrays, and conda environments.
  • Time limits and lifecycle control: prevent runaway jobs and manage hold, release, redo, and cancel actions.
  • tmux-backed execution and logs: every job runs in its own session and streams output into persistent logs.
  • Automation hooks: send webhook notifications when jobs start, finish, fail, or change state.

CLI Overview

  • gflowd: initialize config and manage the scheduler daemon.
  • gbatch: submit commands or scripts.
  • gqueue: inspect and filter jobs.
  • gjob: show details, attach, hold/release, redo, and update jobs.
  • gcancel: cancel one or more jobs.
  • gctl: manage GPU visibility, concurrency limits, and reservations.
  • ginfo: inspect scheduler and GPU status.
  • gstats: view scheduler statistics.

Installation

Prerequisites

  • Linux
  • tmux
  • NVIDIA drivers only if you want GPU scheduling features

Install via PyPI (Recommended)

Use uv:

uv tool install runqd

Or pipx:

pipx install runqd

Or pip:

pip install runqd

Prebuilt binaries are available for Linux (x86_64, arm64).

Install Nightly Build

pip install --index-url https://test.pypi.org/simple/ runqd

Install via Cargo

cargo install gflow

Install directly from main:

cargo install --git https://github.com/AndPuQing/gflow.git --locked

Build from Source

git clone https://github.com/AndPuQing/gflow.git
cd gflow
cargo build --release

Compiled binaries are placed in target/release/.

Quick Start

  1. Initialize config (optional but recommended):

    gflowd init
    
  2. Start the scheduler daemon:

    gflowd up
    
  3. Submit a job:

    cat > my_job.sh <<'EOF'
    #!/bin/bash
    echo "Starting job on GPU: $CUDA_VISIBLE_DEVICES"
    sleep 30
    echo "Job finished."
    EOF
    chmod +x my_job.sh
    gbatch --gpus 1 ./my_job.sh
    
  4. Inspect the queue:

    gqueue
    
  5. Check details or stop the daemon when done:

    ginfo
    gflowd down
    

Common Workflow

gflowd up
ginfo
gbatch --gpus 1 --time 2:00:00 --name train python train.py
gqueue -f JOBID,NAME,ST,TIME,NODES,NODELIST(REASON)
gjob show <job_id>
gcancel <job_id>

Documentation

Star History

Star History Chart

Contributing

If you find a bug or want to propose an improvement, please open an Issue or submit a Pull Request.

License

gflow is licensed under the MIT License. See LICENSE 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

runqd-0.4.13.tar.gz (310.5 kB view details)

Uploaded Source

Built Distributions

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

runqd-0.4.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (47.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

runqd-0.4.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (45.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

File details

Details for the file runqd-0.4.13.tar.gz.

File metadata

  • Download URL: runqd-0.4.13.tar.gz
  • Upload date:
  • Size: 310.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for runqd-0.4.13.tar.gz
Algorithm Hash digest
SHA256 7674771d67b1d1066dd079da4e1d9529ae5f81bc087e151f184317aae87adc46
MD5 73ff11f96e132ea50b4ddfe10aa9a3a2
BLAKE2b-256 bd4ce32192715b57d690c0ff3ce5704298e6afb8f1e863a9d4a7f4f44984380b

See more details on using hashes here.

File details

Details for the file runqd-0.4.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: runqd-0.4.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 47.8 MB
  • Tags: Python 3, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for runqd-0.4.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86a2457d0d3ad6b37541921c19fe72da519175aa3302eb849064f2c90a9cd54b
MD5 1649eb0a6e275b8925d66bc11cb81024
BLAKE2b-256 0bed1db3cf4936941afa1d68c75db02d667f8c7a6164273ff9e2b1002e517c7d

See more details on using hashes here.

File details

Details for the file runqd-0.4.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

  • Download URL: runqd-0.4.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 45.0 MB
  • Tags: Python 3, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for runqd-0.4.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 905d0d4b13a14298ed27dcdcd6d0df66b7c98a5cae70d1165f34695e870bab9b
MD5 33ca2d8956bef315168844bb2a94a6bd
BLAKE2b-256 69d812289fc76e555579533fa89c4161fcdd913eef29413335bc40f7935240f6

See more details on using hashes here.

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