o
    h                     @   sp   d dl mZmZ d dlmZ ddlmZmZmZm	Z	 ddl
mZ e r'd dlZeeZeG dd	 d	eZdS )
    )	dataclassfield)Tuple   )cached_propertyis_tf_availableloggingrequires_backends   )BenchmarkArgumentsNc                       s  e Zd ZU g dZ fddZedddidZeed< ed	dd
idZ	e
ed< edddidZeed< edddidZeed< eded fddZeded fddZedefddZed#ddZedd Zede
fdd Zedefd!d"Z  ZS )$TensorFlowBenchmarkArguments)no_inferenceno_cudano_tpuno_speed	no_memoryno_env_printno_multi_processc                    s   | j D ]&}||v r)|dd }|| ||< t| d| d| d||   q|d| j| _|d| j| _|d| j| _|d	| j| _t j	d
i | dS )z
        This __init__ is there for legacy code. When removing deprecated args completely, the class can simply be
        deleted
           Nz! is depreciated. Please use --no-z or =tpu_name
device_idx
eager_modeuse_xla )
deprecated_argspoploggerwarningr   r   r   r   super__init__)selfkwargsdeprecated_argpositive_arg	__class__r   ^/var/www/html/ai/venv/lib/python3.10/site-packages/transformers/benchmark/benchmark_args_tf.pyr    +   s"   
z%TensorFlowBenchmarkArguments.__init__NhelpzName of TPU)defaultmetadatar   r   z&CPU / GPU device index. Defaults to 0.r   Fz Benchmark models in eager model.r   z]Benchmark models using XLA JIT compilation. Note that `eager_model` has to be set to `False`.r   return1tf.distribute.cluster_resolver.TPUClusterResolverc                 C   sb   t | dg d }| jr/z| jrtjj| j}W |S tjj }W |S  ty.   d }Y |S w |S Ntf)r	   tpur   r.   
distributecluster_resolverTPUClusterResolver
ValueError)r!   r/   r   r   r'   
_setup_tpuN   s   z'TensorFlowBenchmarkArguments._setup_tpu)tf.distribute.Strategyr,   c                 C   s   t | dg | jr!tj| j tjj| j tj	
| j}|S | jr<tj| j| j d tj	jd| j d}|S tjg d tj	jd| j d}|S )Nr.   GPUz/gpu:)devicez/cpu:)r	   is_tpur.   configexperimental_connect_to_clusterr4   r/   experimentalinitialize_tpu_systemr0   TPUStrategyis_gpuset_visible_devicesgpu_listr   OneDeviceStrategy)r!   strategyr   r   r'   _setup_strategy\   s   z,TensorFlowBenchmarkArguments._setup_strategyc                 C   s   t | dg | jd uS r-   )r	   r4   r!   r   r   r'   r8   p   s   
z#TensorFlowBenchmarkArguments.is_tpur5   c                 C   s   t | dg | jS r-   )r	   rC   rD   r   r   r'   rB   u   s   z%TensorFlowBenchmarkArguments.strategyc                 C   s   t | dg tjdS )Nr.   r6   )r	   r.   r9   list_physical_devicesrD   r   r   r'   r@   z   s   z%TensorFlowBenchmarkArguments.gpu_listc                 C   s    t | dg | jrt| jS dS )Nr.   r   )r	   cudalenr@   rD   r   r   r'   n_gpu   s   
z"TensorFlowBenchmarkArguments.n_gpuc                 C   s
   | j dkS )Nr   )rH   rD   r   r   r'   r>      s   
z#TensorFlowBenchmarkArguments.is_gpu)r+   r5   )__name__
__module____qualname__r   r    r   r   str__annotations__r   intr   boolr   r   r   r4   rC   propertyr8   rB   r@   rH   r>   __classcell__r   r   r%   r'   r      s>   
 

r   )dataclassesr   r   typingr   utilsr   r   r   r	   benchmark_args_utilsr   
tensorflowr.   
get_loggerrI   r   r   r   r   r   r'   <module>   s   
