o
    `۷i                  	   @   s&  d dl Z d dlZd dlZd dlmZ d dlmZ dZejdkr%e	d  nd dl
mZ d dlmZ d dlmZmZmZ G d	d
 d
eZG dd dejZedkre  Zejdddd e \ZZejeejdddejdejrsdndiddde g didZ!e!" Z#e$de#% j& dS dS )    N)FileLock)tune
   )      )Model)	load_data)Conv2DDenseFlattenc                       s&   e Zd Zd fdd	Zdd Z  ZS )MyModel   c                    sF   t t|   tdddd| _t | _t|dd| _tddd| _	d S )N    r   relu)
activationr   softmax)
superr   __init__r	   conv1r   flattenr
   d1d2)selfhiddens	__class__ X/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/tune/examples/tf_mnist_example.pyr       s
   zMyModel.__init__c                 C   s(   |  |}| |}| |}| |S N)r   r   r   r   )r   xr   r   r   call'   s   



zMyModel.call)r   )__name__
__module____qualname__r   r    __classcell__r   r   r   r   r      s    r   c                   @   s2   e Zd Zdd ZdefddZdd Zdd	 Zd
S )MNISTTrainablec                    sp  dd l ttjd t \\}}\}}W d    n1 s w   Y  |d |d }}|djf }|djf }jj	||f _
 j
d|dd _
jj	||fd _t|dd	d
 _jj  _jj  _jjjdd _jjjdd _jjjdd _jjjdd _j fdd}j fdd}| _ | _!d S )Nr   z~/.tune.lockg     o@.i'  batchr   r   r   )r   
train_loss)nametrain_accuracy	test_losstest_accuracyc                    s~     } | } ||}W d    n1 sw   Y  || jj} jt| jj  |  	|| d S r   )
GradientTapemodelloss_objectgradienttrainable_variables	optimizerapply_gradientszipr'   r)   )imageslabelstapepredictionsloss	gradientsr   tfr   r   
train_stepM   s   


z(MNISTTrainable.setup.<locals>.train_stepc                    s0     | } ||} |  || d S r   )r-   r.   r*   r+   )r4   r5   r7   t_loss)r   r   r   	test_stepZ   s   

z'MNISTTrainable.setup.<locals>.test_step)"
tensorflowr   ospath
expanduserr   newaxisdataDatasetfrom_tensor_slicestrain_dsshuffler&   gettest_dsr   r-   keraslossesSparseCategoricalCrossentropyr.   
optimizersAdamr1   metricsMeanr'   SparseCategoricalAccuracyr)   r*   r+   functiontf_train_steptf_test_step)r   configx_trainy_trainx_testy_testr<   r>   r   r:   r   setup/   s6   
zMNISTTrainable.setupcheckpoint_dirc                 C      d S r   r   )r   r\   r   r   r   save_checkpointe      zMNISTTrainable.save_checkpointc                 C   r]   r   r   )r   
checkpointr   r   r   load_checkpointh   r_   zMNISTTrainable.load_checkpointc                 C   s   | j   | j  | j  | j  t| jD ]\}\}}|tkr% n| || q| j	D ]
\}}| 
|| q/| j| j   | j  d | j  | j  d dS )Nd   )epochr8   accuracyr*   mean_accuracy)r'   reset_statesr)   r*   r+   	enumeraterG   MAX_TRAIN_BATCHrT   rJ   rU   	iterationresultnumpy)r   idxr4   r5   test_imagestest_labelsr   r   r   stepk   s    



zMNISTTrainable.stepN)r!   r"   r#   r[   strr^   ra   ro   r   r   r   r   r%   .   s
    6r%   __main__z--smoke-test
store_truezFinish quickly for testing)actionhelpr*   min)metricmodetraining_iteration   2      )stopverboser   )r   @   r   )tune_config
run_configparam_spacez!Best hyperparameters found were: )'argparser@   sysfilelockr   rayr   rh   version_infoexittensorflow.kerasr   tensorflow.keras.datasets.mnistr   tensorflow.keras.layersr	   r
   r   r   	Trainabler%   r!   ArgumentParserparseradd_argumentparse_known_argsargs_Tuner
TuneConfig	RunConfig
smoke_testgrid_searchtunerfitresultsprintget_best_resultrV   r   r   r   r   <module>   sD   
U