TensorFlow2.4.1下Shap KernelExplainer运行慢,是否可通过GPU加速运行?
关于SHAP KernelExplainer GPU加速优化的解答
核心问题答复
KernelExplainer本身的特征扰动、采样逻辑为CPU原生实现,无法直接通过GPU运行这部分逻辑提速,但你传入的gpu_model=True参数可将你传入的model.predict预测步骤调度到GPU执行,只要你的TensorFlow环境GPU配置正确,就能获得预测环节的效率提升。
排查与优化方向
- 首先确认TensorFlow 2.4.1的GPU环境可用,运行以下代码验证:
import tensorflow as tf print(tf.test.is_gpu_available(cuda_only=True))
如果返回False,需要先安装对应版本的CUDA、cuDNN依赖(TF 2.4.1匹配CUDA 11.0、cuDNN 8.0),才能让gpu_model=True参数生效。
- 若GPU环境已正常配置,预测环节的加速上限有限,KernelExplainer的采样计算仍在CPU侧,可通过以下方式进一步优化耗时:
- 调整
shap_values的采样参数:默认采样数较高,可手动降低nsamples数值平衡速度与精度,示例修改如下:
# 可根据你的精度需求调整nsamples数值,默认值为2*特征数 + 2048 shap_values = explainer.shap_values(X_test[X_vars], nsamples=100)- 更换更适配深度学习模型的解释器:你使用的是TensorFlow的Sequential神经网络,完全可以替换为SHAP专门为深度学习模型开发的
DeepExplainer,原生支持GPU全链路加速,速度比通用的KernelExplainer高3~10倍,且计算精度更优,示例代码如下:
import shap # 背景数据集可以复用你之前的kmeans结果,也可以直接取小部分训练集 background = X_train[X_vars][:100] explainer = shap.DeepExplainer(model, background) shap_values = explainer.shap_values(X_test[X_vars]) - 调整
内容的提问来源于stack exchange,提问作者Rob van Bommel
相关产品推荐
相关产品推荐

