disco-zero / README.md
rfick's picture
Squash history: one commit holding the current files
4b23c8f
|
Raw History Blame Contribute Delete
2.77 kB

A newer version of the Gradio SDK is available: 6.30.0

Upgrade
metadata
title: DiSCo replay to tractogram (ZeroGPU)
emoji: 🧠
colorFrom: indigo
colorTo: blue
sdk: gradio
sdk_version: 6.28.0
app_file: app.py
pinned: false
license: mit
short_description: DiSCo replay to connectome on the shared GPU pool

The DiSCo Space on ZeroGPU

The same application as rfick/disco (dmrai-lab/disco-space) on Hugging Face's shared GPU pool: the compute backend is PyTorch (DISCO_BACKEND=torch: dmipy-sim's shape-moment image, dmipy-fit's csd_tournier07_torch, dmipy-tract's torch tracker), the GPU exists for the duration of one run (spaces.GPU), and the layout's tiles are rebuilt on the device inside every call from the layout downloaded from the Hub when the container started. Deterministic algorithms are on and TF32 off inside the call. Source and pins: https://github.com/dmrai-lab/disco-space (requirements-zero.txt, app.py).

GPU quota per visitor

Every run reserves the GPU for the seconds the page shows under the run button. ZeroGPU charges that reservation against the visitor's daily quota, not the Space's: 2 minutes logged out, 5 with a free Hugging Face account, 40 with PRO; a single request above the visitor's quota is refused before it starts ("The requested GPU duration (N s) is larger than the maximum allowed"), and a run that outlives its reservation is killed. Only the device part of a run (space.app.compute: the replays, the noise, the CSD, the tracking, the scoring, the explorer's maps) holds the GPU; the page writes the files and draws in its own process after the device is released (disco-space#7).

Measured on the pool (DiSCo 364, every tier, density 4, 2026-09-30, dmipy-sim 7f6f1fa with #522 and #523; not re-measured at the current pins, dmipy-sim 1b79d2e, which the pool runs only once deployed):

run device held handoff client wall reserved
DiSCo 364 23 s 1.5 s 73 s 42 s
DiSCo 364 + the explorer's ladder 53 s 2 s 108 s 87 s
DiSCo 364, A + B (B0 transverse), no ladder 42 s 3 s 130 s 67 s
DiSCo 364, A + B (SNR → 10) + ladder 72 s 4 s 160 s 113 s

Before the split the device was held 77 s and 100 s for the first two runs (the files, the states, the figures and a 15 s host pass for the ingredient maps were inside the window), and every run at a field direction the host had not preloaded contracted the 8 GB field channels on the host inside the window (8 s; the default direction too, through a key mismatch, dmipy-sim#523). The reservation is 16 s + 0.045 s per measurement + 0.096 s per measurement for the ladder + (8 s + 0.032 s per measurement) for B + 10 s per extra tracker key, times 1.3. DiSCo 364 alone, with the ladder, and A + B + ladder all fit a logged-out visitor's 2 minutes.