a
    þdQ
  ã                   @   sV   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ e  	e
¡ZG dd„ deƒZdS )é    N)ÚAny)Ú_XLA_AVAILABLEÚTPUAccelerator)ÚClusterEnvironmentc                       sÊ   e Zd ZdZeeddœ‡ fdd„Zeedœdd„ƒZee	dœd	d
„ƒZ
eedœdd„ƒZeedœdd„ƒZedœdd„Zeddœdd„Zedœdd„Zeddœdd„Zedœdd„Zedœdd„Z‡  ZS )ÚXLAEnvironmenta  Cluster environment for training on a TPU Pod with the `PyTorch/XLA <https://pytorch.org/xla>`_ library.

    A list of environment variables set by XLA can be found
    `here <https://github.com/pytorch/xla/blob/master/torch_xla/core/xla_env_vars.py>`_.
    N)ÚargsÚkwargsÚreturnc                    s&   t sttt ƒƒ‚tƒ j|i |¤Ž d S ©N)r   ÚModuleNotFoundErrorÚstrÚsuperÚ__init__)Úselfr   r   ©Ú	__class__© úr/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lightning_fabric/plugins/environments/xla.pyr      s    zXLAEnvironment.__init__)r	   c                 C   s   dS )NFr   )r   r   r   r   Úcreates_processes_externally$   s    z+XLAEnvironment.creates_processes_externallyc                 C   s   dd l m  m} tj|j S ©Nr   )Útorch_xla.core.xla_env_varsÚcoreÚxla_env_varsÚosÚenvironZTPU_MESH_CTLER_ADDR©r   Zxenvr   r   r   Úmain_address(   s    zXLAEnvironment.main_addressc                 C   s"   dd l m  m} ttj|j ƒS r   )r   r   r   Úintr   r   ZTPU_MESH_CTLER_PORTr   r   r   r   Ú	main_port.   s    zXLAEnvironment.main_portc                   C   s   t  ¡ S r
   )r   Zis_availabler   r   r   r   Údetect4   s    zXLAEnvironment.detectc                 C   s   dd l m  m} | ¡ S r   )Útorch_xla.core.xla_modelr   Ú	xla_modelZxrt_world_size©r   Zxmr   r   r   Ú
world_size8   s    zXLAEnvironment.world_size)Úsizer	   c                 C   s   t  d¡ d S )NzYXLAEnvironment.set_world_size was called, but setting world size is not allowed. Ignored.©ÚlogÚdebug)r   r$   r   r   r   Úset_world_size=   s    zXLAEnvironment.set_world_sizec                 C   s   dd l m  m} | ¡ S r   )r    r   r!   Zget_ordinalr"   r   r   r   Úglobal_rank@   s    zXLAEnvironment.global_rank)Úrankr	   c                 C   s   t  d¡ d S )Nz[XLAEnvironment.set_global_rank was called, but setting global rank is not allowed. Ignored.r%   )r   r*   r   r   r   Úset_global_rankE   s    zXLAEnvironment.set_global_rankc                 C   s   dd l m  m} | ¡ S r   )r    r   r!   Zget_local_ordinalr"   r   r   r   Ú
local_rankH   s    zXLAEnvironment.local_rankc                 C   s&   dd l m  m} ttj |jd¡ƒS r   )r   r   r   r   r   r   ÚgetZHOST_ORDINALr   r   r   r   Ú	node_rankM   s    zXLAEnvironment.node_rank)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚpropertyÚboolr   r   r   r   r   Ústaticmethodr   r#   r(   r)   r+   r,   r.   Ú__classcell__r   r   r   r   r      s    r   )Úloggingr   Útypingr   Z!lightning_fabric.accelerators.tpur   r   Z9lightning_fabric.plugins.environments.cluster_environmentr   Ú	getLoggerr/   r&   r   r   r   r   r   Ú<module>   s   
