o
    $i                     @   s   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eZdZdZddddddd	d
ZG d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                   @   s   e Zd ZdZedefddZedefddZedee	e  fddZ
edefd	d
Zedee fddZededeeee f fddZede	e ddfddZedededee fddZedededee fddZdS )NeuronAcceleratorManagerz)AWS Inferentia and Trainium accelerators.returnc                   C   s   dS )Nneuron_cores r   r   r   ]/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/_private/accelerators/neuron.pyget_resource_name"      z*NeuronAcceleratorManager.get_resource_namec                   C   s   t S N)NEURON_RT_VISIBLE_CORES_ENV_VARr   r   r   r   #get_visible_accelerator_ids_env_var&   r   z<NeuronAcceleratorManager.get_visible_accelerator_ids_env_varc                  C   s8   t jt d } | d u rd S | dkrg S t| dS )N ,)osenvirongetr   r   listsplit)neuron_visible_coresr   r   r   +get_current_process_visible_accelerator_ids*   s   zDNeuronAcceleratorManager.get_current_process_visible_accelerator_idsc                  C   s|   d} d}t jdr<tj|r<tjtj|ddgtj	tj	d}|j
dkr<|jr<t|j}|D ]
}| |dd7 } q1| 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_devicer   r   r   !get_current_node_num_accelerators8   s   z:NeuronAcceleratorManager.get_current_node_num_acceleratorsc                  C   s   ddl m}  | S Nr   AWS_NEURON_COREray.util.acceleratorsr6   r5   r   r   r   !get_current_node_accelerator_typeN   s   z:NeuronAcceleratorManager.get_current_node_accelerator_typequantityc                 C   s.   t | tr|  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   )r:   r   r   r   "validate_resource_request_quantityT   s   
z;NeuronAcceleratorManager.validate_resource_request_quantityvisible_neuron_core_idsNc                 C   s2   t jtrdS d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                 S   s   g | ]}t |qS r   )str).0ir   r   r   
<listcomp>q   s    zXNeuronAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r   r   r   )NOSET_AWS_NEURON_RT_VISIBLE_CORES_ENV_VARr*   r   r   )r?   r   r   r   +set_current_process_visible_accelerator_idsb   s   
zDNeuronAcceleratorManager.set_current_process_visible_accelerator_idsinstance_type	instancesc                 C   s   t |  d S r   )AWS_NEURON_INSTANCE_MAPr   lower)rF   rG   r   r   r   !get_ec2_instance_num_acceleratorss   s   	z:NeuronAcceleratorManager.get_ec2_instance_num_acceleratorsc                 C   s   ddl m} |S r4   r7   )rF   rG   r6   r   r   r   !get_ec2_instance_accelerator_type~   s   z:NeuronAcceleratorManager.get_ec2_instance_accelerator_type)__name__
__module____qualname____doc__staticmethodr@   r   r   r   r   r   intr3   r9   r<   r   boolr>   rE   dictrJ   rK   r   r   r   r   r      sP    
r   )r-   loggingr   r(   r#   typingr   r   r   %ray._private.accelerators.acceleratorr   	getLoggerrL   loggerr   rD   rH   r   r   r   r   r   <module>   s(    
