o
    }oi                     @   sJ   d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	 G dd dZ
dS )    N)Nemotron3Config4BNemotronModelnemotron)Trainerc                   @   sl   e Zd Zejdddd Zdd Zdd Zd	d
 Zej	
dg ddd Zej	
dddgdd ZdS )TestNemotronclass)scopec                 C   s   t S )Nr   )self r   _/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/llm/recipes/test_nemotron.pyrecipe_module   s   zTestNemotron.recipe_modulec                 C   sP   |j dd}t|tjsJ |jtksJ t|jtjsJ |jjtks&J d S )Nnemotron3_4bversion)nemotron_model
isinstancerunConfig__fn_or_cls__r   configr   )r
   r   modelr   r   r   test_nemotron_model   s
   z TestNemotron.test_nemotron_modelc                 C   sN   |j dd}|j}|jdksJ |jdksJ |jdksJ |jdks%J d S )Nr   r       i   i      )r   r   
num_layershidden_size
seq_lengthnum_attention_heads)r
   r   r   nemotron_configr   r   r   test_model_config_parameters#   s   z)TestNemotron.test_model_config_parametersc                 C   s   |  }t|tjsJ |jtksJ |jdksJ |jdks!J |jdks(J t|j	tjs1J |j	jj
dks:J |j	jdksBJ |j	jdksJJ |j	jd u sRJ |j	jd u sZJ |j	jdksbJ |j	jdu sjJ d S )Ngpu      MegatronStrategy   F)nemotron_trainerr   r   r   r   r   acceleratordevices	num_nodesstrategy__name__tensor_model_parallel_sizepipeline_model_parallel_sizepipeline_dtype$virtual_pipeline_model_parallel_sizecontext_parallel_sizesequence_parallel)r
   r   trainer_configr   r   r   test_nemotron_trainer+   s   z"TestNemotron.test_nemotron_trainerznum_nodes,num_gpus_per_node))r#   r"   )r%      )r4   r%   c                 C   sZ   |j ||d}t|tjsJ |jtksJ |jdksJ |j|ks$J |j|ks+J d S )N)r)   num_gpus_per_noder!   )	r&   r   r   r   r   r   r'   r(   r)   )r
   r   r)   r5   r2   r   r   r   'test_trainer_with_different_gpu_configs=   s   z4TestNemotron.test_trainer_with_different_gpu_configsz_tensor_model_parallel_size,pipeline_model_parallel_size,context_parallel_size,sequence_parallel)r%   r%   r4   T)r4   r#   r%   Fc                 C   sV   |j ||||d}|jj|ksJ |jj|ksJ |jj|ks!J |jj|ks)J d S )N)tensor_parallelismpipeline_parallelismcontext_parallelismsequence_parallelism)r&   r*   r,   r-   r0   r1   )r
   r   r,   r-   r0   r1   r2   r   r   r   /test_trainer_with_different_parallelism_optionsF   s   z<TestNemotron.test_trainer_with_different_parallelism_optionsN)r+   
__module____qualname__pytestfixturer   r   r    r3   markparametrizer6   r;   r   r   r   r   r      s    


r   )nemo_runr   r>   'nemo.collections.llm.gpt.model.nemotronr   r   nemo.collections.llm.recipesr   nemo.lightningr   r   r   r   r   r   <module>   s   