U
    0-ee(                     @   s   d dl Z d dlZddlmZmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZ e	 rzd dlZd	d
 Zdd Zdd ZdS )    N   ) SAGEMAKER_PARALLEL_EC2_INSTANCESTORCH_DYNAMO_MODES)ComputeEnvironmentSageMakerDistributedType)is_boto3_available   )SageMakerConfig)DYNAMO_BACKENDS
_ask_field_ask_options_convert_dynamo_backend_convert_mixed_precision#_convert_sagemaker_distributed_mode_convert_yes_no_to_boolc                 C   s   t d}ddddiddgd}zv|j| tj|d	d
d dddddddddddddddddddddgdd gd}|j| |  d!tj|d	d
d" W n( |jjk
r   td#|  d$ Y nX d S )%Niamz
2012-10-17ZAllowZServicezsagemaker.amazonaws.comzsts:AssumeRole)EffectZ	PrincipalAction)VersionZ	Statement   )indent)RoleNameZAssumeRolePolicyDocumentzsagemaker:*zecr:GetDownloadUrlForLayerzecr:BatchGetImagezecr:BatchCheckLayerAvailabilityzecr:GetAuthorizationTokenzcloudwatch:PutMetricDatazcloudwatch:GetMetricDatazcloudwatch:GetMetricStatisticszcloudwatch:ListMetricszlogs:CreateLogGroupzlogs:CreateLogStreamzlogs:DescribeLogStreamszlogs:PutLogEventszlogs:GetLogEventszs3:CreateBucketzs3:ListBucketzs3:GetBucketLocationzs3:GetObjectzs3:PutObject*)r   r   ResourceZ_policy_permission)r   Z
PolicyNameZPolicyDocumentzrole z# already exists. Using existing one)	boto3clientZcreate_rolejsondumpsZput_role_policy
exceptionsZEntityAlreadyExistsExceptionprint)	role_name
iam_clientZsagemaker_trust_policyZpolicy_document r"   e/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/accelerate/commands/config/sagemaker.py_create_iam_role_for_sagemaker&   sV    
 
r$   c                 C   s   t d}|j| dd d S )Nr   )r   ZRoleZArn)r   r   Zget_role)r    r!   r"   r"   r#   _get_iam_role_arn\   s    
r%   c                  C   s  t dddgt} d }| dkr4tddd}|tjd< n,td	 td
}|tjd< td}|tjd< tddd}|tjd< t dddgt}|dkrtd}nd}td| d t| tdtddd}d }|rtddd }tdtddd}	d }
|	rtd d!d }
td"tddd}d }|r*td#d$d }t d%d&d'gt}i }td(tddd}|rd)}t d*d+d, t	D t
d-d||d. < td/tddd}|rt d0td1d dd||d2 < td3tddd||d4 < td5tddd||d6 < d7}|tjkrt |td8d }n|d97 }t|d:d d;d}d}|tjkr8td<tddd}d=}|tjtjfkr\td>td=d}t d?d@dAdBdCgt}|r|d@krtdD t|tj|d||||||||
||dES )FNzHow do you want to authorize?zAWS Profilez7Credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) r   z'Enter your AWS Profile name: [default] default)r&   ZAWS_PROFILEzNote 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`zAWS Access Key ID: ZAWS_ACCESS_KEY_IDzAWS Secret Access Key: ZAWS_SECRET_ACCESS_KEYz"Enter your AWS Region: [us-east-1]z	us-east-1ZAWS_DEFAULT_REGIONzMDo you already have an IAM Role for executing Amazon SageMaker Training Jobs?zProvide IAM Role namez%Create new IAM role using credentialszEnter your IAM role name: Z#accelerate_sagemaker_execution_rolez$Accelerate will create an iam role "z " using the provided credentialsz2Do you want to use custom Docker image? [yes/NO]: FzPlease enter yes or no.)r&   error_messagezEnter your Docker image: c                 S   s   t |  S Nstrlowerxr"   r"   r#   <lambda>       z%get_sagemaker_input.<locals>.<lambda>zODo you want to provide SageMaker input channels with data locations? [yes/NO]: z\Enter the path to the SageMaker inputs TSV file with columns (channel_name, data_location): c                 S   s   t |  S r(   r)   r,   r"   r"   r#   r.      r/   z3Do you want to enable SageMaker metrics? [yes/NO]: z[Enter the path to the SageMaker metrics TSV file with columns (metric_name, metric_regex): c                 S   s   t |  S r(   r)   r,   r"   r"   r#   r.      r/   zWhat is the distributed mode?zNo distributed trainingzData parallelismz?Do you wish to optimize your script with torch dynamo?[yes/NO]:Zdynamo_z+Which dynamo backend would you like to use?c                 S   s   g | ]}|  qS r"   )r+   ).0r-   r"   r"   r#   
<listcomp>   s     z'get_sagemaker_input.<locals>.<listcomp>r   backendzGDo you want to customize the defaults sent to torch.compile? [yes/NO]: zWhich mode do you want to use?c                 S   s   t t|  S r(   )r   intr,   r"   r"   r#   r.      r/   modez\Do you want the fullgraph mode or it is ok to break model into several subgraphs? [yes/NO]: Zuse_fullgraphz7Do you want to enable dynamic shape tracing? [yes/NO]: Zuse_dynamicz:Which EC2 instance type you want to use for your training?c                 S   s   t t|  S r(   )r   r3   r,   r"   r"   r#   r.      r/   z? [ml.p3.2xlarge]:c                 S   s   t |  S r(   r)   r,   r"   r"   r#   r.      r/   zml.p3.2xlargezShould distributed operations be checked while running for errors? This can avoid timeout issues but will be slower. [yes/NO]: r   z(How many machines do you want use? [1]: z2Do you wish to use FP16 or BF16 (mixed precision)?noZfp16Zbf16Zfp8zTorch dynamo used without mixed precision requires TF32 to be efficient. Accelerate will enable it by default when launching your scripts.)Z	image_uriZcompute_environmentdistributed_typeZuse_cpudynamo_configec2_instance_typeZprofileregioniam_role_namemixed_precisionnum_machinessagemaker_inputs_filesagemaker_metrics_filedebug)r   r3   r   osenvironr   r$   r   r   r
   r   r   r   NOr   ZDATA_PARALLELZMODEL_PARALLELr   r	   r   ZAMAZON_SAGEMAKER)Zcredentials_configurationZaws_profileZaws_access_key_idZaws_secret_access_keyZ
aws_regionZrole_managementr:   Zis_custom_docker_imageZdocker_imageZis_sagemaker_inputs_enabledr=   Zis_sagemaker_metrics_enabledr>   r6   r7   Z
use_dynamoprefixZuse_custom_optionsZec2_instance_queryr8   r?   r<   r;   r"   r"   r#   get_sagemaker_inputa   s6   



  
rD   )r   r@   Zutils.constantsr   r   Zutils.dataclassesr   r   Zutils.importsr   Zconfig_argsr	   Zconfig_utilsr
   r   r   r   r   r   r   r   r$   r%   rD   r"   r"   r"   r#   <module>   s   $6