o
    bi$                     @   s   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ddddddZG dd deZdS )    N)ListOptionalTuple)AcceleratorManager)CUDA_VISIBLE_DEVICES_ENV_VARHIP_VISIBLE_DEVICES*RAY_EXPERIMENTAL_NOSET_HIP_VISIBLE_DEVICESzAMD-Instinct-MI100zAMD-Instinct-MI250XzAMD-Instinct-MI250X-MI250zAMD-Instinct-MI210zAMD-Instinct-MI300AzAMD-Instinct-MI300X-OAMzAMD-Instinct-MI308X-OAMzAMD-Instinct-MI300X-HFzAMD-Instinct-MI325X-OAMzAMD-Radeon-R9-200-HD-7900zAMD-Radeon-HD-7900)0x738c0x74080x740c0x740f0x74a00x74a10x74a20x74a90x74a50x67980x67990x679A0x679Bc                   @   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	e fddZdS )AMDGPUAcceleratorManagerzAMD GPU accelerators.returnc                   C      dS )NGPU r   r   r   U/home/ubuntu/.local/lib/python3.10/site-packages/ray/_private/accelerators/amd_gpu.pyget_resource_name!   s   z*AMDGPUAcceleratorManager.get_resource_namec                  C   s~   t tjvrdtjv rtdt  dt } tjtd d u }r=tjt d d u  }r.t} | S ||kr=tdt  dt d| S )NROCR_VISIBLE_DEVICESzPlease use z  instead of ROCR_VISIBLE_DEVICESz-Inconsistant values found. Please use either z or .)HIP_VISIBLE_DEVICES_ENV_VARosenvironRuntimeErrorgetr   
ValueError)env_varcuda_valhip_valr   r   r   #get_visible_accelerator_ids_env_var%   s   


z<AMDGPUAcceleratorManager.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,)r    r!   r#   r   r(   listsplit)amd_visible_devicesr   r   r   +get_current_process_visible_accelerator_ids:   s   zDAMDGPUAcceleratorManager.get_current_process_visible_accelerator_idsc                  C   s   dd l m  m  m}  d}z'z
|   |  }W n	 ty"   Y nw W z|   W |S  ty5   Y |S w z|   W w  tyE   Y w w Nr   ) ray._private.thirdparty.pyamdsmi_private
thirdpartypyamdsmismi_initializesmi_get_device_count	Exceptionsmi_shutdown)r4   num_gpusr   r   r   !get_current_node_num_acceleratorsK   s*   
z:AMDGPUAcceleratorManager.get_current_node_num_acceleratorsc                  C   s<   zt  } | d u rW d S t | d W S  ty   Y d S w r0   )r   _get_amd_device_ids_gpu_name_to_accelerator_typer7   )
device_idsr   r   r   !get_current_node_accelerator_type^   s   z:AMDGPUAcceleratorManager.get_current_node_accelerator_typec                 C   s0   | d u rd S zt |  }|W S  ty   Y d S w )N)amd_product_dictr7   )namematchr   r   r   r<   h   s   z6AMDGPUAcceleratorManager._gpu_name_to_accelerator_typequantityc                 C   r   )N)TNr   )rB   r   r   r   "validate_resource_request_quantityr   s   z;AMDGPUAcceleratorManager.validate_resource_request_quantityvisible_amd_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>   s    zXAMDGPUAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r    r!   r#   !NOSET_HIP_VISIBLE_DEVICES_ENV_VARjoinr   r(   )rD   r   r   r   +set_current_process_visible_accelerator_idsx   s   zDAMDGPUAcceleratorManager.set_current_process_visible_accelerator_idsc                  C   s   ddl m  m  m}  g }zPz!|   |  }t|D ]}| |}|dkr.|t	| qW n t
yK   Y W z|   W dS  t
yJ   Y dS w w W z|   W |S  t
y^   Y |S w z|   W w  t
yn   Y w w )zGet the list of GPUs IDs
        Example:
            On a node with 2x MI210 GPUs
            pyamdsmi library python bindings
            return: ['0x740f', '0x740f']
        Returns:
            A list of strings containing GPU IDs
        r   N)r1   r2   r3   r4   r5   r6   rangesmi_get_device_idappendhexr7   pyamdsmi_shutdown)r4   r=   num_devicesrG   didr   r   r   r;      s@   


z,AMDGPUAcceleratorManager._get_amd_device_ids)__name__
__module____qualname____doc__staticmethodrE   r   r(   r   r   r/   intr:   r>   r<   floatr   boolrC   rK   r;   r   r   r   r   r      s8    	
	
r   )loggingr    typingr   r   r   %ray._private.accelerators.acceleratorr   $ray._private.accelerators.nvidia_gpur   	getLoggerrS   loggerr   rI   r?   r   r   r   r   r   <module>   s.    
