o
    "jE                     @   s   d dl Z d dlZd dlZ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 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 G dd dZdS )    N)ProcessMesh)OperatorDistAttrTensorDistAttr)DistributedOperator)DistributedTensor   )
get_logger   )	Completer)get_default_distributed_context)ParallelTuner)RuleBasedTuner)is_naive_data_parallelc                   @   s(   e Zd Zdd Zedd Zdd ZdS )Plannerc                 C   s   || _ || _d| _t }|j| j_|j| j_t| js#| jjdd n| jjdd t	| j| _
|j| _| jjdkrEt| j| j d| _d S | jjdkrVt| j| j d| _d S d S )NFT)Z
with_graphZfull_random)modeZfull_rule_based)_mode_dist_context_loadr   Zdist_op_contextZ_dist_op_contextZdata_parallelr   Z
initializer
   
_completerZstrategy	_strategy	auto_moder   _parallel_tunerr   )selfr   dist_contextZdefault_ctx r   s/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/auto_parallel/static/planner_v2.py__init__)   s(   


zPlanner.__init__c                 C   s   | j S )N)r   )r   r   r   r   	completerG   s   zPlanner.completerc              
   C   s  t tj}d }| jjrz| jjd }W n   d }Y |r4tj|r4zt|d}t	
|}W d    n1 s:w   Y  |d }|d }|d }|d }|jd jd j}	|jd jd j}
t|j}t|d}| jjjd jd j}| jjjd jd j}t| jjj}t| jjd}||	ks||
ks||ks||kr|d	||||||	 d
}nd}W n   d
}Y |r4|D ]}| jj| j}t|j|_|j||  t|| jj|< q|D ]}| jj| j}t|j|_|j||  t|| jj|< qg }|d D ]}|d }|d }|t t!"|#|$  q
|| j_%d| _&|d|  | j&sJ| j'j(dkrE| j)*  n| j+,  t-dddkrWt./  | jj01| jj2 d S )NZtuner_load_pathrbZtensoropprocess_meshesclusterr   ZGPUzThe cluster {} nodes {} {} devices is different from the saved last cluster {} nodes {} {} devices, so we run the planner again.FTr	   z+The parallel strategy has been loaded from semiZPADDLE_AUTO_PARALLEL_STAGErun)3r   loggingINFOr   Z_json_configospathexistsopenpickleloadZmachinesZdevicesmodelZmemorylenZget_all_devicesr!   infoformatZ_dist_ops_for_program	serial_opr   descZ	dist_attrZparse_from_stringr   Z_dist_tensors_for_programserial_tensorr   r   appendr   nparrayZreshapetolistr    r   r   r   r   Ztuner   Zcomplete_forward_annotationgetenvsysexitZblock_stateZparse_forward_blocksZserial_main_program)r   loggerr'   fZ
dist_attrsZtensor_dist_attrsZop_dist_attrsr    r!   Zlast_gpu_modelZlast_gpu_memoryZlast_node_countZlast_device_countZ	gpu_modelZ
gpu_memoryZ
node_countZdevice_countZneed_set_dist_attrkeyr0   r2   itemZprocess_idsshaper   r   r   planK   s   



zPlanner.planN)__name__
__module____qualname__r   propertyr   r?   r   r   r   r   r   (   s
    
r   )r$   r&   r*   r8   numpyr4   Z-paddle.distributed.auto_parallel.process_meshr   Z6paddle.distributed.auto_parallel.static.dist_attributer   r   Z/paddle.distributed.auto_parallel.static.dist_opr   Z3paddle.distributed.auto_parallel.static.dist_tensorr   Zutils.log_utilsr   
completionr
   r   r   Ztuner.parallel_tunerr   Ztuner.rule_based_tunerr   utilsr   r   r   r   r   r   <module>   s    