o
    ci$                  
   @   sL  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ dd Zdejfd	d
Zedkre  Zejdddd e \ZZedddd g dddZG dd dejZe Zejeej dedej!ddddej"edddd d!e#d"de#d"ddd#Z$e$% Z&ee& dS dS )$    N)tune)
Checkpoint)ConvNetget_data_loaders	test_func)PopulationBasedTrainingc                 C   s   d}t  \}}t }tj| | dd| ddd}t rStd t }|	 }t
j|d}t|}	||	d	  |	d
 }W d    n1 sNw   Y  	 tjjj||| t||}
d }	|d dkrt
jddd t|| dd td}	|d7 }tjd|
i|	d qT)Nr   lrg{Gz?momentum?r   r	   zLoading from checkpoint.checkpoint.ptmodelstepT   my_model)exist_ok)r   r   zmy_model/checkpoint.pt   mean_accuracy)
checkpoint)r   r   optimSGD
parametersgetr   get_checkpointprintas_directoryospathjointorchloadload_state_dictrayexamplesmnist_pytorch
train_funcr   makedirssave
state_dictr   from_directoryreport)configr   train_loadertest_loaderr   	optimizerloaded_checkpointloaded_checkpoint_dirr   r   acc r2   b/home/ubuntu/.local/lib/python3.10/site-packages/ray/tune/examples/pbt_convnet_function_example.pytrain_convnet   sB   







r4   resultsc                 C   sv   |   j *}t }ttj|d}|	|d  t
|t d }td| W d   dS 1 s4w   Y  dS )z0Test the best model given output of tuner.fit().r   r   r   zbest model accuracy: N)get_best_resultr   r   r   r   r    r   r   r   r!   r   r   r   )r5   best_checkpoint_path
best_modelbest_checkpointtest_accr2   r2   r3   eval_best_modelE   s   "r;   __main__z--smoke-test
store_truezFinish quickly for testing)actionhelptraining_iterationr   c                   C   s   t jddS )Ng-C6?r   )nprandomuniformr2   r2   r2   r3   <lambda>`   s    rD   )g?r
   gGz?r   )	time_attrperturbation_intervalhyperparam_mutationsc                   @   s$   e Zd Zdd Zdd Zdd ZdS )CustomStopperc                 C   s
   d| _ d S )NFshould_stopselfr2   r2   r3   __init__j   s   
zCustomStopper.__init__c                 C   s8   t jrdnd}| js|d dkrd| _| jp|d |kS )Nr   d   r   gQ?Tr@   )args
smoke_testrJ   )rL   trial_idresultmax_iterr2   r2   r3   __call__m   s   zCustomStopper.__call__c                 C   s   | j S )NrI   rK   r2   r2   r3   stop_alls   s   zCustomStopper.stop_allN)__name__
__module____qualname__rM   rT   rU   r2   r2   r2   r3   rH   i   s    rH   pbt_testr   r      )checkpoint_score_attributenum_to_keep)namestopverbosecheckpoint_configmaxT)	schedulermetricmodenum_samplesreuse_actorsgMbP?)
run_configtune_configparam_space)'argparser   numpyrA   r   torch.optimr   r"   r   ray.tuner   ray.tune.examples.mnist_pytorchr   r   r   ray.tune.schedulersr   r4   
ResultGridr;   rV   ArgumentParserparseradd_argumentparse_known_argsrO   _rb   StopperrH   stopperTuner	RunConfigCheckpointConfig
TuneConfigrC   tunerfitr5   r2   r2   r2   r3   <module>   sh   0	

