o
    Ti^                     @   sH   d dl Z ddlmZ zd dlZ W n	 ey   Y nw 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d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d(d) Zed*d+ Zd,d- Zdd.d/Zdd0d1Zed2d3 Zd4d5 Zdd6d7Zdd8d9Zd:d; Z dd<d=Z!dd>d?Z"dd@dAZ#ddBdCZ$ddDdEZ%ddFdGZ&ddHdIZ'ddJdKZ(ddLdMZ)ddNdOZ*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5ddfdgZ6dhdi Z7edjdk Z8edldm Z9edndo Z:edpdq Z;edrds Z<edtdu Z=edvdw Z>ddydzZ?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdS )MPS_Acceleratorc                 C   s   d| _ d | _d| _d S )Nmpsinductor)_name_communication_backend_name_compile_backendself r   Y/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/accelerator/mps_accelerator.py__init__   s   
zMPS_Accelerator.__init__c                 C      dS NFr   r
   r   r   r   is_synchronized_device      z&MPS_Accelerator.is_synchronized_devicec                 C      |   S Nr   r
   r   r   r   use_host_timers      zMPS_Accelerator.use_host_timersc                 C   r   r   r   r
   r   r   r   resolves_data_dependency   r   z(MPS_Accelerator.resolves_data_dependencyc                 C   r   r   r   r
   r   r   r   handles_memory_backpressure"   r   z+MPS_Accelerator.handles_memory_backpressureNc                 C   s   |d u rdS d |S )Nr   zmps:{})formatr   device_indexr   r   r   device_name&   s   
zMPS_Accelerator.device_namec                 C      t jdddS Nr   r   )indextorchdevicer   r   r   r   r#   +      zMPS_Accelerator.devicec                 C      d S r   r   r   r   r   r   
set_device.   r   zMPS_Accelerator.set_devicec                 C   r   r   r!   r
   r   r   r   current_device1   r$   zMPS_Accelerator.current_devicec                 C   r   )Nzmps:0r   r
   r   r   r   current_device_name4   r   z#MPS_Accelerator.current_device_namec                 C   r   )Nr   r   r
   r   r   r   device_count7   r   zMPS_Accelerator.device_countc                 C   
   t j S r   )r"   r   synchronizer   r   r   r   r+   :      
zMPS_Accelerator.synchronizec                 C   s   t jS r   )r"   randomr
   r   r   r   r-   >      zMPS_Accelerator.randomc                 C      t j|S r   )r"   r   set_rng_state)r   	new_stater   r   r   r   r0   A      zMPS_Accelerator.set_rng_statec                 C   r*   r   )r"   r   get_rng_stater   r   r   r   r3   D   r,   zMPS_Accelerator.get_rng_statec                 C   r/   r   r"   r   manual_seedr   seedr   r   r   r5   G   r2   zMPS_Accelerator.manual_seedc                 C   r/   r   r4   r6   r   r   r   manual_seed_allJ   r2   zMPS_Accelerator.manual_seed_allc                 C   r*   r   )r"   r   r7   r
   r   r   r   r7   M   r,   zMPS_Accelerator.seedc                 C   r%   r   r   r
   r   r   r   initial_seedP   r   zMPS_Accelerator.initial_seedc                 C   r%   r   r   r   r   r   r   default_generatorS   r   z!MPS_Accelerator.default_generatorc                 C   r%   r   r   r
   r   r   r   StreamW      zMPS_Accelerator.Streamc                 C   r%   r   r   )r   streamr   r   r   r=   [   r   zMPS_Accelerator.streamc                 C   r%   r   r   r   r   r   r   current_stream^   r   zMPS_Accelerator.current_streamc                 C   r%   r   r   r   r   r   r   default_streama   r   zMPS_Accelerator.default_streamc                 C   r%   r   r   r
   r   r   r   Eventd   r<   zMPS_Accelerator.Eventc                 C   r*   r   )r"   r   empty_cacher
   r   r   r   rA   i   r,   zMPS_Accelerator.empty_cachec                 C   r*   r   )r"   r   current_allocated_memoryr   r   r   r   memory_allocatedl   r,   z MPS_Accelerator.memory_allocatedc                 C   r*   r   )r"   r   driver_allocated_memoryr   r   r   r   max_memory_allocatedo   r,   z$MPS_Accelerator.max_memory_allocatedc                 C   r/   r   )r"   r   set_per_process_memory_fraction)r   fractionr   r   r   rF   r   r2   z/MPS_Accelerator.set_per_process_memory_fractionc                 C   r%   r   r   r   r   r   r   reset_max_memory_allocatedu   r   z*MPS_Accelerator.reset_max_memory_allocatedc                 C   r%   r   r   r   r   r   r   memory_cachedx   r   zMPS_Accelerator.memory_cachedc                 C   r%   r   r   r   r   r   r   max_memory_cached{   r   z!MPS_Accelerator.max_memory_cachedc                 C   r%   r   r   r   r   r   r   reset_max_memory_cached~   r   z'MPS_Accelerator.reset_max_memory_cachedc                 C   r%   r   r   r   r   r   r   memory_stats   r   zMPS_Accelerator.memory_statsc                 C   r%   r   r   r   r   r   r   reset_peak_memory_stats   r   z'MPS_Accelerator.reset_peak_memory_statsc                 C   r%   r   r   r   r   r   r   memory_reserved   r   zMPS_Accelerator.memory_reservedc                 C   r%   r   r   r   r   r   r   max_memory_reserved   r   z#MPS_Accelerator.max_memory_reservedc                 C   r%   r   r   r   r   r   r   total_memory   r   zMPS_Accelerator.total_memoryc                 C   r%   r   r   r   r   r   r   available_memory   r   z MPS_Accelerator.available_memoryc                 C   r   r   r   r
   r   r   r   is_bf16_supported   r   z!MPS_Accelerator.is_bf16_supportedc                 C   r   r   r   r
   r   r   r   is_fp16_supported   r   z!MPS_Accelerator.is_fp16_supportedc                 C   s   t jgS r   )r"   floatr
   r   r   r   supported_dtypes   r   z MPS_Accelerator.supported_dtypesc                 C   r%   r   r   r
   r   r   r   amp   r   zMPS_Accelerator.ampc                 C   s   t tjdotjj S )Nr   )hasattrr"   backendsr   is_availabler
   r   r   r   rY      s   zMPS_Accelerator.is_availablec                 C   r%   r   r   )r   msgr   r   r   
range_push   r   zMPS_Accelerator.range_pushc                 C   r%   r   r   r
   r   r   r   	range_pop   r   zMPS_Accelerator.range_popc                 C   r%   r   r   )r   callbackr   r   r   	lazy_call   r   zMPS_Accelerator.lazy_callc                 C      | j S r   )r   r
   r   r   r   communication_backend_name   r.   z*MPS_Accelerator.communication_backend_namec                 C   r   r   r   r
   r   r   r   is_triton_supported   r   z#MPS_Accelerator.is_triton_supportedc                 C   r%   r   r   r
   r   r   r   create_graph   r   zMPS_Accelerator.create_graphc                 C   s   ddl m} | S )Nr   )noop_context)deepspeed.runtime.utilsrc   )r   graphpoolr=   rc   r   r   r   capture_to_graph   s   z MPS_Accelerator.capture_to_graphc                 C   r%   r   r   )r   re   r   r   r   replay_graph   r   zMPS_Accelerator.replay_graphc                 C   r%   r   r   r
   r   r   r   BFloat16Tensor   r<   zMPS_Accelerator.BFloat16Tensorc                 C   r%   r   r   r
   r   r   r   
ByteTensor   r<   zMPS_Accelerator.ByteTensorc                 C   r%   r   r   r
   r   r   r   DoubleTensor   r<   zMPS_Accelerator.DoubleTensorc                 C   r%   r   r   r
   r   r   r   FloatTensor   r<   zMPS_Accelerator.FloatTensorc                 C   r%   r   r   r
   r   r   r   
HalfTensor   r<   zMPS_Accelerator.HalfTensorc                 C   r%   r   r   r
   r   r   r   	IntTensor   r<   zMPS_Accelerator.IntTensorc                 C   r%   r   r   r
   r   r   r   
LongTensor   r<   zMPS_Accelerator.LongTensorr   c                 C      |  S r   )
pin_memory)r   tensoralign_bytesr   r   r   rq      r   zMPS_Accelerator.pin_memoryc                 C   rp   r   )	is_pinned)r   rr   r   r   r   rt      r   zMPS_Accelerator.is_pinnedc                 C   s   t |j}|drdS dS )Nr   TF)strr#   
startswith)r   rr   
device_strr   r   r   on_accelerator   s   

zMPS_Accelerator.on_acceleratorc                 C   s(   z	ddl m} W dS  ty   Y dS w )Nr   )__deepspeed__
op_builderzdeepspeed.ops.op_builder)rz   ry   ImportError)r   ry   r   r   r   op_builder_dir   s   zMPS_Accelerator.op_builder_dirc                 C   s   |  |}|d ur| S d S r   )get_op_builder)r   op_namebuilder_classr   r   r   create_op_builder   s   
z!MPS_Accelerator.create_op_builderc                 C   s   ddl m} |S )Nr   )NotImplementedBuilder)deepspeed.ops.op_builder.cpur   )r   
class_namer   r   r   r   r}         zMPS_Accelerator.get_op_builderc                 C   s   ddl m} |S )Nr   )BuildExtension)torch.utils.cpp_extensionr   )r   r   r   r   r   build_extension   r   zMPS_Accelerator.build_extensionc                 C   s   g S r   r   r
   r   r   r   export_envs  r   zMPS_Accelerator.export_envsc                 C   s   dgS )NCUDA_VISIBLE_DEVICESr   r
   r   r   r   visible_devices_envs  s   z$MPS_Accelerator.visible_devices_envsc                 C   s&   |   D ]}dtt|||< qd S )N,)r   joinmapru   )r   current_envlocal_accelerator_idsenvr   r   r   set_visible_devices_envs  s   z(MPS_Accelerator.set_visible_devices_envsc                 C   r_   r   )r	   r
   r   r   r   get_compile_backend  r.   z#MPS_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#MPS_Accelerator.set_compile_backendr   )NN)r   )K__name__
__module____qualname__r   r   r   r   r   r   r#   r&   r'   r(   r)   r+   r-   r0   r3   r5   r8   r7   r9   r:   propertyr;   r=   r>   r?   r@   rA   rC   rE   rF   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rU   rV   rY   r[   r\   r^   r`   ra   rb   rg   rh   ri   rj   rk   rl   rm   rn   ro   rq   rt   rx   r|   r   r}   r   r   r   r   r   r   r   r   r   r   r      s    




























r   )r"   abstract_acceleratorr   	torch.mpsr{   r   r   r   r   r   <module>   s   