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
 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)env_bool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   V/home/ubuntu/vllm_env/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_accelerators9   s   z:NeuronAcceleratorManager.get_current_node_num_acceleratorsc                  C   s   ddl m}  | S Nr   AWS_NEURON_COREray.util.acceleratorsr7   r6   r   r   r   !get_current_node_accelerator_typeO   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_quantityU   s   
z;NeuronAcceleratorManager.validate_resource_request_quantityvisible_neuron_core_idsNc                 C   s0   t td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.
        FNr   c                 S   s   g | ]}t |qS r   )str).0ir   r   r   
<listcomp>r   s    zXNeuronAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r   )NOSET_AWS_NEURON_RT_VISIBLE_CORES_ENV_VARr+   r   r   r   r   )r@   r   r   r   +set_current_process_visible_accelerator_idsc   s   

zDNeuronAcceleratorManager.set_current_process_visible_accelerator_idsinstance_type	instancesc                 C   s   t |  d S r   )AWS_NEURON_INSTANCE_MAPr   lower)rG   rH   r   r   r   !get_ec2_instance_num_acceleratorst   s   	z:NeuronAcceleratorManager.get_ec2_instance_num_acceleratorsc                 C   s   ddl m} |S r5   r8   )rG   rH   r7   r   r   r   !get_ec2_instance_accelerator_type   s   z:NeuronAcceleratorManager.get_ec2_instance_accelerator_type)__name__
__module____qualname____doc__staticmethodrA   r   r   r   r   r   intr4   r:   r=   r   boolr?   rF   dictrK   rL   r   r   r   r   r       sP    
r   )r.   loggingr   r)   r$   typingr   r   r   %ray._private.accelerators.acceleratorr   ray._private.ray_constantsr   	getLoggerrM   loggerr   rE   rI   r   r   r   r   r   <module>   s*    
