{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Amazonka.SageMaker.Types.TrainingSpecification -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) module Amazonka.SageMaker.Types.TrainingSpecification where import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import qualified Amazonka.Prelude as Prelude import Amazonka.SageMaker.Types.ChannelSpecification import Amazonka.SageMaker.Types.HyperParameterSpecification import Amazonka.SageMaker.Types.HyperParameterTuningJobObjective import Amazonka.SageMaker.Types.MetricDefinition import Amazonka.SageMaker.Types.TrainingInstanceType -- | Defines how the algorithm is used for a training job. -- -- /See:/ 'newTrainingSpecification' smart constructor. data TrainingSpecification = TrainingSpecification' { -- | A list of @MetricDefinition@ objects, which are used for parsing metrics -- generated by the algorithm. metricDefinitions :: Prelude.Maybe [MetricDefinition], -- | A list of the @HyperParameterSpecification@ objects, that define the -- supported hyperparameters. This is required if the algorithm supports -- automatic model tuning.> supportedHyperParameters :: Prelude.Maybe [HyperParameterSpecification], -- | A list of the metrics that the algorithm emits that can be used as the -- objective metric in a hyperparameter tuning job. supportedTuningJobObjectiveMetrics :: Prelude.Maybe [HyperParameterTuningJobObjective], -- | Indicates whether the algorithm supports distributed training. If set to -- false, buyers can\'t request more than one instance during training. supportsDistributedTraining :: Prelude.Maybe Prelude.Bool, -- | An MD5 hash of the training algorithm that identifies the Docker image -- used for training. trainingImageDigest :: Prelude.Maybe Prelude.Text, -- | The Amazon ECR registry path of the Docker image that contains the -- training algorithm. trainingImage :: Prelude.Text, -- | A list of the instance types that this algorithm can use for training. supportedTrainingInstanceTypes :: [TrainingInstanceType], -- | A list of @ChannelSpecification@ objects, which specify the input -- sources to be used by the algorithm. trainingChannels :: Prelude.NonEmpty ChannelSpecification } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'TrainingSpecification' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'metricDefinitions', 'trainingSpecification_metricDefinitions' - A list of @MetricDefinition@ objects, which are used for parsing metrics -- generated by the algorithm. -- -- 'supportedHyperParameters', 'trainingSpecification_supportedHyperParameters' - A list of the @HyperParameterSpecification@ objects, that define the -- supported hyperparameters. This is required if the algorithm supports -- automatic model tuning.> -- -- 'supportedTuningJobObjectiveMetrics', 'trainingSpecification_supportedTuningJobObjectiveMetrics' - A list of the metrics that the algorithm emits that can be used as the -- objective metric in a hyperparameter tuning job. -- -- 'supportsDistributedTraining', 'trainingSpecification_supportsDistributedTraining' - Indicates whether the algorithm supports distributed training. If set to -- false, buyers can\'t request more than one instance during training. -- -- 'trainingImageDigest', 'trainingSpecification_trainingImageDigest' - An MD5 hash of the training algorithm that identifies the Docker image -- used for training. -- -- 'trainingImage', 'trainingSpecification_trainingImage' - The Amazon ECR registry path of the Docker image that contains the -- training algorithm. -- -- 'supportedTrainingInstanceTypes', 'trainingSpecification_supportedTrainingInstanceTypes' - A list of the instance types that this algorithm can use for training. -- -- 'trainingChannels', 'trainingSpecification_trainingChannels' - A list of @ChannelSpecification@ objects, which specify the input -- sources to be used by the algorithm. newTrainingSpecification :: -- | 'trainingImage' Prelude.Text -> -- | 'trainingChannels' Prelude.NonEmpty ChannelSpecification -> TrainingSpecification newTrainingSpecification pTrainingImage_ pTrainingChannels_ = TrainingSpecification' { metricDefinitions = Prelude.Nothing, supportedHyperParameters = Prelude.Nothing, supportedTuningJobObjectiveMetrics = Prelude.Nothing, supportsDistributedTraining = Prelude.Nothing, trainingImageDigest = Prelude.Nothing, trainingImage = pTrainingImage_, supportedTrainingInstanceTypes = Prelude.mempty, trainingChannels = Lens.coerced Lens.# pTrainingChannels_ } -- | A list of @MetricDefinition@ objects, which are used for parsing metrics -- generated by the algorithm. trainingSpecification_metricDefinitions :: Lens.Lens' TrainingSpecification (Prelude.Maybe [MetricDefinition]) trainingSpecification_metricDefinitions = Lens.lens (\TrainingSpecification' {metricDefinitions} -> metricDefinitions) (\s@TrainingSpecification' {} a -> s {metricDefinitions = a} :: TrainingSpecification) Prelude.. Lens.mapping Lens.coerced -- | A list of the @HyperParameterSpecification@ objects, that define the -- supported hyperparameters. This is required if the algorithm supports -- automatic model tuning.> trainingSpecification_supportedHyperParameters :: Lens.Lens' TrainingSpecification (Prelude.Maybe [HyperParameterSpecification]) trainingSpecification_supportedHyperParameters = Lens.lens (\TrainingSpecification' {supportedHyperParameters} -> supportedHyperParameters) (\s@TrainingSpecification' {} a -> s {supportedHyperParameters = a} :: TrainingSpecification) Prelude.. Lens.mapping Lens.coerced -- | A list of the metrics that the algorithm emits that can be used as the -- objective metric in a hyperparameter tuning job. trainingSpecification_supportedTuningJobObjectiveMetrics :: Lens.Lens' TrainingSpecification (Prelude.Maybe [HyperParameterTuningJobObjective]) trainingSpecification_supportedTuningJobObjectiveMetrics = Lens.lens (\TrainingSpecification' {supportedTuningJobObjectiveMetrics} -> supportedTuningJobObjectiveMetrics) (\s@TrainingSpecification' {} a -> s {supportedTuningJobObjectiveMetrics = a} :: TrainingSpecification) Prelude.. Lens.mapping Lens.coerced -- | Indicates whether the algorithm supports distributed training. If set to -- false, buyers can\'t request more than one instance during training. trainingSpecification_supportsDistributedTraining :: Lens.Lens' TrainingSpecification (Prelude.Maybe Prelude.Bool) trainingSpecification_supportsDistributedTraining = Lens.lens (\TrainingSpecification' {supportsDistributedTraining} -> supportsDistributedTraining) (\s@TrainingSpecification' {} a -> s {supportsDistributedTraining = a} :: TrainingSpecification) -- | An MD5 hash of the training algorithm that identifies the Docker image -- used for training. trainingSpecification_trainingImageDigest :: Lens.Lens' TrainingSpecification (Prelude.Maybe Prelude.Text) trainingSpecification_trainingImageDigest = Lens.lens (\TrainingSpecification' {trainingImageDigest} -> trainingImageDigest) (\s@TrainingSpecification' {} a -> s {trainingImageDigest = a} :: TrainingSpecification) -- | The Amazon ECR registry path of the Docker image that contains the -- training algorithm. trainingSpecification_trainingImage :: Lens.Lens' TrainingSpecification Prelude.Text trainingSpecification_trainingImage = Lens.lens (\TrainingSpecification' {trainingImage} -> trainingImage) (\s@TrainingSpecification' {} a -> s {trainingImage = a} :: TrainingSpecification) -- | A list of the instance types that this algorithm can use for training. trainingSpecification_supportedTrainingInstanceTypes :: Lens.Lens' TrainingSpecification [TrainingInstanceType] trainingSpecification_supportedTrainingInstanceTypes = Lens.lens (\TrainingSpecification' {supportedTrainingInstanceTypes} -> supportedTrainingInstanceTypes) (\s@TrainingSpecification' {} a -> s {supportedTrainingInstanceTypes = a} :: TrainingSpecification) Prelude.. Lens.coerced -- | A list of @ChannelSpecification@ objects, which specify the input -- sources to be used by the algorithm. trainingSpecification_trainingChannels :: Lens.Lens' TrainingSpecification (Prelude.NonEmpty ChannelSpecification) trainingSpecification_trainingChannels = Lens.lens (\TrainingSpecification' {trainingChannels} -> trainingChannels) (\s@TrainingSpecification' {} a -> s {trainingChannels = a} :: TrainingSpecification) Prelude.. Lens.coerced instance Data.FromJSON TrainingSpecification where parseJSON = Data.withObject "TrainingSpecification" ( \x -> TrainingSpecification' Prelude.<$> ( x Data..:? "MetricDefinitions" Data..!= Prelude.mempty ) Prelude.<*> ( x Data..:? "SupportedHyperParameters" Data..!= Prelude.mempty ) Prelude.<*> ( x Data..:? "SupportedTuningJobObjectiveMetrics" Data..!= Prelude.mempty ) Prelude.<*> (x Data..:? "SupportsDistributedTraining") Prelude.<*> (x Data..:? "TrainingImageDigest") Prelude.<*> (x Data..: "TrainingImage") Prelude.<*> ( x Data..:? "SupportedTrainingInstanceTypes" Data..!= Prelude.mempty ) Prelude.<*> (x Data..: "TrainingChannels") ) instance Prelude.Hashable TrainingSpecification where hashWithSalt _salt TrainingSpecification' {..} = _salt `Prelude.hashWithSalt` metricDefinitions `Prelude.hashWithSalt` supportedHyperParameters `Prelude.hashWithSalt` supportedTuningJobObjectiveMetrics `Prelude.hashWithSalt` supportsDistributedTraining `Prelude.hashWithSalt` trainingImageDigest `Prelude.hashWithSalt` trainingImage `Prelude.hashWithSalt` supportedTrainingInstanceTypes `Prelude.hashWithSalt` trainingChannels instance Prelude.NFData TrainingSpecification where rnf TrainingSpecification' {..} = Prelude.rnf metricDefinitions `Prelude.seq` Prelude.rnf supportedHyperParameters `Prelude.seq` Prelude.rnf supportedTuningJobObjectiveMetrics `Prelude.seq` Prelude.rnf supportsDistributedTraining `Prelude.seq` Prelude.rnf trainingImageDigest `Prelude.seq` Prelude.rnf trainingImage `Prelude.seq` Prelude.rnf supportedTrainingInstanceTypes `Prelude.seq` Prelude.rnf trainingChannels instance Data.ToJSON TrainingSpecification where toJSON TrainingSpecification' {..} = Data.object ( Prelude.catMaybes [ ("MetricDefinitions" Data..=) Prelude.<$> metricDefinitions, ("SupportedHyperParameters" Data..=) Prelude.<$> supportedHyperParameters, ("SupportedTuningJobObjectiveMetrics" Data..=) Prelude.<$> supportedTuningJobObjectiveMetrics, ("SupportsDistributedTraining" Data..=) Prelude.<$> supportsDistributedTraining, ("TrainingImageDigest" Data..=) Prelude.<$> trainingImageDigest, Prelude.Just ("TrainingImage" Data..= trainingImage), Prelude.Just ( "SupportedTrainingInstanceTypes" Data..= supportedTrainingInstanceTypes ), Prelude.Just ("TrainingChannels" Data..= trainingChannels) ] )