o
    }oiH                     @   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)Gemma3VLConfig4BGemma3VLModelLoRAgemma3vl_4b)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 )TestGemma3VL4Bclass)scopec                 C   s   t S Nr   )self r   b/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/vlm/recipes/test_gemma3vl_4b.pyrecipe_module   s   zTestGemma3VL4B.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TestGemma3VL4B.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+TestGemma3VL4B.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   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/   r0   r1   r   r   r   test_finetune_recipe_defaultM   s0   z+TestGemma3VL4B.test_finetune_recipe_defaultc                 C   sR   |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 d S )Nlora)peft_schemepeftg-C6?)r7   hasattrr   r=   r   r   r   r   optimr   lrr   r   r2   r   r   r   test_finetune_recipe_peft_lorav   s
   z-TestGemma3VL4B.test_finetune_recipe_peft_loraznum_nodes,num_gpus)r   r   )r   r6   c                 C   s2   |j ||d}|jj|ksJ |jj|ksJ d S )Nr$   num_gpus_per_node)r7   r"   r$   r%   )r   r   r$   num_gpusr2   r   r   r   -test_finetune_recipe_different_configurations   s   z<TestGemma3VL4B.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   r2   rH   r   r   r   'test_pretrain_performance_optimizations   s   z6TestGemma3VL4B.test_pretrain_performance_optimizationsc                 C   s2   |j ddd}|jjdksJ |jjdksJ d S )Nr   r6   rC   )r    r"   r$   r%   rA   r   r   r   -test_pretrain_recipe_different_configurations   s   z<TestGemma3VL4B.test_pretrain_recipe_different_configurationsN)r+   
__module____qualname__pytestfixturer   r   r4   r:   rB   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   