o
    }oi                     @   s^   d dl Zd dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZ G dd dZdS )    N)finetunepretrain)Gemma3VLConfig27BGemma3VLModelLoRAgemma3vl_27b)Trainerc                   @   sj   e Zd Zejdddd Zdd Zdd Zd	d
 Zdd Z	ej
dddgdd Zdd Zdd ZdS )TestGemma3VL27Bclass)scopec                 C   s   t S Nr   )self r   c/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/vlm/recipes/test_gemma3vl_27b.pyrecipe_module   s   zTestGemma3VL27B.recipe_modulec                 C   sL   |  }t|tjsJ |jtksJ t|jtjsJ |jjtks$J d S r   )model
isinstancerunConfig__fn_or_cls__r   configr   )r   r   model_configr   r   r   
test_model   s
   zTestGemma3VL27B.test_modelc                 C   sP  |  }t|tjsJ |jtksJ t|jtjsJ |jjtks$J t|j	tjs-J |j	jt
ks5J |j	jdks=J |j	jdksEJ |j	jdksMJ |j	j}t|tjsYJ |jdks`J |jdksgJ |jdu snJ t|jtjswJ |jjjdksJ |jjdksJ |jjdksJ |jjdksJ |jd usJ |jd usJ d S )Ngpu      TGemma3VLMockDataModule   )pretrain_reciper   r   Partialr   r   r   r   r   trainerr	   accelerator	num_nodesdevicesstrategytensor_model_parallel_sizepipeline_model_parallel_sizesequence_paralleldata__name__
seq_lengthglobal_batch_sizemicro_batch_sizelogresumer   r   recipestratr   r   r   test_pretrain_recipe_default'   s,   z,TestGemma3VL27B.test_pretrain_recipe_defaultc                 C   sn  |  }t|tjsJ |jtksJ t|jtjsJ |jjtks$J t|j	tjs-J |j	jt
ks5J |j	jdks=J |j	jdksEJ |j	jdksMJ |j	j}t|tjsYJ |jdks`J |jdksgJ |jdksnJ |jdu suJ t|jtjs~J |jjjdksJ |jjdksJ |jjdksJ |jjdksJ |jjd	ksJ |jd usJ |jd usJ d S )
Nr   r   r   r   Tr   r          )finetune_reciper   r   r    r   r   r   r   r   r!   r	   r"   r#   r$   r%   r&   r'   $encoder_pipeline_model_parallel_sizer(   r)   r*   r+   r,   r-   num_workersr.   r/   r0   r   r   r   test_finetune_recipe_defaultM   s0   z,TestGemma3VL27B.test_finetune_recipe_defaultc                 C   sd   |j dd}t|dsJ t|jtjsJ |jjtksJ |jj	j
dks'J |jjjdks0J d S )Nlora)peft_schemepeftg-C6?r5   )r6   hasattrr   r<   r   r   r   r   optimr   lrr!   r%   r&   r   r   r1   r   r   r   test_finetune_recipe_peft_lorav   s   z.TestGemma3VL27B.test_finetune_recipe_peft_loraznum_nodes,num_gpus)r   r   )   r5   c                 C   s2   |j ||d}|jj|ksJ |jj|ksJ d S )Nr#   num_gpus_per_node)r6   r!   r#   r$   )r   r   r#   num_gpusr1   r   r   r   -test_finetune_recipe_different_configurations   s   z=TestGemma3VL27B.test_finetune_recipe_different_configurationsc                 C   s:   |j dd}|jj}t|dksJ |jjjdu sJ d S )NT)performance_moder   F)r   r!   	callbackslenpluginsgrad_reduce_in_fp32)r   r   r1   rH   r   r   r   'test_pretrain_performance_optimizations   s   z7TestGemma3VL27B.test_pretrain_performance_optimizationsc                 C   s2   |j ddd}|jjdksJ |jjdksJ d S )NrB   r5   rC   )r   r!   r#   r$   r@   r   r   r   -test_pretrain_recipe_different_configurations   s   z=TestGemma3VL27B.test_pretrain_recipe_different_configurationsN)r*   
__module____qualname__pytestfixturer   r   r3   r9   rA   markparametrizerF   rL   rM   r   r   r   r   r
      s    


&)
r
   )nemo_runr   rP   nemo.collections.llm.apir   r   nemo.collections.vlmr   r   r   nemo.collections.vlm.recipesr   nemo.lightningr	   r
   r   r   r   r   <module>   s   