packages feed

amazonka-sagemaker-2.0: gen/Amazonka/SageMaker/Types/OutputConfig.hs

{-# 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.OutputConfig
-- 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.OutputConfig 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.TargetDevice
import Amazonka.SageMaker.Types.TargetPlatform

-- | Contains information about the output location for the compiled model
-- and the target device that the model runs on. @TargetDevice@ and
-- @TargetPlatform@ are mutually exclusive, so you need to choose one
-- between the two to specify your target device or platform. If you cannot
-- find your device you want to use from the @TargetDevice@ list, use
-- @TargetPlatform@ to describe the platform of your edge device and
-- @CompilerOptions@ if there are specific settings that are required or
-- recommended to use for particular TargetPlatform.
--
-- /See:/ 'newOutputConfig' smart constructor.
data OutputConfig = OutputConfig'
  { -- | Specifies additional parameters for compiler options in JSON format. The
    -- compiler options are @TargetPlatform@ specific. It is required for
    -- NVIDIA accelerators and highly recommended for CPU compilations. For any
    -- other cases, it is optional to specify @CompilerOptions.@
    --
    -- -   @DTYPE@: Specifies the data type for the input. When compiling for
    --     @ml_*@ (except for @ml_inf@) instances using PyTorch framework,
    --     provide the data type (dtype) of the model\'s input. @\"float32\"@
    --     is used if @\"DTYPE\"@ is not specified. Options for data type are:
    --
    --     -   float32: Use either @\"float\"@ or @\"float32\"@.
    --
    --     -   int64: Use either @\"int64\"@ or @\"long\"@.
    --
    --     For example, @{\"dtype\" : \"float32\"}@.
    --
    -- -   @CPU@: Compilation for CPU supports the following compiler options.
    --
    --     -   @mcpu@: CPU micro-architecture. For example,
    --         @{\'mcpu\': \'skylake-avx512\'}@
    --
    --     -   @mattr@: CPU flags. For example,
    --         @{\'mattr\': [\'+neon\', \'+vfpv4\']}@
    --
    -- -   @ARM@: Details of ARM CPU compilations.
    --
    --     -   @NEON@: NEON is an implementation of the Advanced SIMD extension
    --         used in ARMv7 processors.
    --
    --         For example, add @{\'mattr\': [\'+neon\']}@ to the compiler
    --         options if compiling for ARM 32-bit platform with the NEON
    --         support.
    --
    -- -   @NVIDIA@: Compilation for NVIDIA GPU supports the following compiler
    --     options.
    --
    --     -   @gpu_code@: Specifies the targeted architecture.
    --
    --     -   @trt-ver@: Specifies the TensorRT versions in x.y.z. format.
    --
    --     -   @cuda-ver@: Specifies the CUDA version in x.y format.
    --
    --     For example,
    --     @{\'gpu-code\': \'sm_72\', \'trt-ver\': \'6.0.1\', \'cuda-ver\': \'10.1\'}@
    --
    -- -   @ANDROID@: Compilation for the Android OS supports the following
    --     compiler options:
    --
    --     -   @ANDROID_PLATFORM@: Specifies the Android API levels. Available
    --         levels range from 21 to 29. For example,
    --         @{\'ANDROID_PLATFORM\': 28}@.
    --
    --     -   @mattr@: Add @{\'mattr\': [\'+neon\']}@ to compiler options if
    --         compiling for ARM 32-bit platform with NEON support.
    --
    -- -   @INFERENTIA@: Compilation for target ml_inf1 uses compiler options
    --     passed in as a JSON string. For example,
    --     @\"CompilerOptions\": \"\\\"--verbose 1 --num-neuroncores 2 -O2\\\"\"@.
    --
    --     For information about supported compiler options, see
    --     <https://github.com/aws/aws-neuron-sdk/blob/master/docs/neuron-cc/command-line-reference.md Neuron Compiler CLI>.
    --
    -- -   @CoreML@: Compilation for the CoreML OutputConfig$TargetDevice
    --     supports the following compiler options:
    --
    --     -   @class_labels@: Specifies the classification labels file name
    --         inside input tar.gz file. For example,
    --         @{\"class_labels\": \"imagenet_labels_1000.txt\"}@. Labels
    --         inside the txt file should be separated by newlines.
    --
    -- -   @EIA@: Compilation for the Elastic Inference Accelerator supports
    --     the following compiler options:
    --
    --     -   @precision_mode@: Specifies the precision of compiled artifacts.
    --         Supported values are @\"FP16\"@ and @\"FP32\"@. Default is
    --         @\"FP32\"@.
    --
    --     -   @signature_def_key@: Specifies the signature to use for models
    --         in SavedModel format. Defaults is TensorFlow\'s default
    --         signature def key.
    --
    --     -   @output_names@: Specifies a list of output tensor names for
    --         models in FrozenGraph format. Set at most one API field, either:
    --         @signature_def_key@ or @output_names@.
    --
    --     For example:
    --     @{\"precision_mode\": \"FP32\", \"output_names\": [\"output:0\"]}@
    compilerOptions :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services Key Management Service key (Amazon Web Services
    -- KMS) that Amazon SageMaker uses to encrypt your output models with
    -- Amazon S3 server-side encryption after compilation job. If you don\'t
    -- provide a KMS key ID, Amazon SageMaker uses the default KMS key for
    -- Amazon S3 for your role\'s account. For more information, see
    -- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html KMS-Managed Encryption Keys>
    -- in the /Amazon Simple Storage Service Developer Guide./
    --
    -- The KmsKeyId can be any of the following formats:
    --
    -- -   Key ID: @1234abcd-12ab-34cd-56ef-1234567890ab@
    --
    -- -   Key ARN:
    --     @arn:aws:kms:us-west-2:111122223333:key\/1234abcd-12ab-34cd-56ef-1234567890ab@
    --
    -- -   Alias name: @alias\/ExampleAlias@
    --
    -- -   Alias name ARN:
    --     @arn:aws:kms:us-west-2:111122223333:alias\/ExampleAlias@
    kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | Identifies the target device or the machine learning instance that you
    -- want to run your model on after the compilation has completed.
    -- Alternatively, you can specify OS, architecture, and accelerator using
    -- TargetPlatform fields. It can be used instead of @TargetPlatform@.
    targetDevice :: Prelude.Maybe TargetDevice,
    -- | Contains information about a target platform that you want your model to
    -- run on, such as OS, architecture, and accelerators. It is an alternative
    -- of @TargetDevice@.
    --
    -- The following examples show how to configure the @TargetPlatform@ and
    -- @CompilerOptions@ JSON strings for popular target platforms:
    --
    -- -   Raspberry Pi 3 Model B+
    --
    --     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM_EABIHF\"},@
    --
    --     @ \"CompilerOptions\": {\'mattr\': [\'+neon\']}@
    --
    -- -   Jetson TX2
    --
    --     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM64\", \"Accelerator\": \"NVIDIA\"},@
    --
    --     @ \"CompilerOptions\": {\'gpu-code\': \'sm_62\', \'trt-ver\': \'6.0.1\', \'cuda-ver\': \'10.0\'}@
    --
    -- -   EC2 m5.2xlarge instance OS
    --
    --     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"X86_64\", \"Accelerator\": \"NVIDIA\"},@
    --
    --     @ \"CompilerOptions\": {\'mcpu\': \'skylake-avx512\'}@
    --
    -- -   RK3399
    --
    --     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM64\", \"Accelerator\": \"MALI\"}@
    --
    -- -   ARMv7 phone (CPU)
    --
    --     @\"TargetPlatform\": {\"Os\": \"ANDROID\", \"Arch\": \"ARM_EABI\"},@
    --
    --     @ \"CompilerOptions\": {\'ANDROID_PLATFORM\': 25, \'mattr\': [\'+neon\']}@
    --
    -- -   ARMv8 phone (CPU)
    --
    --     @\"TargetPlatform\": {\"Os\": \"ANDROID\", \"Arch\": \"ARM64\"},@
    --
    --     @ \"CompilerOptions\": {\'ANDROID_PLATFORM\': 29}@
    targetPlatform :: Prelude.Maybe TargetPlatform,
    -- | Identifies the S3 bucket where you want Amazon SageMaker to store the
    -- model artifacts. For example, @s3:\/\/bucket-name\/key-name-prefix@.
    s3OutputLocation :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'OutputConfig' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'compilerOptions', 'outputConfig_compilerOptions' - Specifies additional parameters for compiler options in JSON format. The
-- compiler options are @TargetPlatform@ specific. It is required for
-- NVIDIA accelerators and highly recommended for CPU compilations. For any
-- other cases, it is optional to specify @CompilerOptions.@
--
-- -   @DTYPE@: Specifies the data type for the input. When compiling for
--     @ml_*@ (except for @ml_inf@) instances using PyTorch framework,
--     provide the data type (dtype) of the model\'s input. @\"float32\"@
--     is used if @\"DTYPE\"@ is not specified. Options for data type are:
--
--     -   float32: Use either @\"float\"@ or @\"float32\"@.
--
--     -   int64: Use either @\"int64\"@ or @\"long\"@.
--
--     For example, @{\"dtype\" : \"float32\"}@.
--
-- -   @CPU@: Compilation for CPU supports the following compiler options.
--
--     -   @mcpu@: CPU micro-architecture. For example,
--         @{\'mcpu\': \'skylake-avx512\'}@
--
--     -   @mattr@: CPU flags. For example,
--         @{\'mattr\': [\'+neon\', \'+vfpv4\']}@
--
-- -   @ARM@: Details of ARM CPU compilations.
--
--     -   @NEON@: NEON is an implementation of the Advanced SIMD extension
--         used in ARMv7 processors.
--
--         For example, add @{\'mattr\': [\'+neon\']}@ to the compiler
--         options if compiling for ARM 32-bit platform with the NEON
--         support.
--
-- -   @NVIDIA@: Compilation for NVIDIA GPU supports the following compiler
--     options.
--
--     -   @gpu_code@: Specifies the targeted architecture.
--
--     -   @trt-ver@: Specifies the TensorRT versions in x.y.z. format.
--
--     -   @cuda-ver@: Specifies the CUDA version in x.y format.
--
--     For example,
--     @{\'gpu-code\': \'sm_72\', \'trt-ver\': \'6.0.1\', \'cuda-ver\': \'10.1\'}@
--
-- -   @ANDROID@: Compilation for the Android OS supports the following
--     compiler options:
--
--     -   @ANDROID_PLATFORM@: Specifies the Android API levels. Available
--         levels range from 21 to 29. For example,
--         @{\'ANDROID_PLATFORM\': 28}@.
--
--     -   @mattr@: Add @{\'mattr\': [\'+neon\']}@ to compiler options if
--         compiling for ARM 32-bit platform with NEON support.
--
-- -   @INFERENTIA@: Compilation for target ml_inf1 uses compiler options
--     passed in as a JSON string. For example,
--     @\"CompilerOptions\": \"\\\"--verbose 1 --num-neuroncores 2 -O2\\\"\"@.
--
--     For information about supported compiler options, see
--     <https://github.com/aws/aws-neuron-sdk/blob/master/docs/neuron-cc/command-line-reference.md Neuron Compiler CLI>.
--
-- -   @CoreML@: Compilation for the CoreML OutputConfig$TargetDevice
--     supports the following compiler options:
--
--     -   @class_labels@: Specifies the classification labels file name
--         inside input tar.gz file. For example,
--         @{\"class_labels\": \"imagenet_labels_1000.txt\"}@. Labels
--         inside the txt file should be separated by newlines.
--
-- -   @EIA@: Compilation for the Elastic Inference Accelerator supports
--     the following compiler options:
--
--     -   @precision_mode@: Specifies the precision of compiled artifacts.
--         Supported values are @\"FP16\"@ and @\"FP32\"@. Default is
--         @\"FP32\"@.
--
--     -   @signature_def_key@: Specifies the signature to use for models
--         in SavedModel format. Defaults is TensorFlow\'s default
--         signature def key.
--
--     -   @output_names@: Specifies a list of output tensor names for
--         models in FrozenGraph format. Set at most one API field, either:
--         @signature_def_key@ or @output_names@.
--
--     For example:
--     @{\"precision_mode\": \"FP32\", \"output_names\": [\"output:0\"]}@
--
-- 'kmsKeyId', 'outputConfig_kmsKeyId' - The Amazon Web Services Key Management Service key (Amazon Web Services
-- KMS) that Amazon SageMaker uses to encrypt your output models with
-- Amazon S3 server-side encryption after compilation job. If you don\'t
-- provide a KMS key ID, Amazon SageMaker uses the default KMS key for
-- Amazon S3 for your role\'s account. For more information, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html KMS-Managed Encryption Keys>
-- in the /Amazon Simple Storage Service Developer Guide./
--
-- The KmsKeyId can be any of the following formats:
--
-- -   Key ID: @1234abcd-12ab-34cd-56ef-1234567890ab@
--
-- -   Key ARN:
--     @arn:aws:kms:us-west-2:111122223333:key\/1234abcd-12ab-34cd-56ef-1234567890ab@
--
-- -   Alias name: @alias\/ExampleAlias@
--
-- -   Alias name ARN:
--     @arn:aws:kms:us-west-2:111122223333:alias\/ExampleAlias@
--
-- 'targetDevice', 'outputConfig_targetDevice' - Identifies the target device or the machine learning instance that you
-- want to run your model on after the compilation has completed.
-- Alternatively, you can specify OS, architecture, and accelerator using
-- TargetPlatform fields. It can be used instead of @TargetPlatform@.
--
-- 'targetPlatform', 'outputConfig_targetPlatform' - Contains information about a target platform that you want your model to
-- run on, such as OS, architecture, and accelerators. It is an alternative
-- of @TargetDevice@.
--
-- The following examples show how to configure the @TargetPlatform@ and
-- @CompilerOptions@ JSON strings for popular target platforms:
--
-- -   Raspberry Pi 3 Model B+
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM_EABIHF\"},@
--
--     @ \"CompilerOptions\": {\'mattr\': [\'+neon\']}@
--
-- -   Jetson TX2
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM64\", \"Accelerator\": \"NVIDIA\"},@
--
--     @ \"CompilerOptions\": {\'gpu-code\': \'sm_62\', \'trt-ver\': \'6.0.1\', \'cuda-ver\': \'10.0\'}@
--
-- -   EC2 m5.2xlarge instance OS
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"X86_64\", \"Accelerator\": \"NVIDIA\"},@
--
--     @ \"CompilerOptions\": {\'mcpu\': \'skylake-avx512\'}@
--
-- -   RK3399
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM64\", \"Accelerator\": \"MALI\"}@
--
-- -   ARMv7 phone (CPU)
--
--     @\"TargetPlatform\": {\"Os\": \"ANDROID\", \"Arch\": \"ARM_EABI\"},@
--
--     @ \"CompilerOptions\": {\'ANDROID_PLATFORM\': 25, \'mattr\': [\'+neon\']}@
--
-- -   ARMv8 phone (CPU)
--
--     @\"TargetPlatform\": {\"Os\": \"ANDROID\", \"Arch\": \"ARM64\"},@
--
--     @ \"CompilerOptions\": {\'ANDROID_PLATFORM\': 29}@
--
-- 's3OutputLocation', 'outputConfig_s3OutputLocation' - Identifies the S3 bucket where you want Amazon SageMaker to store the
-- model artifacts. For example, @s3:\/\/bucket-name\/key-name-prefix@.
newOutputConfig ::
  -- | 's3OutputLocation'
  Prelude.Text ->
  OutputConfig
newOutputConfig pS3OutputLocation_ =
  OutputConfig'
    { compilerOptions = Prelude.Nothing,
      kmsKeyId = Prelude.Nothing,
      targetDevice = Prelude.Nothing,
      targetPlatform = Prelude.Nothing,
      s3OutputLocation = pS3OutputLocation_
    }

-- | Specifies additional parameters for compiler options in JSON format. The
-- compiler options are @TargetPlatform@ specific. It is required for
-- NVIDIA accelerators and highly recommended for CPU compilations. For any
-- other cases, it is optional to specify @CompilerOptions.@
--
-- -   @DTYPE@: Specifies the data type for the input. When compiling for
--     @ml_*@ (except for @ml_inf@) instances using PyTorch framework,
--     provide the data type (dtype) of the model\'s input. @\"float32\"@
--     is used if @\"DTYPE\"@ is not specified. Options for data type are:
--
--     -   float32: Use either @\"float\"@ or @\"float32\"@.
--
--     -   int64: Use either @\"int64\"@ or @\"long\"@.
--
--     For example, @{\"dtype\" : \"float32\"}@.
--
-- -   @CPU@: Compilation for CPU supports the following compiler options.
--
--     -   @mcpu@: CPU micro-architecture. For example,
--         @{\'mcpu\': \'skylake-avx512\'}@
--
--     -   @mattr@: CPU flags. For example,
--         @{\'mattr\': [\'+neon\', \'+vfpv4\']}@
--
-- -   @ARM@: Details of ARM CPU compilations.
--
--     -   @NEON@: NEON is an implementation of the Advanced SIMD extension
--         used in ARMv7 processors.
--
--         For example, add @{\'mattr\': [\'+neon\']}@ to the compiler
--         options if compiling for ARM 32-bit platform with the NEON
--         support.
--
-- -   @NVIDIA@: Compilation for NVIDIA GPU supports the following compiler
--     options.
--
--     -   @gpu_code@: Specifies the targeted architecture.
--
--     -   @trt-ver@: Specifies the TensorRT versions in x.y.z. format.
--
--     -   @cuda-ver@: Specifies the CUDA version in x.y format.
--
--     For example,
--     @{\'gpu-code\': \'sm_72\', \'trt-ver\': \'6.0.1\', \'cuda-ver\': \'10.1\'}@
--
-- -   @ANDROID@: Compilation for the Android OS supports the following
--     compiler options:
--
--     -   @ANDROID_PLATFORM@: Specifies the Android API levels. Available
--         levels range from 21 to 29. For example,
--         @{\'ANDROID_PLATFORM\': 28}@.
--
--     -   @mattr@: Add @{\'mattr\': [\'+neon\']}@ to compiler options if
--         compiling for ARM 32-bit platform with NEON support.
--
-- -   @INFERENTIA@: Compilation for target ml_inf1 uses compiler options
--     passed in as a JSON string. For example,
--     @\"CompilerOptions\": \"\\\"--verbose 1 --num-neuroncores 2 -O2\\\"\"@.
--
--     For information about supported compiler options, see
--     <https://github.com/aws/aws-neuron-sdk/blob/master/docs/neuron-cc/command-line-reference.md Neuron Compiler CLI>.
--
-- -   @CoreML@: Compilation for the CoreML OutputConfig$TargetDevice
--     supports the following compiler options:
--
--     -   @class_labels@: Specifies the classification labels file name
--         inside input tar.gz file. For example,
--         @{\"class_labels\": \"imagenet_labels_1000.txt\"}@. Labels
--         inside the txt file should be separated by newlines.
--
-- -   @EIA@: Compilation for the Elastic Inference Accelerator supports
--     the following compiler options:
--
--     -   @precision_mode@: Specifies the precision of compiled artifacts.
--         Supported values are @\"FP16\"@ and @\"FP32\"@. Default is
--         @\"FP32\"@.
--
--     -   @signature_def_key@: Specifies the signature to use for models
--         in SavedModel format. Defaults is TensorFlow\'s default
--         signature def key.
--
--     -   @output_names@: Specifies a list of output tensor names for
--         models in FrozenGraph format. Set at most one API field, either:
--         @signature_def_key@ or @output_names@.
--
--     For example:
--     @{\"precision_mode\": \"FP32\", \"output_names\": [\"output:0\"]}@
outputConfig_compilerOptions :: Lens.Lens' OutputConfig (Prelude.Maybe Prelude.Text)
outputConfig_compilerOptions = Lens.lens (\OutputConfig' {compilerOptions} -> compilerOptions) (\s@OutputConfig' {} a -> s {compilerOptions = a} :: OutputConfig)

-- | The Amazon Web Services Key Management Service key (Amazon Web Services
-- KMS) that Amazon SageMaker uses to encrypt your output models with
-- Amazon S3 server-side encryption after compilation job. If you don\'t
-- provide a KMS key ID, Amazon SageMaker uses the default KMS key for
-- Amazon S3 for your role\'s account. For more information, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html KMS-Managed Encryption Keys>
-- in the /Amazon Simple Storage Service Developer Guide./
--
-- The KmsKeyId can be any of the following formats:
--
-- -   Key ID: @1234abcd-12ab-34cd-56ef-1234567890ab@
--
-- -   Key ARN:
--     @arn:aws:kms:us-west-2:111122223333:key\/1234abcd-12ab-34cd-56ef-1234567890ab@
--
-- -   Alias name: @alias\/ExampleAlias@
--
-- -   Alias name ARN:
--     @arn:aws:kms:us-west-2:111122223333:alias\/ExampleAlias@
outputConfig_kmsKeyId :: Lens.Lens' OutputConfig (Prelude.Maybe Prelude.Text)
outputConfig_kmsKeyId = Lens.lens (\OutputConfig' {kmsKeyId} -> kmsKeyId) (\s@OutputConfig' {} a -> s {kmsKeyId = a} :: OutputConfig)

-- | Identifies the target device or the machine learning instance that you
-- want to run your model on after the compilation has completed.
-- Alternatively, you can specify OS, architecture, and accelerator using
-- TargetPlatform fields. It can be used instead of @TargetPlatform@.
outputConfig_targetDevice :: Lens.Lens' OutputConfig (Prelude.Maybe TargetDevice)
outputConfig_targetDevice = Lens.lens (\OutputConfig' {targetDevice} -> targetDevice) (\s@OutputConfig' {} a -> s {targetDevice = a} :: OutputConfig)

-- | Contains information about a target platform that you want your model to
-- run on, such as OS, architecture, and accelerators. It is an alternative
-- of @TargetDevice@.
--
-- The following examples show how to configure the @TargetPlatform@ and
-- @CompilerOptions@ JSON strings for popular target platforms:
--
-- -   Raspberry Pi 3 Model B+
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM_EABIHF\"},@
--
--     @ \"CompilerOptions\": {\'mattr\': [\'+neon\']}@
--
-- -   Jetson TX2
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM64\", \"Accelerator\": \"NVIDIA\"},@
--
--     @ \"CompilerOptions\": {\'gpu-code\': \'sm_62\', \'trt-ver\': \'6.0.1\', \'cuda-ver\': \'10.0\'}@
--
-- -   EC2 m5.2xlarge instance OS
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"X86_64\", \"Accelerator\": \"NVIDIA\"},@
--
--     @ \"CompilerOptions\": {\'mcpu\': \'skylake-avx512\'}@
--
-- -   RK3399
--
--     @\"TargetPlatform\": {\"Os\": \"LINUX\", \"Arch\": \"ARM64\", \"Accelerator\": \"MALI\"}@
--
-- -   ARMv7 phone (CPU)
--
--     @\"TargetPlatform\": {\"Os\": \"ANDROID\", \"Arch\": \"ARM_EABI\"},@
--
--     @ \"CompilerOptions\": {\'ANDROID_PLATFORM\': 25, \'mattr\': [\'+neon\']}@
--
-- -   ARMv8 phone (CPU)
--
--     @\"TargetPlatform\": {\"Os\": \"ANDROID\", \"Arch\": \"ARM64\"},@
--
--     @ \"CompilerOptions\": {\'ANDROID_PLATFORM\': 29}@
outputConfig_targetPlatform :: Lens.Lens' OutputConfig (Prelude.Maybe TargetPlatform)
outputConfig_targetPlatform = Lens.lens (\OutputConfig' {targetPlatform} -> targetPlatform) (\s@OutputConfig' {} a -> s {targetPlatform = a} :: OutputConfig)

-- | Identifies the S3 bucket where you want Amazon SageMaker to store the
-- model artifacts. For example, @s3:\/\/bucket-name\/key-name-prefix@.
outputConfig_s3OutputLocation :: Lens.Lens' OutputConfig Prelude.Text
outputConfig_s3OutputLocation = Lens.lens (\OutputConfig' {s3OutputLocation} -> s3OutputLocation) (\s@OutputConfig' {} a -> s {s3OutputLocation = a} :: OutputConfig)

instance Data.FromJSON OutputConfig where
  parseJSON =
    Data.withObject
      "OutputConfig"
      ( \x ->
          OutputConfig'
            Prelude.<$> (x Data..:? "CompilerOptions")
            Prelude.<*> (x Data..:? "KmsKeyId")
            Prelude.<*> (x Data..:? "TargetDevice")
            Prelude.<*> (x Data..:? "TargetPlatform")
            Prelude.<*> (x Data..: "S3OutputLocation")
      )

instance Prelude.Hashable OutputConfig where
  hashWithSalt _salt OutputConfig' {..} =
    _salt
      `Prelude.hashWithSalt` compilerOptions
      `Prelude.hashWithSalt` kmsKeyId
      `Prelude.hashWithSalt` targetDevice
      `Prelude.hashWithSalt` targetPlatform
      `Prelude.hashWithSalt` s3OutputLocation

instance Prelude.NFData OutputConfig where
  rnf OutputConfig' {..} =
    Prelude.rnf compilerOptions
      `Prelude.seq` Prelude.rnf kmsKeyId
      `Prelude.seq` Prelude.rnf targetDevice
      `Prelude.seq` Prelude.rnf targetPlatform
      `Prelude.seq` Prelude.rnf s3OutputLocation

instance Data.ToJSON OutputConfig where
  toJSON OutputConfig' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("CompilerOptions" Data..=)
              Prelude.<$> compilerOptions,
            ("KmsKeyId" Data..=) Prelude.<$> kmsKeyId,
            ("TargetDevice" Data..=) Prelude.<$> targetDevice,
            ("TargetPlatform" Data..=)
              Prelude.<$> targetPlatform,
            Prelude.Just
              ("S3OutputLocation" Data..= s3OutputLocation)
          ]
      )