From 9ce5fa537110535574589b003d6d4aa112cc6f8d Mon Sep 17 00:00:00 2001 From: Amrit Krishnan Date: Wed, 21 Oct 2026 00:04:41 -0400 Subject: [PATCH] release: 0.14.1 TabICL no longer compiles graphs inside requests after warmup (#47, #67). Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 ++ README.md | 4 ++-- pyproject.toml | 2 +- uv.lock | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6378add..f1cdf07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] + +## [0.14.1] - 2026-10-21 ### Fixed - **TabICL compiled new graphs inside requests** (#47): call shapes warmup didn't cover -- tables of ~20k+ rows (differently strided inputs), 1,024+-row regression predicts, and variants that overlapping calls on one worker produce -- each compiled 1-7 graphs inside the request that hit them, 5-25 s on an A100 and ~4x that on prod's A40s, holding the device so other models' calls waited too. On prod, a 5,000 x 500 TabICL fit compiled 3 graphs on every call (25.8 s, `timings_ms` from 0.14.0). Once every backend in a process has warmed up (`serve/factory.finish_warmup`: after all devices of an in-process engine, or a worker process's one), a call no compiled graph fits now runs eagerly instead (`torch.compiler.set_stance("eager_on_recompile")`, process-wide, only where compiled blocks were installed). On an A100: a first 20,000 x 100 fit 12.5 s -> 3.0 s, a first 1,000-row regression predict 1.8 s -> 0.14 s; eager costs ~30% on those families once a compile would have been paid (20,000 x 100 2.3 s compiled vs 2.9 s eager). `TABCTX_COMPILE_AFTER_WARMUP=1` restores compiling them. ### Added diff --git a/README.md b/README.md index cd0fd9a..85b122f 100644 --- a/README.md +++ b/README.md @@ -504,8 +504,8 @@ spillover, multi-replica routing and multi-GPU replicas with a worker process per GPU have all shipped and been validated on real GPUs (see [CHANGELOG.md](CHANGELOG.md)); 0.14.0 infers the task from the labels, accepts missing values, and reports where each request's time went -(`timings_ms`). Vector's 4x A40 prod node serves 0.13.0 until it is -updated. Open roadmap items are +(`timings_ms`); 0.14.1 stops TabICL compiling graphs inside requests +(#47). Vector's 4x A40 prod node serves 0.14.0 until it is updated. Open roadmap items are tracked as GitHub issues labelled `roadmap`. **Read [ROADMAP.md](ROADMAP.md) before starting new work** -- it ranks what's next and why. diff --git a/pyproject.toml b/pyproject.toml index cf86af0..9f40f13 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "tabctx" -version = "0.14.0" +version = "0.14.1" description = "Serving engine for tabular foundation models (TabICL, TabPFN): fit a table once, keep its encoded context on the GPU, and serve fast repeat predictions to many tenants, with memory-aware admission and multi-GPU placement." readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 6703cc3..df238ff 100644 --- a/uv.lock +++ b/uv.lock @@ -3201,7 +3201,7 @@ wheels = [ [[package]] name = "tabctx" -version = "0.14.0" +version = "0.14.1" source = { editable = "." } dependencies = [ { name = "numpy" },