diff --git a/demo/gpu_acceleration/shap.ipynb b/demo/gpu_acceleration/shap.ipynb index bab66c9092cc..660945d6d42b 100644 --- a/demo/gpu_acceleration/shap.ipynb +++ b/demo/gpu_acceleration/shap.ipynb @@ -101,9 +101,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 47.5 s\n" + ] + } + ], "source": [ "%%time\n", "# Compute shap interaction values using GPU\n", @@ -112,9 +120,93 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Setting feature_perturbation = \"tree_path_dependent\" because no background data was given.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 3.75 s\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + " Visualization omitted, Javascript library not loaded!
\n", + " Have you run `initjs()` in this notebook? If this notebook was from another\n", + " user you must also trust this notebook (File -> Trust notebook). If you are viewing\n", + " this notebook on github the Javascript has been stripped for security. If you are using\n", + " JupyterLab this error is because a JupyterLab extension has not yet been written.\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# We can use the shap package\n", "import shap\n", @@ -137,9 +229,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Show a summary of feature importance\n", "shap.summary_plot(shap_values, X, plot_type=\"bar\", feature_names=data.feature_names)" diff --git a/src/predictor/gpu_predictor.cu b/src/predictor/gpu_predictor.cu index d8c3e5c065df..69e10a162034 100644 --- a/src/predictor/gpu_predictor.cu +++ b/src/predictor/gpu_predictor.cu @@ -671,17 +671,6 @@ class GPUPredictor : public xgboost::Predictor { model.learner_model_param->num_output_group); out_contribs->Fill(0.0f); auto phis = out_contribs->DeviceSpan(); - p_fmat->Info().base_margin_.SetDevice(generic_param_->gpu_id); - const auto margin = p_fmat->Info().base_margin_.ConstDeviceSpan(); - float base_score = model.learner_model_param->base_score; - // Add the base margin term to last column - dh::LaunchN( - generic_param_->gpu_id, - p_fmat->Info().num_row_ * model.learner_model_param->num_output_group, - [=] __device__(size_t idx) { - phis[(idx + 1) * contributions_columns - 1] = - margin.empty() ? base_score : margin[idx]; - }); dh::device_vector device_paths; ExtractPaths(&device_paths, model, real_ntree_limit, @@ -695,6 +684,17 @@ class GPUPredictor : public xgboost::Predictor { X, device_paths.begin(), device_paths.end(), ngroup, phis.data() + batch.base_rowid * contributions_columns, phis.size()); } + // Add the base margin term to last column + p_fmat->Info().base_margin_.SetDevice(generic_param_->gpu_id); + const auto margin = p_fmat->Info().base_margin_.ConstDeviceSpan(); + float base_score = model.learner_model_param->base_score; + dh::LaunchN( + generic_param_->gpu_id, + p_fmat->Info().num_row_ * model.learner_model_param->num_output_group, + [=] __device__(size_t idx) { + phis[(idx + 1) * contributions_columns - 1] += + margin.empty() ? base_score : margin[idx]; + }); } void PredictInteractionContributions(DMatrix* p_fmat, @@ -726,10 +726,23 @@ class GPUPredictor : public xgboost::Predictor { model.learner_model_param->num_output_group); out_contribs->Fill(0.0f); auto phis = out_contribs->DeviceSpan(); + + dh::device_vector device_paths; + ExtractPaths(&device_paths, model, real_ntree_limit, + generic_param_->gpu_id); + for (auto& batch : p_fmat->GetBatches()) { + batch.data.SetDevice(generic_param_->gpu_id); + batch.offset.SetDevice(generic_param_->gpu_id); + SparsePageView X(batch.data.DeviceSpan(), batch.offset.DeviceSpan(), + model.learner_model_param->num_feature); + gpu_treeshap::GPUTreeShapInteractions( + X, device_paths.begin(), device_paths.end(), ngroup, + phis.data() + batch.base_rowid * contributions_columns, phis.size()); + } + // Add the base margin term to last column p_fmat->Info().base_margin_.SetDevice(generic_param_->gpu_id); const auto margin = p_fmat->Info().base_margin_.ConstDeviceSpan(); float base_score = model.learner_model_param->base_score; - // Add the base margin term to last column size_t n_features = model.learner_model_param->num_feature; dh::LaunchN( generic_param_->gpu_id, @@ -738,22 +751,10 @@ class GPUPredictor : public xgboost::Predictor { size_t group = idx % ngroup; size_t row_idx = idx / ngroup; phis[gpu_treeshap::IndexPhiInteractions( - row_idx, ngroup, group, n_features, n_features, n_features)] = + row_idx, ngroup, group, n_features, n_features, n_features)] += margin.empty() ? base_score : margin[idx]; }); - dh::device_vector device_paths; - ExtractPaths(&device_paths, model, real_ntree_limit, - generic_param_->gpu_id); - for (auto& batch : p_fmat->GetBatches()) { - batch.data.SetDevice(generic_param_->gpu_id); - batch.offset.SetDevice(generic_param_->gpu_id); - SparsePageView X(batch.data.DeviceSpan(), batch.offset.DeviceSpan(), - model.learner_model_param->num_feature); - gpu_treeshap::GPUTreeShapInteractions( - X, device_paths.begin(), device_paths.end(), ngroup, - phis.data() + batch.base_rowid * contributions_columns, phis.size()); - } } protected: