o
    Tiy$                     @   s@   d dl Z d dlZd dlZddlmZ d dlZG dd deZdS )    N   )DeepSpeedAcceleratorc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdddZ	dd Z
dd Zdd Zdd ZdddZdd ZdddZdddZd d! Zd"d# Zd$d% Zd&d' Zed(d) Zd*d+ Zdd,d-Zdd.d/Zed0d1 Zd2d3 Zdd4d5Zdd6d7Zdd8d9Zdd:d;Z dd<d=Z!dd>d?Z"dd@dAZ#ddBdCZ$ddDdEZ%ddFdGZ&ddHdIZ'ddJdKZ(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3ddbdcZ4ddde Z5edfdg Z6edhdi Z7edjdk Z8edldm Z9edndo Z:edpdq Z;edrds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdS )MLU_Acceleratorc                 C   s   d| _ d| _d| _d | _d S )Nmlucnclinductor)_name_communication_backend_name_compile_backend
class_dictself r   Y/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/accelerator/mlu_accelerator.py__init__   s   
zMLU_Accelerator.__init__c                 C      dS )NFr   r   r   r   r   is_synchronized_device      z&MLU_Accelerator.is_synchronized_devicec                 C      |   S Nr   r   r   r   r   use_host_timers      zMLU_Accelerator.use_host_timersc                 C   r   r   r   r   r   r   r   resolves_data_dependency   r   z(MLU_Accelerator.resolves_data_dependencyc                 C   r   r   r   r   r   r   r   handles_memory_backpressure    r   z+MLU_Accelerator.handles_memory_backpressureNc                 C   s   |d krdS d |S )Nr   mlu:{})formatr   device_indexr   r   r   device_name$   s   
zMLU_Accelerator.device_namec                 C      t j|S r   )torchr   devicer   r   r   r   r"   )      zMLU_Accelerator.devicec                 C   s   t j| d S r   )r!   r   
set_devicer   r   r   r   r$   ,      zMLU_Accelerator.set_devicec                 C   
   t j S r   )r!   r   current_devicer   r   r   r   r'   /      
zMLU_Accelerator.current_devicec                 C   s   d tj S )Nr   )r   r!   r   r'   r   r   r   r   current_device_name2   r%   z#MLU_Accelerator.current_device_namec                 C   r&   r   )r!   r   device_countr   r   r   r   r*   5   r(   zMLU_Accelerator.device_countc                 C   r    r   )r!   r   synchronizer   r   r   r   r+   8   r#   zMLU_Accelerator.synchronizec                 C   s   t jS r   )r!   randomr   r   r   r   r,   <      zMLU_Accelerator.randomc                 C   s"   |d u r
t j|S t j||S r   )r!   r   set_rng_state)r   	new_stater   r   r   r   r.   ?   s   zMLU_Accelerator.set_rng_statec                 C   s   |d u r	t j S t j|S r   )r!   r   get_rng_stater   r   r   r   r0   E   s   
zMLU_Accelerator.get_rng_statec                 C   r    r   )r!   r   manual_seedr   seedr   r   r   r1   K   r#   zMLU_Accelerator.manual_seedc                 C   r    r   )r!   r   manual_seed_allr2   r   r   r   r4   N   r#   zMLU_Accelerator.manual_seed_allc                 C   r    r   )r!   r   initial_seedr2   r   r   r   r5   Q   r#   zMLU_Accelerator.initial_seedc                 C   s   t jj| S r   )r!   r   default_generatorsr   r   r   r   default_generatorT   r#   z!MLU_Accelerator.default_generatorc                 C      t jjS r   )r!   r   Streamr   r   r   r   r9   X      zMLU_Accelerator.Streamc                 C   r    r   )r!   r   stream)r   r;   r   r   r   r;   \   r#   zMLU_Accelerator.streamc                 C   r    r   )r!   r   current_streamr   r   r   r   r<   _   r#   zMLU_Accelerator.current_streamc                 C   r    r   )r!   r   default_streamr   r   r   r   r=   b   r#   zMLU_Accelerator.default_streamc                 C   r8   r   )r!   r   Eventr   r   r   r   r>   e   r:   zMLU_Accelerator.Eventc                 C   r&   r   )r!   r   empty_cacher   r   r   r   r?   j   r(   zMLU_Accelerator.empty_cachec                 C   r    r   )r!   r   memory_allocatedr   r   r   r   r@   m   r#   z MLU_Accelerator.memory_allocatedc                 C   r    r   )r!   r   max_memory_allocatedr   r   r   r   rA   p   r#   z$MLU_Accelerator.max_memory_allocatedc                 C   r    r   )r!   r   reset_max_memory_allocatedr   r   r   r   rB   s   r#   z*MLU_Accelerator.reset_max_memory_allocatedc                 C   r    r   )r!   r   memory_cachedr   r   r   r   rC   v   r#   zMLU_Accelerator.memory_cachedc                 C   r    r   )r!   r   max_memory_cachedr   r   r   r   rD   y   r#   z!MLU_Accelerator.max_memory_cachedc                 C   r    r   )r!   r   reset_max_memory_cachedr   r   r   r   rE   |   r#   z'MLU_Accelerator.reset_max_memory_cachedc                 C      t tjdrtj|S d S )Nmemory_stats)hasattrr!   r   rG   r   r   r   r   rG         zMLU_Accelerator.memory_statsc                 C   rF   )Nreset_peak_memory_stats)rH   r!   r   rJ   r   r   r   r   rJ      rI   z'MLU_Accelerator.reset_peak_memory_statsc                 C   rF   )Nmemory_reserved)rH   r!   r   rK   r   r   r   r   rK      rI   zMLU_Accelerator.memory_reservedc                 C   rF   )Nmax_memory_reserved)rH   r!   r   rL   r   r   r   r   rL      rI   z#MLU_Accelerator.max_memory_reservedc                 C   s   t j|jS r   )r!   r   get_device_propertiestotal_memoryr   r   r   r   rN         zMLU_Accelerator.total_memoryc                 C   s   |  || | S r   )rN   r@   r   r   r   r   available_memory   s   z MLU_Accelerator.available_memoryc                 C   r&   r   )r!   r   is_bf16_supportedr   r   r   r   rQ      r(   z!MLU_Accelerator.is_bf16_supportedc                 C   r   NTr   r   r   r   r   is_fp16_supported   r   z!MLU_Accelerator.is_fp16_supportedc                 C   s4   t jg}|  r|t j |  r|t j |S r   )r!   floatrS   appendhalfrQ   bfloat16)r   supported_dtypesr   r   r   rX      s   z MLU_Accelerator.supported_dtypesc                 C   s   t tjdr
tjjS d S )Namp)rH   r!   r   rY   r   r   r   r   rY      s   zMLU_Accelerator.ampc                 C   r&   r   )r!   r   is_availabler   r   r   r   rZ      r(   zMLU_Accelerator.is_availablec                 C   s    t tjjdrtjj|S d S )N
range_push)rH   r!   r   cnpxr[   )r   msgr   r   r   r[      s   zMLU_Accelerator.range_pushc                 C   s   t tjjdrtjj S d S )N	range_pop)rH   r!   r   r\   r^   r   r   r   r   r^      s   zMLU_Accelerator.range_popc                 C   r    r   )r!   r   
_lazy_call)r   callbackr   r   r   	lazy_call   r#   zMLU_Accelerator.lazy_callc                 C      | j S r   )r	   r   r   r   r   communication_backend_name   r-   z*MLU_Accelerator.communication_backend_namec                 C   r   rR   r   r   r   r   r   is_triton_supported   r   z#MLU_Accelerator.is_triton_supportedc                 C   s   t j  d S r   )r!   r   MLUGraphr   r   r   r   create_graph   rO   zMLU_Accelerator.create_graphc                 C   s   t j|||S r   )r!   r   graph)r   rg   poolr;   r   r   r   capture_to_graph   r%   z MLU_Accelerator.capture_to_graphc                 C   s   |   d S r   )replay)r   rg   r   r   r   replay_graph   s   zMLU_Accelerator.replay_graphc                 C      t jtjtjddS Nr   )dtyper"   )	functoolspartialr!   tensorrW   r   r   r   r   BFloat16Tensor      zMLU_Accelerator.BFloat16Tensorc                 C   rl   rm   )ro   rp   r!   rq   uint8r   r   r   r   
ByteTensor   rs   zMLU_Accelerator.ByteTensorc                 C   rl   rm   )ro   rp   r!   rq   doubler   r   r   r   DoubleTensor   rs   zMLU_Accelerator.DoubleTensorc                 C   rl   rm   )ro   rp   r!   rq   rT   r   r   r   r   FloatTensor   rs   zMLU_Accelerator.FloatTensorc                 C   rl   rm   )ro   rp   r!   rq   rV   r   r   r   r   
HalfTensor   rs   zMLU_Accelerator.HalfTensorc                 C   rl   rm   )ro   rp   r!   rq   intr   r   r   r   	IntTensor   rs   zMLU_Accelerator.IntTensorc                 C   rl   rm   )ro   rp   r!   rq   longr   r   r   r   
LongTensor   rs   zMLU_Accelerator.LongTensorc                 C      |  S r   )
pin_memoryr   rq   r   r   r   r      r   zMLU_Accelerator.pin_memoryc                 C   r~   r   )	is_pinnedr   r   r   r   r      r   zMLU_Accelerator.is_pinnedc                 C   s   t |j}|drdS dS )Nzmlu:TF)strr"   
startswith)r   rq   
device_strr   r   r   on_accelerator   s   

zMLU_Accelerator.on_acceleratorc                 C   s(   z	ddl m} W dS  ty   Y dS w )Nr   )__deepspeed__zop_builder.mluzdeepspeed.ops.op_builder.mlu)
op_builderr   ImportError)r   r   r   r   r   op_builder_dir   s   zMLU_Accelerator.op_builder_dirc                 C   sD   | j rd S t|  }i | _ t|tjD ]	\}}|| j |< qd S r   )r   	importlibimport_moduler   inspect
getmembersisclass)r   op_builder_module
class_name	class_objr   r   r   _lazy_init_class_dict   s   z%MLU_Accelerator._lazy_init_class_dictc                 C   s   |  |}| S r   )get_op_builder)r   r   builder_classr   r   r   create_op_builder	  s   
z!MLU_Accelerator.create_op_builderc                 C   s&   |    || jv r| j| S | jd S )NNotImplementedBuilder)r   r   )r   r   r   r   r   r     s   


zMLU_Accelerator.get_op_builderc                 C   s   ddl m} |S )Nr   )BuildExtension)torch.utils.cpp_extensionr   )r   r   r   r   r   build_extension  s   zMLU_Accelerator.build_extensionc                 C   s   g dS )N)NEUWARE_HOMECNCL
LD_LIBRARYPATHr   r   r   r   r   export_envs  r   zMLU_Accelerator.export_envsc                 C   s   dgS )NMLU_VISIBLE_DEVICESr   r   r   r   r   visible_devices_envs  r-   z$MLU_Accelerator.visible_devices_envsc                 C   s&   |   D ]}dtt|||< qd S )N,)r   joinmapr   )r   current_envlocal_accelerator_idsenvr   r   r   set_visible_devices_envs  s   z(MLU_Accelerator.set_visible_devices_envsc                 C   rb   r   )r
   r   r   r   r   get_compile_backend#  r-   z#MLU_Accelerator.get_compile_backendc                 C   s<   t jjdd}||v r|| _d S t| d|   d| )Nr   )exclude_tagsz not supported by z. Supported Backends are )r!   _dynamolist_backendsr
   
ValueErrorr   )r   backendsupported_backendsr   r   r   set_compile_backend&  s   
z#MLU_Accelerator.set_compile_backendr   )NN)J__name__
__module____qualname__r   r   r   r   r   r   r"   r$   r'   r)   r*   r+   r,   r.   r0   r1   r4   r5   r7   propertyr9   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rG   rJ   rK   rL   rN   rP   rQ   rS   rX   rY   rZ   r[   r^   ra   rc   rd   rf   ri   rk   rr   ru   rw   rx   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    




















	







	r   )r   r   ro   abstract_acceleratorr   r!   r   r   r   r   r   <module>   s   