Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 19:48
· 220 commits to main since this release
Immutable release. Only release title and notes can be modified.

Added

  • A run records how it ended and when. DLBoardLogger.finalize reports "success" as finished and
    "failed" as failed (POST /api/v1/runs/<id>/finish, a new path), stamped with the client's clock; the
    runs table gets a compact Status column (running, 3m 23s, 2d 3h, ✕ 1h 2m) that sorts by
    duration and filters by status. A script that exits without finalizing the logger is recorded as unknown;
    a process killed outright never reports, so its run stays running. Two nullable columns are
    added to Run by migration 0002 (expand-only: run dlboard servers upgrade first, as always); an older
    server answers 404 to the new path and the client carries on.
  • Suggest charts is a selection list, not one add button per key: a filter (by key or target panel), a
    By name / By panel sort, Select all and Clear for what the filter shows, and Add selected (N),
    which adds everything ticked in a single page update (65 charts at once on the advanced example, instead of
    65 clicks and 65 rebuilds). The one-click add on each row is still there.
  • Artifact tags (on Image, Figure, File, Link and anything implementing AnyArtifact) accept
    numbers and booleans as well as strings, and format them identically wherever they come from (floats to
    four significant digits). Callers no longer stringify, and so no longer disagree. Tags are still stored
    as text -- a numeric tag would be rejected by an older server, which the supported version skew allows.
  • DLBoardLogger flattens nested hyperparameters, like Lightning's own loggers do: a pydantic model,
    a pydantic or stdlib dataclass, a Namespace or a plain dict, nested however deeply, is logged as
    parent/child keys instead of being rejected. Pydantic does the serializing, so a model's own
    aliases and field serializers apply. Lists are stored as a JSON string. See flatten_hparams.
  • DLBoardLogger(log_model=...) uploads ModelCheckpoint checkpoints, like the MLflow and W&B
    loggers: "all" as each one is saved, True only the ones kept once training finishes. Backed by
    the new dlboard.client.artifacts.file.File artifact kind, which uploads a file in place and tags
    what it is (FileKind.CHECKPOINT).
  • examples/lightning_advanced.py: a 25-epoch UNet on synthetic shapes with nested hyperparameters,
    Lightning's learning-rate, throughput and device-stats callbacks, checkpoints, and segmentation and
    bounding-box previews -- a deliberately heavy run for exercising the UI.

Changed

  • A checkpoint (anything logged as a File) now gets a file list with download links when charts are
    auto-generated or suggested, instead of an image chart full of broken images. It's the new built-in
    files chart type. Chart types now say which artifacts they can display (ChartType.can_display_artifact),
    and an artifact no chart type claims gets no generated chart at all.
  • Image artifacts are encoded as lossless PNG by default instead of always as lossy JPEG, so masks,
    label images and overlays are no longer degraded on upload. Pass format="jpg" to keep the old,
    smaller files. Artifacts already stored are unchanged.
  • A panel's header shows how many charts it holds, so you can tell how big it is before expanding it.

Fixed

  • dlboard and dlboard-client now import together when each is installed into its own directory on sys.path, as
    hermetic builds such as Bazel do. The client's regular dlboard package used to hide the server's half
    (dlboard.serve, dlboard.plugins), so depending on dlboard failed to import it. dlboard/__init__.py now
    extends its __path__ with pkgutil.extend_path. Ordinary single-directory installs are unaffected.
  • Creating charts with Auto-generate no longer makes the page wait for the first panel to draw when that panel
    is big. A panel opens by itself only if it holds 12 charts or fewer (otherwise the first small one does,
    or none); a big panel stays closed with its chart count on its header. On a run with 886 charts the
    default grouping now shows its panels in about 1.6 s instead of 5.8 s.
  • Switching Prefix/Suffix in the Auto-generate charts dialog no longer freezes the page for seconds on an
    experiment with many metrics: the preview lists the first 20 panels and counts the rest (239 panels took
    the browser about 3 s to draw; it takes about 0.1 s now).
  • Changing a Grid panel's charts-per-row no longer rebuilds every chart in the panel. The browser applies the
    new column count itself and the server only saves it, so a panel with over a hundred charts freezes the
    page for about a quarter of the time (0.8s instead of 3s per click, measured on 126 charts).
  • A chart could show the wrong image when the browser had visited another dlboard database at the same
    address (a wiped or restored database, or a different --sqlite-location). Artifact URLs are keyed by
    id, ids start over in a new database, and the browser was told to cache them for a year; so artifact
    5 of the old database was shown in place of artifact 5 of the new one. Artifact URLs now carry a
    version token (?v=) that changes with the artifact behind the id.
  • A long metric name no longer spills its y-axis title out of the chart (over the chart header and the
    charts beside it): titles are shortened to fit, keeping the end of the name. How long a title may be is a
    setting of the line and bar charts (max_axis_label_chars, 36 by default).
  • Metrics and artifacts logged by a later stage were never shipped when a script exited right after
    it -- notably everything trainer.test logs after trainer.fit. Lightning finalizes the logger
    after every stage, but only the first call flushed.