Skip to content

Conversation

@nicklamiller
Copy link
Contributor

Contributes to: #5163

  • Adds CUDABinaryErrorMetric
  • Minor code reorganization:
    • cuda_binary_metric.cpp - Move binary metric constructor definitions after CUDABinaryMetricInterface definition, analogous to how regression metric constructor definitions come after CUDARegressionMetricInterface:
      template <typename HOST_METRIC, typename CUDA_METRIC>
      std::vector<double> CUDARegressionMetricInterface<HOST_METRIC, CUDA_METRIC>::Eval(const double* score, const ObjectiveFunction* objective) const {
      const double* score_convert = score;
      if (objective != nullptr && objective->NeedConvertOutputCUDA()) {
      this->score_convert_buffer_.Resize(static_cast<size_t>(this->num_data_) * static_cast<size_t>(this->num_class_));
      score_convert = objective->ConvertOutputCUDA(this->num_data_, score, this->score_convert_buffer_.RawData());
      }
      double sum_loss = 0.0, sum_weight = 0.0;
      this->LaunchEvalKernel(score_convert, &sum_loss, &sum_weight);
      const double eval_score = this->AverageLoss(sum_loss, sum_weight);
      return std::vector<double>{eval_score};
      }
      CUDARMSEMetric::CUDARMSEMetric(const Config& config): CUDARegressionMetricInterface<RMSEMetric, CUDARMSEMetric>(config) {}
      CUDAL2Metric::CUDAL2Metric(const Config& config): CUDARegressionMetricInterface<L2Metric, CUDAL2Metric>(config) {}
      CUDAQuantileMetric::CUDAQuantileMetric(const Config& config): CUDARegressionMetricInterface<QuantileMetric, CUDAQuantileMetric>(config), alpha_(config.alpha) {}
      CUDAL1Metric::CUDAL1Metric(const Config& config): CUDARegressionMetricInterface<L1Metric, CUDAL1Metric>(config) {}
      CUDAHuberLossMetric::CUDAHuberLossMetric(const Config& config): CUDARegressionMetricInterface<HuberLossMetric, CUDAHuberLossMetric>(config), alpha_(config.alpha) {}
      CUDAFairLossMetric::CUDAFairLossMetric(const Config& config): CUDARegressionMetricInterface<FairLossMetric, CUDAFairLossMetric>(config) , fair_c_(config.fair_c) {}
      CUDAPoissonMetric::CUDAPoissonMetric(const Config& config): CUDARegressionMetricInterface<PoissonMetric, CUDAPoissonMetric>(config) {}
      CUDAMAPEMetric::CUDAMAPEMetric(const Config& config): CUDARegressionMetricInterface<MAPEMetric, CUDAMAPEMetric>(config) {}
      CUDAGammaMetric::CUDAGammaMetric(const Config& config): CUDARegressionMetricInterface<GammaMetric, CUDAGammaMetric>(config) {}
      CUDAGammaDevianceMetric::CUDAGammaDevianceMetric(const Config& config): CUDARegressionMetricInterface<GammaDevianceMetric, CUDAGammaDevianceMetric>(config) {}
      CUDATweedieMetric::CUDATweedieMetric(const Config& config): CUDARegressionMetricInterface<TweedieMetric, CUDATweedieMetric>(config) , tweedie_variance_power_(config.tweedie_variance_power) {}
    • cuda_pointwise_metric.cu and cuda_pointwise_metric.cpp - Break up regression and binary metric template instantiations

@jameslamb jameslamb added feature gpu (CUDA) Issue is related to the CUDA GPU variant. labels Oct 23, 2025
@nicklamiller
Copy link
Contributor Author

Hi @shiyu1994, it looks like you've done a lot of work on CUDA metrics in LightGBM. Can you please take a look at this PR when you have a chance?

Copy link
Collaborator

@jameslamb jameslamb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks correct to me.

I think if @shiyu1994 does not have time to review it soon (I agree he would be a better reviewer for it), we should just merge this.

Thanks for the help @nicklamiller !

@jameslamb jameslamb merged commit 09272a0 into microsoft:master Dec 10, 2025
87 of 89 checks passed
@nicklamiller nicklamiller deleted the binary-err-cuda branch December 10, 2025 05:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature gpu (CUDA) Issue is related to the CUDA GPU variant.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants