o
    Ti)'                     @   s0   d dl Z d dlmZ ddlT G dd deZdS )    N)logger   )*c                       sf   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dddZ
dd Zdd Z  ZS )CurriculumSchedulerc                    sx  t    i | _t|v sJ dt dt|v s J dt dt|v s,J dt d|t | jt< |t | jt< |t | jt< |t | jt< d| _|t tkr	 t	|t
 v s`J dt	 dt|t
 v snJ dt dt|t
 t dkszJ t|t
 t	 dksJ t|t
 t	 t|t
 t d ksJ |t
 | jt
< d S |t tkr	 t|t
 v sJ dt dt|t
 v sJ dt dt|t
 v sJ dt d|t
 t d dkrtd	 |t
 | jt
< d S |t tkr+	 t|t
 v sJ d
t dt|t
 v sJ d
t d|t
 t d dkr"td	 |t
 | jt
< d S |t tkr8	 d | _d S td)Nz)Curriculum learning requires the config ''TzOCurriculum learning with fixed_discrete schedule requires the schedule_config 'r   r   zKCurriculum learning with fixed_root schedule requires the schedule_config '   zWhen using seqlen metric, the difficulty_step for curriculum learning has to be multiple of 8 (for FP16 data) or 16 (for INT8 data) to enable NVIDIA Tensor Core acceleration. Disregard this warning if this is unrelated to your metric/hardware.zMCurriculum learning with fixed_linear schedule requires the schedule_config '$Unsupported curriculum schedule type)super__init__state"CURRICULUM_LEARNING_MIN_DIFFICULTY"CURRICULUM_LEARNING_MAX_DIFFICULTY!CURRICULUM_LEARNING_SCHEDULE_TYPE&CURRICULUM_LEARNING_CURRENT_DIFFICULTY
first_step+CURRICULUM_LEARNING_SCHEDULE_FIXED_DISCRETE'CURRICULUM_LEARNING_SCHEDULE_DIFFICULTY#CURRICULUM_LEARNING_SCHEDULE_CONFIG%CURRICULUM_LEARNING_SCHEDULE_MAX_STEPlen'CURRICULUM_LEARNING_SCHEDULE_FIXED_ROOT'CURRICULUM_LEARNING_SCHEDULE_TOTAL_STEP,CURRICULUM_LEARNING_SCHEDULE_DIFFICULTY_STEP(CURRICULUM_LEARNING_SCHEDULE_ROOT_DEGREEr   warning)CURRICULUM_LEARNING_SCHEDULE_FIXED_LINEAR#CURRICULUM_LEARNING_SCHEDULE_CUSTOMcustom_get_difficultyRuntimeError)selfconfig	__class__ h/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/runtime/data_pipeline/curriculum_scheduler.pyr
      s   
















zCurriculumScheduler.__init__c                 C   s
   | j t S Nr   r   r   r#   r#   r$   get_current_difficultyk      
z*CurriculumScheduler.get_current_difficultyc                 C   s   || j t< d S r%   r&   )r   
difficultyr#   r#   r$   set_current_difficultyn   s   z*CurriculumScheduler.set_current_difficultyc                 C   
   || _ d S r%   )r   )r   schedule_functionr#   r#   r$   set_custom_get_difficultyq   r)   z-CurriculumScheduler.set_custom_get_difficultyc                 C   s   | j S r%   r   r'   r#   r#   r$   	get_statet   s   zCurriculumScheduler.get_statec                 C   r,   r%   r/   )r   r   r#   r#   r$   	set_statew   r)   zCurriculumScheduler.set_statec                 C   s`   | j t }||t d kr|t d S tt|t D ]}||t | kr-|t |   S qd S )N)r   r   r   r   ranger   )r   global_stepss_stateir#   r#   r$   __fixed_discrete_get_difficultyz   s   
z3CurriculumScheduler.__fixed_discrete_get_difficultyNc                 C   s~   | j t }|d u r|t }t||t  d|  }t|| j t | j t   | j t  }|||t	  8 }t
|| j t }|S )Ng      ?)r   r   r   floatr   mathfloorr   r   r   min)r   r4   root_degreer5   next_difficultyr#   r#   r$   __fixed_root_get_difficulty   s   
z/CurriculumScheduler.__fixed_root_get_difficultyc                 C   sj   | j t tkr| |S | j t tkr| |dS | j t tkr%| |S | j t tkr1| |S t	d)Nr   r   )
r   r   r   3_CurriculumScheduler__fixed_discrete_get_difficultyr   /_CurriculumScheduler__fixed_root_get_difficultyr   r   r   r   r   r4   r#   r#   r$   get_difficulty   s   


z"CurriculumScheduler.get_difficultyc                 C   s.   | j t | j t k r| || j t< | j t S r%   )r   r   r   rB   rA   r#   r#   r$   update_difficulty   s   
z%CurriculumScheduler.update_difficultyr%   )__name__
__module____qualname__r
   r(   r+   r.   r0   r1   r?   r@   rB   rC   __classcell__r#   r#   r!   r$   r      s    ^
r   )r9   deepspeed.utilsr   	constantsobjectr   r#   r#   r#   r$   <module>   s   