o
    b²“i÷  ã                   @   sh   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e d¡ZG dd„ deƒZdS )	é    N)ÚListÚOptionalÚTuple)ÚAcceleratorManagerÚCUDA_VISIBLE_DEVICESÚ+RAY_EXPERIMENTAL_NOSET_CUDA_VISIBLE_DEVICESz\w+\s+([A-Z0-9]+)c                   @   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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 )ÚNvidiaGPUAcceleratorManagerzNVIDIA GPU accelerators.Úreturnc                   C   ó   dS )NÚGPU© r   r   r   úX/home/ubuntu/.local/lib/python3.10/site-packages/ray/_private/accelerators/nvidia_gpu.pyÚget_resource_name   ó   z-NvidiaGPUAcceleratorManager.get_resource_namec                   C   s   t S )N)ÚCUDA_VISIBLE_DEVICES_ENV_VARr   r   r   r   Ú#get_visible_accelerator_ids_env_var   r   z?NvidiaGPUAcceleratorManager.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)Úcuda_visible_devicesr   r   r   Ú+get_current_process_visible_accelerator_ids   s   ÿzGNvidiaGPUAcceleratorManager.get_current_process_visible_accelerator_idsc                  C   sP   dd l m  m  m}  z|  ¡  W n | jy   Y dS w |  ¡ }|  ¡  |S )Nr   )Úray._private.thirdparty.pynvmlÚ_privateÚ
thirdpartyÚpynvmlÚnvmlInitÚ	NVMLErrorÚnvmlDeviceGetCountÚnvmlShutdown)r   Údevice_countr   r   r   Ú!get_current_node_num_accelerators-   s   ÿz=NvidiaGPUAcceleratorManager.get_current_node_num_acceleratorsc                  C   sŽ   dd l m  m  m}  z|  ¡  W n | jy   Y d S w |  ¡ }d }|dkrA|  d¡}|  |¡}t	|t
ƒr<| d¡}t |¡}|  ¡  |S )Nr   zutf-8)r   r   r   r   r    r!   r"   ÚnvmlDeviceGetHandleByIndexÚnvmlDeviceGetNameÚ
isinstanceÚbytesÚdecoder   Ú_gpu_name_to_accelerator_typer#   )r   r$   Úcuda_device_typeÚhandleÚdevice_namer   r   r   Ú!get_current_node_accelerator_type9   s"   ÿ



ÿz=NvidiaGPUAcceleratorManager.get_current_node_accelerator_typec                 C   s(   | d u rd S t  | ¡}|r| d¡S d S )Né   )ÚNVIDIA_GPU_NAME_PATTERNÚmatchÚgroup)Únamer2   r   r   r   r+   N   s   
z9NvidiaGPUAcceleratorManager._gpu_name_to_accelerator_typeÚquantityc                 C   r
   )N)TNr   )r5   r   r   r   Ú"validate_resource_request_quantityU   s   z>NvidiaGPUAcceleratorManager.validate_resource_request_quantityÚvisible_cuda_devicesNc                 C   s2   t j t¡rd S d dd„ | D ƒ¡t jt ¡ < d S )Nr   c                 S   s   g | ]}t |ƒ‘qS r   )Ústr)Ú.0Úir   r   r   Ú
<listcomp>d   s    z[NvidiaGPUAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r   r   r   Ú"NOSET_CUDA_VISIBLE_DEVICES_ENV_VARÚjoinr   r   )r7   r   r   r   Ú+set_current_process_visible_accelerator_ids[   s   þÿzGNvidiaGPUAcceleratorManager.set_current_process_visible_accelerator_idsÚinstance_typeÚ	instancesc                 C   óJ   | |vrd S ||    di ¡  d¡}|d ur#t|ƒdksJ ‚|d d S d S )NÚGpuInfoÚGpusr0   r   ÚCount©r   Úlen©r?   r@   Úgpusr   r   r   Ú!get_ec2_instance_num_acceleratorsf   ó   z=NvidiaGPUAcceleratorManager.get_ec2_instance_num_acceleratorsc                 C   rA   )NrB   rC   r0   r   ÚNamerE   rG   r   r   r   Ú!get_ec2_instance_accelerator_typet   rJ   z=NvidiaGPUAcceleratorManager.get_ec2_instance_accelerator_type)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr8   r   r   r   r   r   Úintr%   r/   r+   Úfloatr   Úboolr6   r>   ÚdictrI   rL   r   r   r   r   r      sT    
ÿþÿþ
ÿÿþÿÿþr   )Úloggingr   ÚreÚtypingr   r   r   Ú%ray._private.accelerators.acceleratorr   Ú	getLoggerrM   Úloggerr   r<   Úcompiler1   r   r   r   r   r   Ú<module>   s    

