





# Copyright 2021 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import json
import os

from ...utils.constants import SAGEMAKER_PARALLEL_EC2_INSTANCES, TORCH_DYNAMO_MODES
from ...utils.dataclasses import ComputeEnvironment, SageMakerDistributedType
from ...utils.imports import is_botoa_available
from .config_args import SageMakerConfig
from .config_utils import (
    DYNAMO_BACKENDS,
    _ask_field,
    _ask_options,
    _convert_dynamo_backend,
    _convert_mixed_precision,
    _convert_sagemaker_distributed_mode,
    _convert_yes_no_to_bool,
)


if is_botoa_available():
					import botoa  # noqa: F401





def       _UpperCamelCase       (a__				:Optional[Any]    ) ->    int:






							"""simple docstring"""





							UpperCamelCase__			       =     botoa.client("""iam"""    )

							UpperCamelCase__			       =     {
							    """Version""": """2012-10-17""",
							    """Statement""": [
							        {"""Effect""": """Allow""", """Principal""": {"""Service""": """sagemaker.amazonaws.com"""}, """Action""": """sts:AssumeRole"""}
							    ],
							}
							try:
														# create the role, associated with the chosen trust policy
														iam_client.create_role(
														    RoleName=a__				,     AssumeRolePolicyDocument=json.dumps(a__				,     indent=2    )    )
														UpperCamelCase__			       =     {
														    """Version""": """2012-10-17""",
														    """Statement""": [
														        {
														            """Effect""": """Allow""",
														            """Action""": [
														                """sagemaker:*""",
														                """ecr:GetDownloadUrlForLayer""",
														                """ecr:BatchGetImage""",
														                """ecr:BatchCheckLayerAvailability""",
														                """ecr:GetAuthorizationToken""",
														                """cloudwatch:PutMetricData""",
														                """cloudwatch:GetMetricData""",
														                """cloudwatch:GetMetricStatistics""",
														                """cloudwatch:ListMetrics""",
														                """logs:CreateLogGroup""",
														                """logs:CreateLogStream""",
														                """logs:DescribeLogStreams""",
														                """logs:PutLogEvents""",
														                """logs:GetLogEvents""",
														                """s3:CreateBucket""",
														                """s3:ListBucket""",
														                """s3:GetBucketLocation""",
														                """s3:GetObject""",
														                """s3:PutObject""",
														            ],
														            """Resource""": """*""",
														        }
														    ],
														}
														# attach policy to role
														iam_client.put_role_policy(
														    RoleName=a__				,     PolicyName=f"""{role_name}_policy_permission"""				,     PolicyDocument=json.dumps(a__				,     indent=2    )				,     )
							except iam_client.exceptions.EntityAlreadyExistsException:
														print(f"""role {role_name} already exists. Using existing one"""    )





def       _UpperCamelCase       (a__				:Optional[Any]    ) ->    Tuple:






							"""simple docstring"""





							UpperCamelCase__			       =     botoa.client("""iam"""    )
							return iam_client.get_role(RoleName=a__    )["Role"]["Arn"]





def       _UpperCamelCase       () ->    Union[str, Any]:






							"""simple docstring"""





							UpperCamelCase__			       =     _ask_options(
							    """How do you want to authorize?"""				,     ["""AWS Profile""", """Credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) """]				,     a__				,     )
							UpperCamelCase__			       =     None
							if credentials_configuration == 0:
														UpperCamelCase__			       =     _ask_field("""Enter your AWS Profile name: [default] """				,     default="""default"""    )
														UpperCamelCase__			       =     aws_profile
							else:
														print(
														    """Note you will need to provide AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY when you launch you training script with,"""
														    """`accelerate launch --aws_access_key_id XXX --aws_secret_access_key YYY`"""    )
														UpperCamelCase__			       =     _ask_field("""AWS Access Key ID: """    )
														UpperCamelCase__			       =     aws_access_key_id

														UpperCamelCase__			       =     _ask_field("""AWS Secret Access Key: """    )
														UpperCamelCase__			       =     aws_secret_access_key

							UpperCamelCase__			       =     _ask_field("""Enter your AWS Region: [us-east-1]"""				,     default="""us-east-1"""    )
							UpperCamelCase__			       =     aws_region

							UpperCamelCase__			       =     _ask_options(
							    """Do you already have an IAM Role for executing Amazon SageMaker Training Jobs?"""				,     ["""Provide IAM Role name""", """Create new IAM role using credentials"""]				,     a__				,     )
							if role_management == 0:
														UpperCamelCase__			       =     _ask_field("""Enter your IAM role name: """    )
							else:
														UpperCamelCase__			       =     """accelerate_sagemaker_execution_role"""
														print(f"""Accelerate will create an iam role \"{iam_role_name}\" using the provided credentials"""    )
														_create_iam_role_for_sagemaker(a__    )

							UpperCamelCase__			       =     _ask_field(
							    """Do you want to use custom Docker image? [yes/NO]: """				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )
							UpperCamelCase__			       =     None
							if is_custom_docker_image:
														UpperCamelCase__			       =     _ask_field("""Enter your Docker image: """				,     lambda a__    : str(a__    ).lower()    )

							UpperCamelCase__			       =     _ask_field(
							    """Do you want to provide SageMaker input channels with data locations? [yes/NO]: """				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )
							UpperCamelCase__			       =     None
							if is_sagemaker_inputs_enabled:
														UpperCamelCase__			       =     _ask_field(
														    """Enter the path to the SageMaker inputs TSV file with columns (channel_name, data_location): """				,     lambda a__    : str(a__    ).lower()				,     )

							UpperCamelCase__			       =     _ask_field(
							    """Do you want to enable SageMaker metrics? [yes/NO]: """				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )
							UpperCamelCase__			       =     None
							if is_sagemaker_metrics_enabled:
														UpperCamelCase__			       =     _ask_field(
														    """Enter the path to the SageMaker metrics TSV file with columns (metric_name, metric_regex): """				,     lambda a__    : str(a__    ).lower()				,     )

							UpperCamelCase__			       =     _ask_options(
							    """What is the distributed mode?"""				,     ["""No distributed training""", """Data parallelism"""]				,     _convert_sagemaker_distributed_mode				,     )
							UpperCamelCase__			       =     {}
							UpperCamelCase__			       =     _ask_field(
							    """Do you wish to optimize your script with torch dynamo?[yes/NO]:"""				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )
							if use_dynamo:
														UpperCamelCase__			       =     """dynamo_"""
														UpperCamelCase__			       =     _ask_options(
														    """Which dynamo backend would you like to use?"""				,     [x.lower() for x in DYNAMO_BACKENDS]				,     _convert_dynamo_backend				,     default=2				,     )
														UpperCamelCase__			       =     _ask_field(
														    """Do you want to customize the defaults sent to torch.compile? [yes/NO]: """				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )

														if use_custom_options:
																					UpperCamelCase__			       =     _ask_options(
																					    """Which mode do you want to use?"""				,     a__				,     lambda a__    : TORCH_DYNAMO_MODES[int(a__    )]				,     default="""default"""				,     )
																					UpperCamelCase__			       =     _ask_field(
																					    """Do you want the fullgraph mode or it is ok to break model into several subgraphs? [yes/NO]: """				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )
																					UpperCamelCase__			       =     _ask_field(
																					    """Do you want to enable dynamic shape tracing? [yes/NO]: """				,     _convert_yes_no_to_bool				,     default=a__				,     error_message="""Please enter yes or no."""				,     )
							UpperCamelCase__			       =     """Which EC2 instance type you want to use for your training?"""
							if distributed_type != SageMakerDistributedType.NO:
														UpperCamelCase__			       =     _ask_options(
														    a__				,     a__				,     lambda a__    : SAGEMAKER_PARALLEL_EC2_INSTANCES[int(a__    )]    )
							else:
														eca_instance_query += "? [ml.p3.2xlarge]:"
														UpperCamelCase__			       =     _ask_field(a__				,     lambda a__    : str(a__    ).lower()				,     default="""ml.p3.2xlarge"""    )

							UpperCamelCase__			       =     1
							if distributed_type in (SageMakerDistributedType.DATA_PARALLEL, SageMakerDistributedType.MODEL_PARALLEL):
														UpperCamelCase__			       =     _ask_field(
														    """How many machines do you want use? [1]: """				,     a__				,     default=1				,     )

							UpperCamelCase__			       =     _ask_options(
							    """Do you wish to use FP16 or BF16 (mixed precision)?"""				,     ["""no""", """fp16""", """bf16""", """fp8"""]				,     _convert_mixed_precision				,     )

							if use_dynamo and mixed_precision == "no":
														print(
														    """Torch dynamo used without mixed precision requires TF32 to be efficient. Accelerate will enable it by default when launching your scripts."""    )

							return SageMakerConfig(
							    image_uri=a__				,     compute_environment=ComputeEnvironment.AMAZON_SAGEMAKER				,     distributed_type=a__				,     use_cpu=a__				,     dynamo_config=a__				,     eca_instance_type=a__				,     profile=a__				,     region=a__				,     iam_role_name=a__				,     mixed_precision=a__				,     num_machines=a__				,     sagemaker_inputs_file=a__				,     sagemaker_metrics_file=a__				,     )











from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCamelCase__     =	logging.get_logger(__name__)

UpperCamelCase__     =	{
    "facebook/s2t-wav2vec2-large-en-de": (
        "https://huggingface.co/facebook/s2t-wav2vec2-large-en-de/resolve/main/config.json"
    ),
    # See all Speech2Text models at https://huggingface.co/models?filter=speech2text2
}

class     __SCREAMING_SNAKE_CASE   (       _a    ):
							snake_case       : Dict         =    """speech_to_text_2"""
							snake_case       : List[Any]         =    ["""past_key_values"""]
							snake_case       : List[str]         =    {"""num_attention_heads""": """decoder_attention_heads""", """hidden_size""": """d_model"""}






							def __init__(  self					,	__lowerCAmelCase=10000					,	__lowerCAmelCase=6					,	__lowerCAmelCase=2048					,	__lowerCAmelCase=4					,	__lowerCAmelCase=0.0					,	__lowerCAmelCase=True					,	__lowerCAmelCase="relu"					,	__lowerCAmelCase=256					,	__lowerCAmelCase=0.1					,	__lowerCAmelCase=0.0					,	__lowerCAmelCase=0.0					,	__lowerCAmelCase=0.02					,	__lowerCAmelCase=2					,	__lowerCAmelCase=True					,	__lowerCAmelCase=1					,	__lowerCAmelCase=0					,	__lowerCAmelCase=2					,	__lowerCAmelCase=1024					,	**__lowerCAmelCase					,	):
														UpperCamelCase__			       =     vocab_size
														UpperCamelCase__			       =     d_model
														UpperCamelCase__			       =     decoder_ffn_dim
														UpperCamelCase__			       =     decoder_layers
														UpperCamelCase__			       =     decoder_attention_heads
														UpperCamelCase__			       =     dropout
														UpperCamelCase__			       =     attention_dropout
														UpperCamelCase__			       =     activation_dropout
														UpperCamelCase__			       =     activation_function
														UpperCamelCase__			       =     init_std
														UpperCamelCase__			       =     decoder_layerdrop
														UpperCamelCase__			       =     use_cache
														UpperCamelCase__			       =     decoder_layers
														UpperCamelCase__			       =     scale_embedding  # scale factor will be sqrt(d_model) if True
														UpperCamelCase__			       =     max_target_positions

														super().__init__(
														    pad_token_id=__lowerCAmelCase					,	bos_token_id=__lowerCAmelCase					,	eos_token_id=__lowerCAmelCase					,	decoder_start_token_id=__lowerCAmelCase					,	**__lowerCAmelCase					,	)




