File size: 4,704 Bytes
b043bdf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | ---
license: bsd-3-clause
library_name: onnx
base_model: jingang/TabICL
base_model_relation: quantized
pipeline_tag: tabular-classification
tags:
- onnx
- onnxruntime-web
- webgpu
- tabicl
- tabular-classification
- tabular-regression
- tabular-foundation-model
- in-context-learning
---
# TabICLv2 for onnxruntime-web
An unofficial ONNX conversion of [TabICLv2](https://huggingface.co/jingang/TabICL)
by Jingang Qu, David Holzmüller, Gaël Varoquaux and Marine Le Morvan (Soda
team, Inria), made for Tabular Data Workbench, which runs it in the browser
with onnxruntime-web on WebGPU or WebAssembly. The weights are those of the
upstream checkpoints: unchanged in the `fp32` variant, and with the larger
ones rounded to float16 in the `f16w` variant. The Soda team has not reviewed
or endorsed this conversion.
## Files
Each task (`classifier`, `regressor`) is cut into three graphs:
| file | inputs | output |
| --- | --- | --- |
| `<task>-col.<v>.onnx` | `X` (batch, columns, rows, 3) feature-group columns, `y` (batch, digits, train) | `E` (batch, columns, rows, 128) |
| `<task>-row.<v>.onnx` | `E` (batch, columns, rows, 128) | `R` (batch, rows, 512) |
| `<task>-icl.<v>.onnx` | `R` (batch, rows, 512), `y` (batch, train) | `out` (batch, test, 10 logits or 999 quantiles) |
Each graph comes in two variants (`<v>`):
- `fp32`: the checkpoint's weights as they are (225 MB for both tasks).
- `f16w`: every float32 weight of 1,024 or more elements stored as float16
and cast back to float32 on load (113 MB). Compute stays float32, so it runs
on the WebGPU and WebAssembly providers alike.
`manifest.json` lists every file with its size, sha256, inputs and outputs,
and the int64 shape nodes (`cpuNodes`, one in each `row` graph) that the app
pins to the CPU provider on WebGPU. The graphs contain no int64 shape
arithmetic, which onnxruntime-web's WebGPU provider has been seen to corrupt.
The graphs are the network only. Preprocessing (imputation, the
normalisation choices, outlier clipping), the ensemble of column and class
permutations, the mixed-radix digits for more than 10 classes and the
averaging stay outside them, as in the reference package. The app ports
those to TypeScript; `models/tabicl/pipeline.py` in Tabular Data Workbench is
the numpy reference.
## How they were made
Source: `jingang/TabICL` at revision `4dcd344ece2c00be9e831fdd35bed57b5ad83e19`
(`tabicl-classifier-v2-20260212.ckpt`, `tabicl-regressor-v2-20260212.ckpt`),
with the `tabicl` 2.2.0 package's model code.
```sh
cd models/tabicl
uv run export.py # writes public/models/tabicl/
uv run verify.py # parity table against tabicl
```
`export.py` (in `models/tabicl/` of Tabular Data Workbench) splits the
network in `exportable.py`, exports each part with `torch.onnx` (dynamo,
opset 18, PyTorch 2.14 on CPU), removes the exporter's node metadata and doc
strings, and checks the split graphs against tabicl's own forward pass before
writing the manifest.
## Parity
`verify.py` runs `TabICLClassifier` and `TabICLRegressor` (tabicl 2.2.0, CPU,
float32, 8 estimators, seed 42), replays the ensemble it drew through the
ONNX graphs in onnxruntime 1.30 (CPU) and compares the final predictions:
| dataset | fp32 | f16w |
| --- | --- | --- |
| breast_cancer (probabilities) | 2.8e-6 | 5.8e-4 |
| breast_cancer with 5% missing | 1.6e-6 | 3.4e-4 |
| wine | 8.3e-7 | 2.8e-4 |
| 14 classes (synthetic) | 1.5e-6 | 7.1e-4 |
| diabetes (mean, in units of the target's sd) | 2.3e-6 | 4.7e-4 |
| diabetes (quantiles, in units of the target's sd) | 2.4e-6 | 6.4e-4 |
The figures are maximum absolute differences. Predicted classes agree with
tabicl on every row of every dataset in both variants.
## Licence
BSD-3-Clause, the licence of TabICL's code and of the v2 checkpoints
(`license: bsd-3-clause` on `jingang/TabICL`). The licence text with the
copyright notice (Copyright (c) 2025, Soda team @ Inria) is in `LICENSE`
beside the graphs and must stay with them. The licence does not allow the
names of Inria or the Soda team to be used to endorse or promote products
derived from these files.
## Citation
```bibtex
@inproceedings{qu2025tabicl,
title={Tab{ICL}: {A} Tabular Foundation Model for In-Context Learning on Large Data},
author={Qu, Jingang and Holzm{\"u}ller, David and Varoquaux, Ga{\"e}l and Le Morvan, Marine},
booktitle={International Conference on Machine Learning},
year={2025}
}
@article{qu2026tabiclv2,
title={{TabICLv2}: {A} better, faster, scalable, and open tabular foundation model},
author={Qu, Jingang and Holzm{\"u}ller, David and Varoquaux, Ga{\"e}l and Le Morvan, Marine},
journal={arXiv preprint arXiv:2602.11139},
year={2026}
}
```
|