a
    d-                     @   s   d dl Z d dlmZmZ d dlZd dlmZ d dlm	Z	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)DictOptional)_XLA_AVAILABLE)CheckpointIOXLACheckpointIO)_WrappingCheckpointIO)PrecisionPlugin)SingleDeviceStrategy)find_shared_parametersset_shared_parametersc                       s   e Zd ZdZdZdeed ee ee e	d fddZ
eed	d
dZejee ddddZee	d	ddZddd fddZeeddddZdd	 fddZ  ZS )SingleTPUStrategyz-Strategy for training on a single TPU device.Z
single_tpuNFzpl.accelerators.Accelerator)deviceacceleratorcheckpoint_ioprecision_plugindebugc                    sF   t sttt dd lm  m} t j|||||d || _	d S )Nr   )r   r   r   r   )
r   ModuleNotFoundErrorstrZtorch_xla.core.xla_modelcoreZ	xla_modelsuper__init__Z
xla_devicer   )selfr   r   r   r   r   Zxm	__class__ p/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pytorch_lightning/strategies/single_tpu.pyr      s    zSingleTPUStrategy.__init__)returnc                 C   s0   | j d u rt | _ nt| j tr*t | j _| j S N)_checkpoint_ior   
isinstancer   r   r   r   r   r   r   3   s
    


zSingleTPUStrategy.checkpoint_io)ior   c                 C   s
   || _ d S r   )r   )r   r!   r   r   r   r   <   s    c                 C   s   dS )NFr   r    r   r   r   is_distributed@   s    z SingleTPUStrategy.is_distributedz
pl.Trainer)trainerr   c                    sP   | j sJ dt| j }|   t| j | t | | jrLtdtj	d< d S )Nz@self.model must be set before find_shared_parameters(self.model)   PT_XLA_DEBUG)
modelr
   Zmodel_to_devicer   r   setupr   r   osenviron)r   r#   Zshared_paramsr   r   r   r'   D   s    
zSingleTPUStrategy.setup)strategy_registryr   c                 C   s   |j | j| | jj d d S )N)description)registerstrategy_namer   __name__)clsr*   r   r   r   register_strategiesN   s
    z%SingleTPUStrategy.register_strategiesc                    s   t    tjdd  d S )Nr%   )r   teardownr(   r)   popr    r   r   r   r1   V   s    
zSingleTPUStrategy.teardown)NNNF)r.   
__module____qualname____doc__r-   intr   r   r   boolr   propertyr   setterr"   r'   classmethodr   r0   r1   __classcell__r   r   r   r   r      s.       
r   )r(   typingr   r   Zpytorch_lightningplZ!lightning_fabric.accelerators.tpur   Zlightning_fabric.pluginsr   r   Z$pytorch_lightning.plugins.io.wrapperr   Z#pytorch_lightning.plugins.precisionr   Z*pytorch_lightning.strategies.single_devicer	   Zpytorch_lightning.utilitiesr
   r   r   r   r   r   r   <module>   s   