o
    `Û·ip  ã                   @   sj   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G dd„ deƒZdS )	é    N)ÚListÚOptionalÚTuple)ÚAcceleratorManager)Úenv_boolÚASCEND_RT_VISIBLE_DEVICESÚ0RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICESc                   @   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dS )ÚNPUAcceleratorManagerzAscend NPU accelerators.Úreturnc                   C   ó   dS )NÚNPU© r   r   r   úS/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/_private/accelerators/npu.pyÚget_resource_name   ó   z'NPUAcceleratorManager.get_resource_namec                   C   s   t S )N)Ú!ASCEND_RT_VISIBLE_DEVICES_ENV_VARr   r   r   r   Ú#get_visible_accelerator_ids_env_var   r   z9NPUAcceleratorManager.get_visible_accelerator_ids_env_varc                  C   sD   t j t ¡ d ¡} | d u rd S | dkrg S | dkrg S t|  d¡ƒS )NÚ Ú
NoDevFilesú,)ÚosÚenvironÚgetr	   r   ÚlistÚsplit)Úascend_visible_devicesr   r   r   Ú+get_current_process_visible_accelerator_ids   s   ÿzANPUAcceleratorManager.get_current_process_visible_accelerator_idsc               
   C   s¢   zddl } | j ¡ \}}|dkr|W S W n ty, } zt d|¡ W Y d}~nd}~ww z
t d¡}t|ƒW S  tyP } zt d|¡ W Y d}~dS d}~ww )zëAttempt to detect the number of NPUs on this machine.

        NPU chips are represented as devices within `/dev/`, either as `/dev/davinci?`.

        Returns:
            The number of NPUs if any were detected, otherwise 0.
        r   NzCould not import AscendCL: %sz/dev/davinci[0-9]*z#Failed to detect number of NPUs: %s)ÚaclÚrtÚget_device_countÚ	ExceptionÚloggerÚdebugÚglobÚlen)r   Údevice_countÚretÚeÚ	npu_filesr   r   r   Ú!get_current_node_num_accelerators-   s$   	ÿ€ÿ

€þz7NPUAcceleratorManager.get_current_node_num_acceleratorsc                  C   s2   z	ddl } |  ¡ W S  ty   t d¡ Y dS w )z£Get the type of the Ascend NPU on the current node.

        Returns:
            A string of the type, such as "Ascend910A", "Ascend910B", "Ascend310P1".
        r   NzFailed to detect NPU type.)r   Úget_soc_namer    r!   Ú	exception)r   r   r   r   Ú!get_current_node_accelerator_typeF   s   
þz7NPUAcceleratorManager.get_current_node_accelerator_typeÚquantityc                 C   r   )N)TNr   )r-   r   r   r   Ú"validate_resource_request_quantityU   s   z8NPUAcceleratorManager.validate_resource_request_quantityÚvisible_npu_devicesNc                 C   s0   t tdƒrd S d dd„ | D ƒ¡tjt ¡ < d S )NFr   c                 S   s   g | ]}t |ƒ‘qS r   )Ústr)Ú.0Úir   r   r   Ú
<listcomp>d   s    zUNPUAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r   Ú'NOSET_ASCEND_RT_VISIBLE_DEVICES_ENV_VARÚjoinr   r   r	   r   )r/   r   r   r   Ú+set_current_process_visible_accelerator_ids[   s   
þÿzANPUAcceleratorManager.set_current_process_visible_accelerator_ids)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr0   r   r   r   r   r   Úintr)   r,   Úfloatr   Úboolr.   r6   r   r   r   r   r	      s0    ÿþÿþr	   )r#   Úloggingr   Útypingr   r   r   Ú%ray._private.accelerators.acceleratorr   Úray._private.ray_constantsr   Ú	getLoggerr7   r!   r   r4   r	   r   r   r   r   Ú<module>   s    
ÿ