Convert SLURM submit scripts to Run.ai configurations using AI
Project description
s2r - SLURM to Run.ai Converter
Convert SLURM batch scripts to Run.ai configurations using AI.
Installation
pip install s2r
Quick Start
CLI Usage
# Convert from stdin
s2r < my_slurm_script.sh
# Convert from file to stdout
s2r my_slurm_script.sh
# Convert from file to file
s2r my_slurm_script.sh output.yaml
Library Usage
from s2r import convert_slurm_to_runai
slurm_script = """
#!/bin/bash
#SBATCH --job-name=my-job
#SBATCH --gres=gpu:2
#SBATCH --mem=32G
python train.py
"""
runai_config = convert_slurm_to_runai(slurm_script)
print(runai_config)
How It Works
- Client: The
s2rlibrary signs your SLURM script with HMAC-SHA256 - API: Sends the signed request to an AWS Lambda endpoint
- AI: Lambda calls AWS Bedrock (Claude) to perform the conversion
- Response: Returns the Run.ai YAML configuration or CLI commands
Features
- Free to use: The service is provided at no cost (rate-limited)
- Secure: Signed requests prevent unauthorized API usage
- Rate-limited: 100 requests per IP per day
- Simple: Works with stdin, files, or as a library
Configuration
By default, the tool uses a public API endpoint. If you're deploying your own:
export S2R_API_ENDPOINT=https://your-lambda-url.lambda-url.us-east-1.on.aws/
Example
Given this SLURM script:
#!/bin/bash
#SBATCH --job-name=pytorch-training
#SBATCH --nodes=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=32G
#SBATCH --gres=gpu:2
#SBATCH --time=24:00:00
python train.py --epochs 100
The tool will generate an equivalent Run.ai configuration with:
- GPU resource requests (2 GPUs)
- CPU and memory allocations
- Job name and command
- Appropriate container/image specifications
Documentation
- API Reference: Complete API documentation for library and CLI
- Architecture: System design and component details
- Deployment Guide: AWS Lambda deployment instructions
- Troubleshooting: Common issues and solutions
- CLAUDE.md: Quick reference for Claude Code
Current Deployment Status
Deployed Lambda Function (us-west-2):
- Function URL:
https://uqbglp42fwfy3yo77jcphk2bhu0wydft.lambda-url.us-west-2.on.aws/ - Model: Claude Sonnet 4.5 (20250929)
- Rate Limit: 100 requests/IP/day
Known Issues:
- Function URL may return 403 Forbidden due to IAM permission constraints
- See troubleshooting guide for resolution
Development
See CLAUDE.md for development commands and quick reference.
For detailed architecture and deployment information, see the docs/ directory.
Self-Hosting
To deploy your own instance:
# Clone repository
git clone https://github.com/yourusername/slurm2runai.git
cd slurm2runai
# Deploy Lambda function
cd lambda
python3 -m zipfile -c lambda.zip lambda_function.py
aws lambda create-function --function-name s2r-converter ...
# See docs/deployment.md for full instructions
License
MIT License - see LICENSE file for details.
Contributing
Contributions welcome! Please:
- Open an issue to discuss changes
- Follow the code style (ruff)
- Add tests for new features
- Update documentation
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 s2r-0.1.1.tar.gz.
File metadata
- Download URL: s2r-0.1.1.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9153da8409742cc01127fe6662aba2ecc5f1f67bc513624ab2f832a2ba327866
|
|
| MD5 |
ddd611b2588fe8005e8687e131a0ef78
|
|
| BLAKE2b-256 |
6cfebf68f5e42e3e9c57ba903764da0dbe98c6142d25aa4719d93fd005415fea
|
Provenance
The following attestation bundles were made for s2r-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on dirkpetersen/slurm2runai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
s2r-0.1.1.tar.gz -
Subject digest:
9153da8409742cc01127fe6662aba2ecc5f1f67bc513624ab2f832a2ba327866 - Sigstore transparency entry: 919660866
- Sigstore integration time:
-
Permalink:
dirkpetersen/slurm2runai@22e8b21189820bb6b73df80e5e8615c4a534728c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/dirkpetersen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@22e8b21189820bb6b73df80e5e8615c4a534728c -
Trigger Event:
release
-
Statement type:
File details
Details for the file s2r-0.1.1-py3-none-any.whl.
File metadata
- Download URL: s2r-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e4567175712a648f5005b0fb2af19778d450211f3a2df45b10605945bc0dc4f
|
|
| MD5 |
d76716e3c0eb134d470192ccf22275bb
|
|
| BLAKE2b-256 |
92392758ab6cd03a6fa933cd130f8edc4b61e3a95b9c25a10a74120e01468538
|
Provenance
The following attestation bundles were made for s2r-0.1.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on dirkpetersen/slurm2runai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
s2r-0.1.1-py3-none-any.whl -
Subject digest:
8e4567175712a648f5005b0fb2af19778d450211f3a2df45b10605945bc0dc4f - Sigstore transparency entry: 919660869
- Sigstore integration time:
-
Permalink:
dirkpetersen/slurm2runai@22e8b21189820bb6b73df80e5e8615c4a534728c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/dirkpetersen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@22e8b21189820bb6b73df80e5e8615c4a534728c -
Trigger Event:
release
-
Statement type: