o
    he(                     @   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	 r=d 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}z+|j| tj|d	d
d ddg dddgd}|j| |  dtj|d	d
d W d S  |jjyP   td|  d Y d S 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_document r/   Z/var/www/html/ai/venv/lib/python3.10/site-packages/accelerate/commands/config/sagemaker.py_create_iam_role_for_sagemaker&   s0   
r1   c                 C   s   t d}|j| dd d S )Nr   )r   RoleArn)r"   r#   get_role)r+   r,   r/   r/   r0   _get_iam_role_arn\   s   
r5   c                  C   s  t dddgt} d }| dkrt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rLtd}nd}td| d t| tdtddd}d }|rmtddd }tdtddd}	d }
|	rtd d!d }
td"tddd}d }|rt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rtd<tddd}d=}|tjtjfv r)td>td=d}t d?g d@t}|r=|dAkr=tdB t|tj|d||||||||
||dCS )DNz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)r6   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.)r6   error_messagezEnter your Docker image: c                 S      t |  S Nstrlowerxr/   r/   r0   <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   r=   r>   r?   rB   r/   r/   r0   rD      rE   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   r=   r>   r?   rB   r/   r/   r0   rD      rE   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                 S   s   g | ]}|  qS r/   )rA   ).0rC   r/   r/   r0   
<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      t t|  S r>   )r   intrB   r/   r/   r0   rD      rE   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                 S   rJ   r>   )r   rK   rB   r/   r/   r0   rD      rE   z? [ml.p3.2xlarge]:c                 S   r=   r>   r?   rB   r/   r/   r0   rD      rE   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fp8rO   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   rK   r   osenvironr*   r1   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_managementr[   is_custom_docker_imagedocker_imageis_sagemaker_inputs_enabledr^   is_sagemaker_metrics_enabledr_   rU   rW   
use_dynamoprefixuse_custom_optionsec2_instance_queryrX   r`   r]   r\   r/   r/   r0   get_sagemaker_inputa   s2  





ru   )r%   ra   utils.constantsr   r   utils.dataclassesr   r   utils.importsr   config_argsr	   config_utilsr
   r   r   r   r   r   r   r"   r1   r5   ru   r/   r/   r/   r0   <module>   s   $6