train/loss
2.48
optim/lr/group0
0.0005
perf/samples_per_s
1,284
Scalars
Loss, learning rate, throughput and host metrics on live charts, with nanosecond observation times.
Telemetry and control for training runs
LaunchHelm charts your training runs as they log and lets you change them while they train. Add the Python SDK to your loop for live metrics, controls, checkpoints and alerts.
pip install launchhelm
Controls · History
lr
Applied“Loss plateaued”
Available controls
Participants
01Live telemetry
Metrics land in LaunchHelm the moment your loop logs them. Scalars chart per stream. Rich values render in place.
train/loss
2.48
optim/lr/group0
0.0005
perf/samples_per_s
1,284
Loss, learning rate, throughput and host metrics on live charts, with nanosecond observation times.
Missing and explicit-null points stay visible as gaps. Smoothing is a view you turn on.
| step | val/loss |
|---|---|
| 3000 | 3.02 |
| 6000 | Missing |
| 9000 | 2.78 |
| 12000 | 2.61 |
Query any stream's stored points back in bounded pages, or let an agent read them over MCP.
epoch 3
loss 0.25, eval queued
| trial | lr | loss |
|---|---|---|
| a | 0.001 | 0.42 |
| b | 0.003 | 0.31 |
Text, images, tables and histograms log from the same run and render beside its charts.
02Live control
Your loop declares safe points and typed controls. LaunchHelm renders each one as a form. A change applies at the next safe point, between steps.
1You write a typed function
class Schedule:
def set_lr(self, lr: float) -> None:
"""Store the requested learning rate."""
self.lr = lr
with launchhelm.init("quickstart", config={"lr": schedule.lr}) as run:
run.command("after_step")(schedule.set_lr)
for step in range(60):
loss = 2.0 / (step + 1)
run.log({"loss": loss, "lr": schedule.lr}, step=step)
run.sync("after_step", step=step)
2The run's Controls tab shows the form
Applied the next time the run reaches “after_step”.
An unknown outcome is never retried for you. The run keeps what was requested and what was applied, so the next move is your decision.
Control and tunables03Resilience
One call saves model, optimizer, scheduler, step and RNG state. A relaunched process resumes the same run and restores the latest checkpoint.
Checkpoints and resumeRules watch streams and sessions: a NaN loss, a stream that stops producing, a session that drops. Notifications go to the in-app feed, email or a webhook.
Alerts and notificationsPoints logged before a crash persist on the training machine and upload when the run resumes. Commands, artifacts and sessions stay attached to the run.
Concepts04Integrations
The SDK runs inside your process, on your machine or a cloud job. Use it in a plain loop, across distributed ranks or through a framework callback.
Watch a model and optimizer once, then log, clip and apply
controls inside tr.step. Tunables become
dashboard fields.
pip install "launchhelm[torch]"
tr = lht.init("quickstart", name="torch-quickstart", config={"lr": 0.01})
tr.watch(model, optimizer)
dropout_p = tr.tunable("dropout_p", 0.0, minimum=0.0, maximum=0.9)
for step in range(20):
optimizer.zero_grad()
loss = torch.nn.functional.mse_loss(model(x), y)
loss.backward()
tr.clip_grad_norm_()
optimizer.step()
tr.step(step=step, loss=loss.item())
Every rank joins the same run as its own participant. A control applies on every rank at the same step.
tr = lht.init("quickstart", name="ddp-run", system_metrics=True)
tr.watch(model, optimizer)
for step in range(20):
optimizer.zero_grad()
loss = torch.nn.functional.mse_loss(model(x), y)
loss.backward()
optimizer.step()
# step() is the collective control point: call it on every rank at
# the same cadence.
tr.step(step=step, loss=loss.item())
One callback opens the run, logs on every logging step, applies dashboard controls at step end and uploads each checkpoint save.
pip install "launchhelm[hf]"
from launchhelm.torch.hf import LaunchHelmCallback
trainer = Trainer(
model=Tiny(),
args=args,
train_dataset=Rows(),
callbacks=[LaunchHelmCallback("quickstart")],
)
trainer.train()
The same callback pattern for a Lightning
Trainer. Your self.log calls flow
through to LaunchHelm streams.
pip install "launchhelm[lightning]"
from launchhelm.torch.lightning import LaunchHelmCallback
trainer = Trainer(
max_epochs=1,
callbacks=[LaunchHelmCallback("quickstart", name="lightning-example")],
enable_progress_bar=False,
enable_model_summary=False,
logger=False,
default_root_dir="/tmp/lh-lightning-example",
)
trainer.fit(Module(), train_dataloaders=DataLoader(Rows(), batch_size=4))
CPU, memory, disk, network and per-GPU stats stream alongside your metrics.
pip install "launchhelm[system]"
import launchhelm
import launchhelm.system
with launchhelm.init("quickstart", name="system-demo") as run:
launchhelm.system.start(run, interval=2.0)
for step in range(8):
run.log({"loss": 2.0 / (step + 1)}, step=step)
05Agents
LaunchHelm serves a Model Context Protocol endpoint at
/mcp. Connect an agent client by signing in or with
an API key.
Read only lets an agent browse projects, runs, metrics and controls history. Full access lets it send controls.
Limit a connection to a single project when you approve it.
Connected apps are listed under Settings → API keys.
Tools the agent can call
launchhelm.get_context
read
launchhelm.list_documents
read
launchhelm.run_query
read
launchhelm.read_samples
read
launchhelm.list_commands
read
launchhelm.submit_command
full access
06Workspace
Projects, runs and people live in one organization. Allowances are shared across members.
Pick a metric to see where every run that logs it stands.
Invite by email or share a link. Choose Member or Observer, set an expiry and limit a link to your email domains.
Download a run as an archive. Import an archive into a project.
Create a key for all projects or limit it to one. Each key is shown once.
07Get started
Open Settings → API keys and create a key. It is shown once with the lines to export. Save it before you leave the page.
pip install launchhelm on Python 3.11+ for
macOS, Linux and Windows.
The run appears in your project with its
loss stream.
import launchhelm
with launchhelm.init("quickstart", name="first-run", config={"lr": 0.0003}) as run:
for step in range(8):
loss = 2.0 / (step + 1)
run.log({"loss": loss, "lr": 0.0003}, step=step)
Logging, a durable local queue, safe-point commands, artifacts, checkpoints and the PyTorch adapter.
Python guideTypeScript, Rust and C++ SDKs are coming soon.
Start
Create an account, make an API key and run
pip install launchhelm. Your run charts as soon as your
loop logs.