- Remove all manually registered Pi tools (alpha_search, alpha_get_paper, alpha_ask_paper, alpha_annotate_paper, alpha_list_annotations, alpha_read_code, session_search, preview_file) and their wrappers (alpha.ts, preview.ts, session-search.ts, alpha-tools.test.ts) - Add Pi skill files for alpha-research, session-search, preview, modal-compute, and runpod-compute in skills/ - Sync skills to ~/.feynman/agent/skills/ on startup via syncBundledAssets - Add node_modules/.bin to Pi subprocess PATH so alpha CLI is accessible - Add /outputs extension command to browse research artifacts via dialog - Add Modal and RunPod as execution environments in /replicate and /autoresearch prompts - Remove redundant /alpha-login /alpha-logout /alpha-status REPL commands (feynman alpha CLI still works) - Update README, researcher agent, metadata, and website docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1.4 KiB
1.4 KiB
name, description
| name | description |
|---|---|
| modal-compute | Run GPU workloads on Modal's serverless infrastructure. Use when the user needs remote GPU compute for training, inference, benchmarks, or batch processing and Modal CLI is available. |
Modal Compute
Use the modal CLI for serverless GPU workloads. No pod lifecycle to manage — write a decorated Python script and run it.
Setup
pip install modal
modal setup
Commands
| Command | Description |
|---|---|
modal run script.py |
Run a script on Modal (ephemeral) |
modal run --detach script.py |
Run detached (background) |
modal deploy script.py |
Deploy persistently |
modal serve script.py |
Serve with hot-reload (dev) |
modal shell --gpu a100 |
Interactive shell with GPU |
modal app list |
List deployed apps |
GPU types
T4, L4, A10G, L40S, A100, A100-80GB, H100, H200, B200
Multi-GPU: "H100:4" for 4x H100s.
Script pattern
import modal
app = modal.App("experiment")
image = modal.Image.debian_slim(python_version="3.11").pip_install("torch==2.8.0")
@app.function(gpu="A100", image=image, timeout=600)
def train():
import torch
# training code here
@app.local_entrypoint()
def main():
train.remote()
When to use
- Stateless burst GPU jobs (training, inference, benchmarks)
- No persistent state needed between runs
- Check availability:
command -v modal