o
    `۷i                     @   s(  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 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 ejd
dZG dd dejZG dd dejZdddZdddZedkrd dl Z e ! Z"e"j#dddd e"$ \Z%Z&e%j'reddd d dS eddd d dS dS )    N)load_dataset)FileLock)
functional)
DataLoader)Accuracy)
transforms)tune)TuneReportCheckpointCallbackPATH_DATASETS.c                       sL   e Zd Zefdedef fddZdd Zddd	Zd
d Z	dd Z
  ZS )MNISTDataModule
batch_sizedata_dirc                    sB   t    || _tt tddg| _|| _d| _	d| _
d S )N)g_)Ǻ?)gGr?)      r   
   )super__init__r   r   ComposeToTensor	Normalize	transformr   dimsnum_classes)selfr   r   	__class__ V/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/tune/examples/mnist_ptl_mini.pyr      s   


zMNISTDataModule.__init__c                 C   sD   t tjd td| jd W d    d S 1 sw   Y  d S )N~/.data.lockylecun/mnist	cache_dir)r   ospath
expanduserr   r   r   r   r   r   prepare_data!   s   "zMNISTDataModule.prepare_dataNc                    sN   t d jd} fddfdd|d D  _fdd|d	 D  _d S )
Nr    r!   c                    s     | d | d fS )Nimagelabel)r   )sampler&   r   r   transform_fn)      z+MNISTDataModule.setup.<locals>.transform_fnc                       g | ]} |qS r   r   .0r*   r+   r   r   
<listcomp>,       z)MNISTDataModule.setup.<locals>.<listcomp>trainc                    r-   r   r   r.   r0   r   r   r1   -   r2   test)r   r   mnist_train	mnist_val)r   stagedatasetr   )r   r+   r   setup&   s   zMNISTDataModule.setupc                 C      t | j| jdS N)r   )r   r5   r   r&   r   r   r   train_dataloader/      z MNISTDataModule.train_dataloaderc                 C   r:   r;   )r   r6   r   r&   r   r   r   val_dataloader2   r=   zMNISTDataModule.val_dataloaderN)__name__
__module____qualname__r
   intstrr   r'   r9   r<   r>   __classcell__r   r   r   r   r      s    
	r   c                       sF   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Z  Z	S )LightningMNISTClassifierNc                    s   t t|   |pt | _|d | _|d |d }}|d | _tj	
d|| _tj	
||| _tj	
|d| _tdddd	| _d S )
Nlrlayer_1layer_2r   i  r   
multiclassr   )taskr   top_k)r   rF   r   r#   getcwdr   rG   r   torchnnLinearrH   rI   layer_3r   accuracy)r   configr   rH   rI   r   r   r   r   7   s   

z!LightningMNISTClassifier.__init__c                 C   s`   |  \}}}}||d}| |}t|}| |}t|}| |}tj|dd}|S )Nr   )dim)sizeviewrH   rN   relurI   rQ   log_softmax)r   xr   channelswidthheightr   r   r   forwardE   s   




z LightningMNISTClassifier.forwardc                 C   s   t jj|  | jdS )N)rG   )rN   optimAdam
parametersrG   r&   r   r   r   configure_optimizersP   r,   z-LightningMNISTClassifier.configure_optimizersc                 C   sF   |\}}|  |}t||}| ||}| d| | d| |S )Nzptl/train_losszptl/train_accuracy)r^   Fnll_lossrR   log)r   train_batch	batch_idxrZ   ylogitslossaccr   r   r   training_stepS   s   
z&LightningMNISTClassifier.training_stepc                 C   s4   |\}}|  |}t||}| ||}||dS )N)val_lossval_accuracy)r^   rc   rd   rR   )r   	val_batchrg   rZ   rh   ri   rj   rk   r   r   r   validation_step\   s
   

z(LightningMNISTClassifier.validation_stepc                 C   sL   t dd |D  }t dd |D  }| d| | d| d S )Nc                 S      g | ]}|d  qS )rm   r   r/   rZ   r   r   r   r1   d   r2   zALightningMNISTClassifier.validation_epoch_end.<locals>.<listcomp>c                 S   rq   )rn   r   rr   r   r   r   r1   e   r2   ptl/val_lossptl/val_accuracy)rN   stackmeanre   )r   outputsavg_lossavg_accr   r   r   validation_epoch_endc   s   z-LightningMNISTClassifier.validation_epoch_endr?   )
r@   rA   rB   r   r^   rb   rl   rp   rz   rE   r   r   r   r   rF   6   s    	rF   r   c              	   C   s   t jd}t| |}tt jd t|| d d}W d    n1 s&w   Y  ddd}tj|t	
|dt|d	dd
gd}||| d S )Nz./datar   r   )r   r   rs   rt   )rj   rk   Fvalidation_end)onsave_checkpoints)
max_epochsgpusenable_progress_bar	callbacks)r#   r$   abspathrF   r   r%   r   plTrainermathceilr	   fit)rS   
num_epochsnum_gpusr   modeldmmetricstrainerr   r   r   train_mnist_tunej   s    

r   c                 C   s   t g dt g dt ddt g dd}t jt||d}t jt j|d|dd	t jd
d| dt jdd|d}|	 }t
d| j d S )N)    @      )r   r      g-C6?g?)rH   rI   rG   r   )r   r   r   )cpugpu)	resourcesrj   min)metricmodenum_samples
tune_mnist)name)tune_config
run_configparam_spacez!Best hyperparameters found were: )r   choice
loguniformwith_parametersr   Tunerwith_resources
TuneConfig	RunConfigr   printget_best_resultrS   )r   r   gpus_per_trialrS   	trainabletunerresultsr   r   r   r   ~   s,   
r   __main__z--smoke-test
store_truezFinish quickly for testing)actionhelpr   )r   r   r   )r   r   )r   r   r   )(r   r#   pytorch_lightningr   rN   datasetsr   filelockr   torch.nnr   rc   torch.utils.datar   torchmetricsr   torchvisionr   rayr   &ray.tune.integration.pytorch_lightningr	   environgetr
   LightningDataModuler   LightningModulerF   r   r   r@   argparseArgumentParserparseradd_argumentparse_known_argsargs_
smoke_testr   r   r   r   <module>   s8    #
4
