U
    d                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm  m	  m
Z
 e  edZeej dd Zdd Zd	d
 Zedkreddg d dlZejddd dS )    N)	workspacedata_parallel_model)cnnZnet_construct_benchc                 C   s   |   }t|dkst| jjg ddgdd}| jjg ddgdd}|D ]X}| j| }| jj|g|d d	d
}| jj|||g||gddd | ||||g| qHdS )z&
    Add the momentum-SGD update.
    r   ONE   g      ?)shapevalueNEGONEg      Z	_momentumg        )r   g?)ZmomentumZnesterovN)	Z	GetParamslenAssertionErrorZparam_init_netZConstantFillZparam_to_gradnetZMomentumSGDZWeightedSum)train_modelLRparamsr   r	   paramZ
param_gradZparam_momentum r   Q/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/experiments/python/net_construct_bench.pyAddMomentumParameterUpdate+   s>          
  
r   c                 C   s   t t| j}td| tjddddd}dd }d	d
 }dd }t }t	j
|||||d t | }|j  tdt|| d S )NzRunning on gpus: {}ZNCHWZresnet50TF)ordernameZ	use_cudnnZcudnn_exhaustive_searchc                 S   s.   t j| ddddd\}}| |dgd |gS )Ndata   i  label)Znum_input_channelsZ
num_labelsr   Zaccuracy)resnetZcreate_resnet50ZAccuracy)modelZ
loss_scaleZsoftmaxZlossr   r   r   create_resnet50_model_opsZ   s    
z)Create.<locals>.create_resnet50_model_opsc                 S   sD   |  d | d}td}| jj|gddd|dd}t| | d S )Ng-C6?ITER   r   g?step)Zbase_lrpolicyZstepsizegamma)ZAddWeightDecayZIterintr   ZLearningRater   )r   r   Zstepszr   r   r   r   add_parameter_update_opsf   s    

z(Create.<locals>.add_parameter_update_opsc                 S   s   d S )Nr   )r   r   r   r   add_image_inputt   s    zCreate.<locals>.add_image_input)Zinput_builder_funZforward_pass_builder_funZparam_update_builder_funZdevicesz&Model create for {} gpus took: {} secs)listrangeZnum_gpusloginfoformatr   ZCNNModelHelpertimer   ZParallelize_GPUr   Z_CheckLookupTablesr
   )argsZgpusr   r   r"   r#   
start_timectr   r   r   CreateM   s,    
r-   c                  C   s2   t jdd} | jdtddd |  }t| d S )Nz&Caffe2: Benchmark for net construction)descriptionz
--num_gpusr   zNumber of GPUs.)typedefaulthelp)argparseArgumentParseradd_argumentr!   
parse_argsr-   )parserr*   r   r   r   main   s    
r7   __main__Zcaffe2z--caffe2_log_level=2zmain()Z
cumulative)sort)r2   loggingr)   Zcaffe2.pythonr   r   r   Zcaffe2.python.models.resnetpythonmodelsr   basicConfig	getLoggerr&   setLevelDEBUGr   r-   r7   __name__Z
GlobalInitZcProfilerunr   r   r   r   <module>   s   
";