10分钟上手EXAONE-Tabular:无需训练、单次前向预测的表格数据推理完整指南
EXAONE-Tabular 是 LG AI Research 发布的表格数据基础模型(foundation model),面向表格数据的分类与回归两大任务。它的最大特色是上下文学习(in-context learning):把训练数据直接交给fit,新数据在单次前向传播中完成预测——没有梯度更新,也不需要对每个数据集单独训练。本文是一份面向新手的 EXAONE-Tabular 入门教程,10 分钟带你完成安装、加载模型并跑通第一次表格推理。
EXAONE-Tabular 是什么:一个免训练的表格推理模型
🧠 传统流程里,每换一个数据集就要重新训练一次 LightGBM 或神经网络;而 EXAONE-Tabular 采用 Transformer 架构(Cross-axis Summary Transformer,简称 CAST),把带标签的行作为"上下文"读入,直接对新行做推理:
- 分类与回归双任务:分别提供
EXAONETabularClassifier和EXAONETabularRegressor两个估计器 - 规模小巧:分类模型约 20.8M 参数、回归模型约 21.1M 参数,推理成本极低(官方数据约 0.6 秒 / 1000 样本)
- benchmark 表现:在 TabArena 榜单上综合 Elo 达 1755,与参数量大得多的基础模型相当,分类任务 Elo 1759 位居第一
- sklearn 风格 API:熟悉的
fit/predict/predict_proba接口,可以直接放进你现有的 scikit-learn 工作流
模型结构速览(摘自 README.md):
| 配置项 | 数值 |
|---|---|
| 嵌入维度 | 192 |
| 注意力头数 | 6 |
| Transformer 层数 | 12 |
| 前馈扩展 | 4x |
| 分类 / 回归参数量 | ≈20.8M / ≈21.1M |
环境要求与一键安装:Python 3.11 + PyTorch 2.6 起步
⚙️ EXAONE-Tabular 对运行环境的要求很明确,安装一条命令即可完成:
运行环境
- Python≥ 3.11
- PyTorch≥ 2.6,< 3(强烈推荐 CUDA GPU——模型使用融合注意力内核和半精度,CPU 可以跑但较慢)
- NumPy ≥ 2.3.5 · scikit-learn ≥ 1.7.2 · safetensors ≥ 0.4 · huggingface_hub ≥ 0.24
安装命令(依赖会随包自动带上):
pip install "exaonetabular @ git+https://gitcode.com/hf_mirrors/LG-AI-Research/EXAONE-Tabular"验证安装:
import exaonetabular print(exaonetabular.__version__)💡 包内自带
huggingface_hub,调用from_pretrained时会自动下载并校验官方发布的权重文件,无需手动搬运 safetensors。
5分钟跑通表格分类:fit 不是训练,而是存入上下文
🏥 下面用一个标准的 scikit-learn 数据集跑通分类任务。注意fit这一行的注释——它不训练模型,只是保存上下文并拟合预处理器:
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from exaonetabular import EXAONETabularClassifier X_train, X_test, y_train, y_test = train_test_split( *load_breast_cancer(return_X_y=True), test_size=0.25, random_state=0 ) clf = EXAONETabularClassifier.from_pretrained(device="cuda:0") # 下载 + 校验 + 加载 clf.fit(X_train, y_train) # 不训练 —— 存上下文 + 拟合预处理器 proba = clf.predict_proba(X_test) # (n_samples, n_classes) labels = clf.predict(X_test) # (n_samples,)输入约定(新手最易踩的坑):
X必须是 2 维float的NumPy 数组(行数 × 特征数);y是 1 维数组- 分类 / 回归目标都要求数值化:字符串列请先编码为数字,缺失值留作
NaN(内置预处理器会自动均值填充) - 其他类型输入会抛出
TypeError: features must be a NumPy array
两个自动能力,无需配置:
- 类别数超过 10:分类头原生支持 10 类,更多类别会自动走 ECOC(错误校正输出编码)拆解为多次二分类,代价是推理时间随类别数增加
- 特征数超过 100 列:分类器会用模型自身的注意力机制自动挑选最有信息量的 100 列,宽表直接
fit即可
回归任务怎么用:999 分位数预测与自动标准化
📈 回归侧的 API 同样简洁,以糖尿病数据集为例:
from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split from exaonetabular import EXAONETabularRegressor X_train, X_test, y_train, y_test = train_test_split( *load_diabetes(return_X_y=True), test_size=0.25, random_state=0 ) reg = EXAONETabularRegressor.from_pretrained(device="cuda:0") reg.fit(X_train, y_train) # y: 实数值,必须有限 y_pred = reg.predict(X_test) # float64 点估计回归预测的三个要点:
- 模型头预测的是每行一个999 分位数的分布,
predict默认将其还原为"截断均值"(trimmed mean),更贴近条件均值——也就是 RMSE 考核的目标 - 目标值自动标准化:无需自己缩放
y,但y中不能出现NaN/inf - 集成权重自动拟合:
fit会留出 20% 的支持集、用最小二乘(NNLS)解出非负成员权重,让更适配当前表格的成员占更大话语权;当支持集超过约 10k 行(留出 ≥ 2000 行)时生效,小表自动回退为均匀平均
模型加载进阶:from_pretrained 的常用参数
🔧from_pretrained一次调用即可"下载 + 校验 + 加载",同时支持一批可选覆盖参数,不用改任何代码:
clf = EXAONETabularClassifier.from_pretrained( device="cuda:0", compute_dtype="bfloat16", # 默认 "float16" ensemble_count=8, seed=0, # 运行时旋钮 revision="main", # 锁定 Hub 上的特定版本 max_vram_bytes=24 << 30, # 显存预算上限 weights="/path/to/my.safetensors", # 也可加载同架构的自定义权重 )| 参数 | 说明 |
|---|---|
compute_dtype | 默认float16(精度高于 bf16);float32仅限 CPU,在 GPU 上会报RuntimeError: No available kernel |
max_vram_bytes | 显存硬上限(字节)。显存紧张时降低它,规划器会更激进地切块,速度变慢但结果不变 |
weights | 指向本地文件或直接改路径加载同架构权重;也可用环境变量EXAONETABULAR_CLASSIFIER_WEIGHTS/EXAONETABULAR_REGRESSOR_WEIGHTS指定 |
常见问题:NaN 输入、显存 OOM 与 sklearn 兼容性
❓问:字符串列能直接传进去吗?不能。X必须是数值矩阵,请先做稳定的序数编码,未见 / 缺失值留NaN。
❓问:GPU 上出现RuntimeError: No available kernel?你在 CUDA 设备上传了compute_dtype="float32"。注意力栈锁定 FlashAttention 内核,只实现 fp16 / bf16,请改回半精度。
❓问:CUDA 显存不足(OOM)怎么办?错误会原样抛给你,由调用方决策。按"对精度代价从小到大"依次尝试:降低max_vram_bytes(结果不变,只是变慢)→ 降低ensemble_count→ 通过RuntimeConfig(support_row_limit=…)缩小上下文支持集 → 换更大显存的 GPU。若确认是显存碎片而非真不够,在进程启动前设置:
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True python your_script.py❓问:能和 scikit-learn 的工具链配合吗?这些估计器实现了标准估计器接口(__sklearn_is_fitted__、__sklearn_tags__),可以作为Pipeline的最后一步,check_is_fitted、is_classifier/is_regressor均可用;但它们不继承BaseEstimator,因此不支持clone、cross_val_score、GridSearchCV。
仓库文件清单:权重、技术报告与许可证
📦 本仓库即官方推理运行时exaonetabular的权重与说明仓库,核心文件如下(相对路径):
| 文件 | 说明 |
|---|---|
| exaone-tabular-classifier-v1_default.safetensors | 分类模型权重(10 类头,float32,超 10 类自动 ECOC) |
| exaone-tabular-regressor-v1_default.safetensors | 回归模型权重(999 分位数头,float32,默认截断均值读出) |
| README.md | 完整文档:快速开始、超参数、benchmark 与限制说明 |
| EXAONE_Tabular_v1.0_Technical_Report.pdf | 官方技术报告(建议延伸阅读) |
| config.json | 模型元信息(model_name: EXAONE-Tabular) |
| LICENSE · Notice.md | 代码许可证与第三方依赖声明 |
⚠️ 两个任务的权重文件不可互用:分类权重装不进回归模型,架构与分位数间隔不匹配时会在加载阶段明确报错。
许可证与使用边界:代码可商用,权重仅限非商业
📌 这里必须区分两个对象,避免踩线:
- 仓库代码(
exaonetabular推理运行时):BSD-3-Clause 许可,允许商用 - 发布的模型权重:受EXAONE AI Model License Agreement 1.2 - NC约束,仅限非商业研究与教育用途
安装这个包并不会授予你对所下载权重的商用权利。此外,模型适用于结构化(行列)监督数据,不适合图像、原始文本、音视频等非结构化输入。
小结
✨ EXAONE-Tabular 把"表格建模"压缩成了三步:from_pretrained加载 →fit存入上下文 →predict单次前向出结果。约 21M 的参数、约 0.6 秒/1000 样本的预测开销,配合 sklearn 风格接口,让它成为做快速基线、数据探索和小样本场景时非常省心的表格数据推理工具。跑通本文两个示例后,建议继续阅读 EXAONE_Tabular_v1.0_Technical_Report.pdf 了解 CAST 架构与 benchmark 细节。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考