
    ge(                         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	            rd dlZd	 Zd
 Z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                 f   t          j        d          }ddddiddgd}	 |                    | t          j        |d	
                     ddg dddgd}|                    | |  dt          j        |d	
                     d S # |j        j        $ r t          d|  d           Y d S w xY w)Niamz
2012-10-17AllowServicezsagemaker.amazonaws.comzsts:AssumeRole)Effect	PrincipalAction)Version	Statement   )indent)RoleNameAssumeRolePolicyDocument)z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   Resource_policy_permission)r   
PolicyNamePolicyDocumentzrole z# already exists. Using existing one)	boto3clientcreate_rolejsondumpsput_role_policy
exceptionsEntityAlreadyExistsExceptionprint)	role_name
iam_clientsagemaker_trust_policypolicy_documents       `/var/www/html/ai-engine/env/lib/python3.11/site-packages/accelerate/commands/config/sagemaker.py_create_iam_role_for_sagemakerr2   &   sB   e$$J  i9R-S_opp
 *FDZcd9e9e9e 	 	
 	
 	
 $ &  * !$/ 
 
> 	""#777:oa@@@ 	# 	
 	
 	
 	
 	

  = F F FDiDDDEEEEEEFs   A&B
 
"B0/B0c                 n    t          j        d          }|                    |           d         d         S )Nr   )r   RoleArn)r$   r%   get_role)r-   r.   s     r1   _get_iam_role_arnr7   \   s2    e$$J	226:5AA    c                     t          dddgt                    } d }| dk    r!t          dd          }|t          j        d<   nKt          d	           t          d
          }|t          j        d<   t          d          }|t          j        d<   t          dd          }|t          j        d<   t          dddgt                    }|dk    rt          d          }n$d}t          d| d           t          |           t          dt          dd          }d }|rt          dd           }t          dt          dd          }	d }
|	rt          dd            }
t          d!t          dd          }d }|rt          d"d#           }t          d$d%d&gt                    }i }t          d't          dd          }|rd(}t          d)d* t          D             t          d+          ||d,z   <   t          d-t          dd          }|r[t          d.t          d/ d          ||d0z   <   t          d1t          dd          ||d2z   <   t          d3t          dd          ||d4z   <   d5}|t          j        k    rt          |t          d6           }n|d7z  }t          |d8 d9          }d}|t          j        k    rt          d:t          dd          }d;}|t          j        t          j        fv rt          d<t          d;          }t          d=g d>t"                    }|r|d?k    rt          d@           t%          |t&          j        |d||||||||
||A          S )BNz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:   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: AWS_ACCESS_KEY_IDzAWS Secret Access Key: AWS_SECRET_ACCESS_KEYz"Enter your AWS Region: [us-east-1]z	us-east-1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: #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                 D    t          |                                           S Nstrlowerxs    r1   <lambda>z%get_sagemaker_input.<locals>.<lambda>   s    Q r8   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                 D    t          |                                           S rB   rC   rF   s    r1   rH   z%get_sagemaker_input.<locals>.<lambda>       c!ffllnn r8   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                 D    t          |                                           S rB   rC   rF   s    r1   rH   z%get_sagemaker_input.<locals>.<lambda>   rJ   r8   zWhat is the distributed mode?zNo distributed trainingzData parallelismz?Do you wish to optimize your script with torch dynamo?[yes/NO]:dynamo_z+Which dynamo backend would you like to use?c                 6    g | ]}|                                 S  )rE   ).0rG   s     r1   
<listcomp>z'get_sagemaker_input.<locals>.<listcomp>   s     0001QWWYY000r8   r   backendzGDo you want to customize the defaults sent to torch.compile? [yes/NO]: zWhich mode do you want to use?c                 6    t           t          |                    S rB   )r   intrF   s    r1   rH   z%get_sagemaker_input.<locals>.<lambda>   s    ,SVV4 r8   modez\Do you want the fullgraph mode or it is ok to break model into several subgraphs? [yes/NO]: use_fullgraphz7Do you want to enable dynamic shape tracing? [yes/NO]: use_dynamicz:Which EC2 instance type you want to use for your training?c                 6    t           t          |                    S rB   )r   rS   rF   s    r1   rH   z%get_sagemaker_input.<locals>.<lambda>   s    LlmpqrmsmsLt r8   z? [ml.p3.2xlarge]:c                 D    t          |                                           S rB   rC   rF   s    r1   rH   z%get_sagemaker_input.<locals>.<lambda>   s    SVV\\^^ r8   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)?)nofp16bf16fp8rY   zTorch dynamo used without mixed precision requires TF32 to be efficient. Accelerate will enable it by default when launching your scripts.)	image_uricompute_environmentdistributed_typeuse_cpudynamo_configec2_instance_typeprofileregioniam_role_namemixed_precisionnum_machinessagemaker_inputs_filesagemaker_metrics_filedebug)r   rS   r   osenvironr,   r2   r   r   r   r   r   r   NOr   DATA_PARALLELMODEL_PARALLELr   r
   r   AMAZON_SAGEMAKER)credentials_configurationaws_profileaws_access_key_idaws_secret_access_key
aws_regionrole_managementre   is_custom_docker_imagedocker_imageis_sagemaker_inputs_enabledrh   is_sagemaker_metrics_enabledri   r_   ra   
use_dynamoprefixuse_custom_optionsec2_instance_queryrb   rj   rg   rf   s                          r1   get_sagemaker_inputr   a   s    ,'	QR! !
 K A%% !JT]^^^$/
=!!V	
 	
 	
 ''<==*;
&' *+D E E.C
*+@+VVVJ'1BJ#$"W	 "IJ O
 !"#?@@=d]dddeee&}555'</	   L Y!"=?W?WXX",Y/	# # # !" 
 *j$$!
 !

 $.=/	$ $ $  "# 
!+i$$"
 "

 $'	"$67+ 
 MI/	  J  !,8900000#	-
 -
 -
fy() (U#3	
 
 
  	-90"44!	. . .M&6/* 7An'7	7 7 7M&?23 5?I'7	5 5 5M&=01 V3666( @BtBt
 
 	22&'9;S;S]lmmmE3666 N#3	
 
 
 L4BD\Dklll!6
 
 
 #<%%%  O  
o-- Y	
 	
 	
 .?)#+#'!35   r8   )r'   rk   utils.constantsr   r   utils.dataclassesr   r   utils.importsr   config_argsr
   config_utilsr   r   r   r   r   r   r   r$   r2   r7   r   rN   r8   r1   <module>r      s&     				 S S S S S S S S M M M M M M M M / / / / / / ( ( ( ( ( (                   LLL3F 3F 3FlB B B
j j j j jr8   