code: def _validate_canonical(self):
      super()._validate_canonical()
      if not self.machine_list:
          raise ValueError(
              f"RemoteConfig: must provide at least one machine in machine_list"
          )
      if not self.trial_gpu_number and any(
          machine.max_trial_number_per_gpu != 1
          for machine in self.machine_list
      ):
          raise ValueError(
              "RemoteConfig: max_trial_number_per_gpu does not work without trial_gpu_number"
          )
  
file_path: nni/nni/experiment/config/training_services/remote.py
imports: from dataclasses import dataclass
  from pathlib import Path
  from typing import List, Optional, Union
  import warnings
  from typing_extensions import Literal
  from ..base import ConfigBase
  from ..training_service import TrainingServiceConfig
  from ..None import utils
label_desc: Use image node_id 1 for calling the RemoteConfig obj's underlying member method code with example usage: obj._validate_canonical() without return types