o
    8wiR                     @   s   d dl Z d dlmZmZ d dlZd dlmZ d dlZd dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ G dd deZ dS )    N)OptionalUnion)override)_XLA_AVAILABLE)CheckpointIO	PrecisionXLACheckpointIO)_StrategyRegistry)_optimizers_to_device)_DEVICE)_WrappingCheckpointIO)XLAPrecision)SingleDeviceStrategy)	TrainerFn)find_shared_parametersset_shared_parametersc                       s  e Zd ZdZ				ddeded deeeef  dee	 d	e
f
 fd
dZeedeeef fddZejedee ddfddZeede	fddZejedee ddfddZedddZeededdfddZed fddZ  ZS ) SingleDeviceXLAStrategyz-Strategy for training on a single XLA device.NFdeviceacceleratorzpl.accelerators.Acceleratorcheckpoint_ioprecision_plugindebugc                    sX   t sttt t|tjr|j}dd lm  m	} t
 j|||||d || _d S )Nr   )r   r   r   r   )r   ModuleNotFoundErrorstr
isinstancetorchr   indextorch_xla.core.xla_modelcore	xla_modelsuper__init__
xla_devicer   )selfr   r   r   r   r   xm	__class__ d/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/pytorch_lightning/strategies/single_xla.pyr!   $   s   
z SingleDeviceXLAStrategy.__init__returnc                 C   s*   | j }|d urt|ttfsJ |S t S N)_checkpoint_ior   r   r   r#   pluginr'   r'   r(   r   ;   s
   z%SingleDeviceXLAStrategy.checkpoint_ioioc                 C   s.   |d urt |ttfstd| || _d S )NzHThe XLA strategy can only work with the `XLACheckpointIO` plugin, found )r   r   r   	TypeErrorr+   )r#   r.   r'   r'   r(   r   D   s   
c                 C   s&   | j }|d urt|tsJ |S t S r*   )_precision_pluginr   r   r,   r'   r'   r(   r   K   s
   z(SingleDeviceXLAStrategy.precision_pluginc                 C   s*   |d urt |tstd| || _d S )NzEThe XLA strategy can only work with the `XLAPrecision` plugin, found )r   r   r/   r0   )r#   r   r'   r'   r(   r   T   s   
trainer
pl.Trainerc                 C   s   | j r
tdtjd< | jd usJ | j| | jd usJ | j| j t	| j}| 
  t| j| | | j| _|jjtjkrG| | |   |jjtjkr[t| j| j d S d S )N   PT_XLA_DEBUG)r   r   osenvironr   setupmodelr   convert_moduler   model_to_devicer   _setup_modelstatefnr   FITTINGsetup_optimizerssetup_precision_pluginr
   
optimizersroot_device)r#   r1   shared_paramsr'   r'   r(   r7   [   s    

zSingleDeviceXLAStrategy.setupstrategy_registryc                 C   s   |j d| | jd d S )N
single_xla)description)register__name__)clsrD   r'   r'   r(   register_strategiesr   s   z+SingleDeviceXLAStrategy.register_strategiesc                    s   t    tjdd  d S )Nr4   )r    teardownr5   r6   pop)r#   r%   r'   r(   rK   w   s   
z SingleDeviceXLAStrategy.teardown)NNNF)r1   r2   r)   N)r)   N)rH   
__module____qualname____doc__r   r   r   r   r   r   boolr!   propertyr   r   setterr   r   r   r7   classmethodr	   rJ   rK   __classcell__r'   r'   r%   r(   r   !   sH    r   )!r5   typingr   r   r   typing_extensionsr   pytorch_lightningpl!lightning_fabric.accelerators.xlar   lightning_fabric.pluginsr   r   r   lightning_fabric.strategiesr	   $lightning_fabric.utilities.optimizerr
    lightning_fabric.utilities.typesr   $pytorch_lightning.plugins.io.wrapperr   'pytorch_lightning.plugins.precision.xlar   *pytorch_lightning.strategies.single_devicer    pytorch_lightning.trainer.statesr   pytorch_lightning.utilitiesr   r   r   r'   r'   r'   r(   <module>   s    