
    &`i                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
  ej        e          ZdZdZddddddd	d
Z G d de
          ZdS )    N)ListOptionalTuple)AcceleratorManagerNEURON_RT_VISIBLE_CORES.RAY_EXPERIMENTAL_NOSET_NEURON_RT_VISIBLE_CORES             )ztrn1.2xlargeztrn1.32xlargeztrn1n.32xlargezinf2.xlargezinf2.8xlargezinf2.24xlargezinf2.48xlargec                      e Zd ZdZedefd            Zedefd            Zedee	e                  fd            Z
edefd            Zedee         fd            Zededeeee         f         fd	            Zed
e	e         ddfd            Zedededee         fd            Zedededee         fd            ZdS )NeuronAcceleratorManagerz)AWS Inferentia and Trainium accelerators.returnc                      dS )Nneuron_cores r       t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/_private/accelerators/neuron.pyget_resource_namez*NeuronAcceleratorManager.get_resource_name"   s    ~r   c                      t           S N)NEURON_RT_VISIBLE_CORES_ENV_VARr   r   r   #get_visible_accelerator_ids_env_varz<NeuronAcceleratorManager.get_visible_accelerator_ids_env_var&   s    ..r   c                      t           j                            t                                          d           } | d S | dk    rg S t          |                     d                    S )N ,)osenvirongetr   r   listsplit)neuron_visible_coress    r   +get_current_process_visible_accelerator_idszDNeuronAcceleratorManager.get_current_process_visible_accelerator_ids*   sc    !z~~$HHJJD 
  
  '42%%I(..s33444r   c                     d} d}t           j                            d          rt          j                            |          rt          j        t          j                            |d          dgt          j	        t          j	                  }|j
        dk    r>|j        r7t          j        |j                  }|D ]}| |                    dd          z  } | S )z
        Attempt to detect the number of Neuron cores on this machine.

        Returns:
            The number of Neuron cores if any were detected, otherwise 0.
        r   z/opt/aws/neuron/bin/linuxz	neuron-lsz--json-output)stdoutstderrnc_count)sysplatform
startswithr   pathisdir
subprocessrunjoinPIPE
returncoder&   jsonloadsr   )r(   neuron_pathresultneuron_devicesneuron_devices        r   !get_current_node_num_acceleratorsz:NeuronAcceleratorManager.get_current_node_num_accelerators8   s     ,<""7++ 		Ak0J0J 		A^k;77I!!  F
  A%%&-%!%FM!:!:%3 A AM 1 1*a @ @@HHr   c                      ddl m}  | S Nr   AWS_NEURON_COREray.util.acceleratorsr=   r<   s    r   !get_current_node_accelerator_typez:NeuronAcceleratorManager.get_current_node_accelerator_typeN   s    999999r   quantityc                     t          | t                    r5|                                 s!dt                                           d|  dfS dS )NFzA resource quantity must be whole numbers. The specified quantity z is invalid.)TN)
isinstancefloat
is_integerr   r   )rA   s    r   "validate_resource_request_quantityz;NeuronAcceleratorManager.validate_resource_request_quantityT   sm     h&& 	 x/B/B/D/D 	 +==?? A A*2A A A   <r   visible_neuron_core_idsNc                     t           j                            t                    rdS d                    d | D                       t           j        t
                                          <   dS )zSet the NEURON_RT_VISIBLE_CORES environment variable based on
        given visible_neuron_core_ids.

        Args:
            visible_neuron_core_ids (List[str]): List of int representing core IDs.
        Nr   c                 ,    g | ]}t          |          S r   )str).0is     r   
<listcomp>zXNeuronAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>q   s    >>>c!ff>>>r   )r   r   r   )NOSET_AWS_NEURON_RT_VISIBLE_CORES_ENV_VARr0   r   r   )rG   s    r   +set_current_process_visible_accelerator_idszDNeuronAcceleratorManager.set_current_process_visible_accelerator_idsb   sf     :>>CDD 	F HH>>&=>>>?? 	
$HHJJ	
 	
 	
r   instance_type	instancesc                 \    t                               |                                 d           S r   )AWS_NEURON_INSTANCE_MAPr   lower)rP   rQ   s     r   !get_ec2_instance_num_acceleratorsz:NeuronAcceleratorManager.get_ec2_instance_num_acceleratorss   s&     '**=+>+>+@+@$GGGr   c                     ddl m} |S r;   r>   )rP   rQ   r=   s      r   !get_ec2_instance_accelerator_typez:NeuronAcceleratorManager.get_ec2_instance_accelerator_type~   s     	:99999r   )__name__
__module____qualname____doc__staticmethodrJ   r   r   r   r   r#   intr9   r@   rD   r   boolrF   rO   dictrU   rW   r   r   r   r   r      s       33s    \ / / / / \/ 5$s)9L 5 5 5 \5 s    \* x}    \
   	tXc]"	#      \  @!%c@	@ @ @ \@  HH'+H	#H H H \H '+	#   \  r   r   )r3   loggingr   r.   r)   typingr   r   r   %ray._private.accelerators.acceleratorr   	getLoggerrX   loggerr   rN   rS   r   r   r   r   <module>re      s      				     



 ( ( ( ( ( ( ( ( ( ( D D D D D D		8	$	$"; 4 *   e e e e e1 e e e e er   