#7122·LightGBM

[CUDA] 在 n_unique_values * n_features 超过阈值时,使用离散数据时出现 SIGFPE (浮点异常)

作者: hiromuhana创建于 2026年1月9日更新于 2026年8月23日
标签buggpu (CUDA)

□ 说明

带有“device='cuda”的光GBM与SIGFPE(浮点特例)相撞,在单个值和特性数量超过一定阈值的离散数据上进行培训。

□ 可复制实例

2zz
导入 lgbm 为 lgb
将数字导入为 np

# FAIL: 5个离散值×600特性
X = np.random.randint (0, 5, (50000, 600))) stype (np. float32).
y = np.random.uniform(0, 1, 5000).astype(np.float32).

模型 = lgb.LGBMRegressor(device='cuda',n 估计者=10,动词=-1)
model.fit(X,y) # SIGAPE:浮点例外(核心倾销)

□ 测试结果

测试了5万行:

========================================================================================================================================================================================== |:|也. 传出 传出 传出 传出 传出 SIGPE 4 传出 传出 SIGPE 5 传出 SIGFPE SIGFPE 6 传出 SIGFPE SIGFPE 7 传出 SIGFPE SIGFPE 8 传出 SIGFPE SIGFPE

QQ 观察模式

崩溃阈值取决于独有值的数量和特性的数量:

  • 独特值 * * 大致安全列限制 * * * |:也.

3 - 4 | 600 - 700 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

这表明`n unique *n features'和可用的CUDA直方图箱之间的关系。

工作间

添加微小噪声会将离散值转换为连续并避免崩溃:

X = X.as类型(np.float32)
X \ np.random.uniform(-1e-6, 1e-6, X.shape). astype(np.float32).
现在训练成功

□ 真实世界的影响

此错误会影响 Numerai 锦标赛数据 :

  • 2.7M行×2376个特征
  • 有值{0, 1, 2, 3, 4} (5个离散值) 的 int8 dtype
  • 总是触发SIGPE与CUDA

□ 环境

  • LightGBM版本:4.6.0.99(来源为GCC 10所建)
  • CUDA版本:12.6
  • GPU: NVIDIA RTX 5000 Ada Center(计算机能力8.9)
  • 司机:572.16人
  • OS: Windows 11 + WSL2 (Ubuntu) + Docker (nvidia-Docker) 互联网档案馆的存檔,存档日期2014-12-20.
  • 齐特曼4: 3.10

□ 构建命令

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? cmake -B 构建 -S.

  • DUSE CUDA=1=1============================================================================================================ ==================================================== (=================================================================================
  • DCMake BUILD 类型 释放
  • DCMake C COMPILER=gcc-10=== (帮助) (中文(简体) ).
  • DCMake CQQCOMPILER=g++-10 (韩语) cmake -- -- 建设 -- -- j$(nproc) cd Python-package 安装 pip.

□ 注释

- CPU培训使用相同的数据。
- 这个问题似乎在CUDA直方图的分解逻辑中
- 行数不会对门槛产生重大影响

内容来源: lightgbm-org/LightGBM