Skip to content

2026-08-27 clinical ve2e ISUP inference integration

Consolidated the ve2e data pipeline, rebased ISUP inference onto unify-vits, and validated its container entrypoint.

Work Done

  • Implemented a PHI-redacted predict_isup API and CLI for self-contained ClearML EMA models, patient preprocessing, six-class ISUP predictions, and separate biopsy/RPE QWK results on feat/isup-inference.
  • Moved the standalone data/ pipeline into src/ve2e/data_pipeline, merged its direct dependencies into the root Pixi environment, preserved the generate task, and simplified Dockerfile.argo to one environment.
  • Rebased the feature branch onto the new unify-vits base and force-pushed it at 12f69e9d. Updated inference to use the unified Lightning forward path, transfer/pass pmask, and apply model output processors required by DinoFlex background masking and map-derived ISUP grading.
  • Validated Ruff, complexity <=8, lockfile consistency, wheel inclusion of YAML configs, and call paths with calldiff. Existing mypy failures remained limited to 15 baseline errors in two unrelated files.
  • Built and signed the Tekton image and ran Argo workflow run-ve2e-smoke-retry-2z9x9. The workflow succeeded: the CLI imported the consolidated runtime, reached PHI-safe empty-patient validation, returned the expected code 1, and the assertion wrapper returned 0. No PR was created.

Lessons Learned: Pitfalls

  • kuberun derives labels from the final command token and the Argo template stores CMD inside single quotes. Long Python expressions need a simple final label token, and Python literals must use double quotes or the template strips them.
  • kuberun run reports a job as healthy after 30 seconds but does not wait for workflow completion. Application success must be checked directly in Argo.
  • Manually deleting a pod in ImagePullBackOff can leave the Argo node pending without a replacement. Recreating the workflow from the already-built image is more reliable.
  • Tekton’s build task invokes BuildKit twice and captures the first invocation’s successful output. Cold dependency/cache exports can therefore look unexplained and take much longer than visible BuildKit timings.
  • Running git rebase --continue without GIT_EDITOR=true in a non-interactive tool can wait indefinitely for an editor.

Lessons Learned: Improvements

  • Add a documented kuberun smoke-test pattern that uses a checked-in or standard assertion wrapper instead of nested shell/Python quoting.
  • Add a kuberun option to wait for final Argo completion and return the workload exit status.
  • Fix label sanitization to strip invalid trailing characters after truncation.
  • Improve Tekton logs by streaming the first BuildKit invocation and timing cache export separately.
  • Document that consolidated data-pipeline inference must call the Lightning module, not the bare architecture, and must transfer pmask for unified output processors.
Navigation

Type to search…

↑↓ navigate↵ selectEsc close