class_docstr: This class defines the certain operation implementation for the GPU-based CuML operations
  defined in operation repository
  :param str operation_type: str type of the operation defined in operation or
  data operation repositories
  :param dict params: hyperparameters to fit the operation with
class_docstr_tok: ["This","class","defines","the","certain","operation","implementation","for","the","GPU-based","CuML","operations","defined","in","operation","repository",":","param","str","operation_type",":","str","type","of","the","operation","defined","in","operation","or","data","operation","repositories",":","param","dict","params",":","hyperparameters","to","fit","the","operation","with"]
docstr: This method is used for operation training with the data provided
  :param InputData train_data: data used for operation training
  :return: trained cuML operation
docstr_tok: ["This","method","is","used","for","operation","training","with","the","data","provided",":","param","InputData","train_data",":","data","used","for","operation","training",":","return",":","trained","cuML","operation"]
code: def fit(self, train_data: InputData):
      """
      This method is used for operation training with the data provided
      :param InputData train_data: data used for operation training
      :return: trained cuML operation
      """
      warnings.filterwarnings("ignore", category=RuntimeWarning)
      operation_implementation = self.operation_impl(
          **self.params_for_fit.to_dict()
      )
  
      # If model doesn't support multi-output and current task is ts_forecasting
      current_task = train_data.task.task_type
      models_repo = OperationTypesRepository()
      non_multi_models = models_repo.suitable_operation(
          task_type=current_task, tags=["non_multi"]
      )
      is_model_not_support_multi = (
          self.operation_type in non_multi_models
      )
      features = cudf.DataFrame(train_data.features.astype("float32"))
      target = cudf.Series(
          train_data.target.flatten().astype("float32")
      )
  
      if (
          is_model_not_support_multi
          and current_task == TaskTypesEnum.ts_forecasting
      ):
          raise NotImplementedError("Not supported for GPU yet")
          # TODO Manually wrap the regressor into multi-output model
      else:
          with ImplementationRandomStateHandler(
              implementation=operation_implementation
          ):
              operation_implementation.fit(features, target)
      return operation_implementation
  
file_path: FEDOT/fedot/core/operations/evaluation/gpu/common.py
imports: import warnings
  from abc import abstractmethod
  from typing import Optional
  from golem.utilities.requirements_notificator import warn_requirement
  from fedot.utilities.custom_errors import AbstractMethodNotImplementError
  from fedot.core.data.data import InputData, OutputData
  from fedot.core.operations.evaluation.evaluation_interfaces import SkLearnEvaluationStrategy
  from fedot.core.repository.operation_types_repository import OperationTypesRepository
  from fedot.core.repository.tasks import TaskTypesEnum
  from fedot.utilities.random import ImplementationRandomStateHandler
label_desc: Use image node_id 2 for calling the CuMLEvaluationStrategy obj's underlying member method code with example usage: obj.fit(train_data) and returns: operation_implementation