o
    {i                     @   s   d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlm	Z	 ddl
mZ e dZdejd	ejfd
dZdddZddefddZ	ddeeef dB defddZdS )    N)Path)Union)convert_linears_to_fp8   )vision_transformerdinov3modelreturnc                 C   s8   |j s
td | S td dtjjj_t| |j	dS )Nz%fp8 matmuls: OFF (disabled in config)zfp8 matmuls: ONr   )filter)
Zfp8_enabledloggerinfotorch	_inductorconfigtritonZmulti_kernelr   Z
fp8_filter)r   args r   B/data/cameron/keygrip/volume_dino_tracks/dinov3/models/__init__.pyinit_fp8   s   

r   F   c                 C   s*  d| j v rtdi d|d| jd| jd| jd| jd| jd| jd	| jd
| j	d| j
d| jd| jd| jd| jd| jd| jd| jd| jd| jd|}tj| j  di |}t|| }|ro||jfS tj| j  di |d| ji}|j}ntd| j  t|| }|||fS )NZvitimg_size
patch_sizepos_embed_rope_basepos_embed_rope_min_periodpos_embed_rope_max_periodpos_embed_rope_normalize_coordspos_embed_rope_shift_coordspos_embed_rope_jitter_coordspos_embed_rope_rescale_coordsqkv_biaslayerscale_init
norm_layer	ffn_layerffn_bias	proj_biasn_storage_tokensmask_k_biasuntie_cls_and_patch_normsuntie_global_and_local_cls_normdevicedrop_path_ratezUnrecognized architecture r   )archdictr   r   r   r   r   r   r   r   r   Z
layerscaler!   r"   r#   r$   r%   r&   r'   r(   vits__dict__r   	embed_dimr*   NotImplementedError)r   only_teacherr   r)   
vit_kwargsteacherstudentr/   r   r   r   build_model"   sn   
	




r5   r1   c                 C   sX   t | j|t| jjtr| jjnt| jjdd}|r"|\}}||fS |\}}}|||fS )Nmeta)r1   r   r)   )r5   r4   
isinstanceZcropsZglobal_crops_sizeintmax)cfgr1   outputsr3   r/   r4   r   r   r   build_model_from_cfgI   s   



r<   pretrained_weightsshard_unsharded_modelc           	      C   s  t | dd\}}|d u s|dkrtd |  nLt| rOtd ddlm} ddlm	} t
d	|i}||g | d
 |jdd |||dd d}ntd ddlm} |jdd |||d |r{td t
d	|i}||g | d
 |  |S )NT)r1    zNo pretrained weightszPyTorch DCP checkpointr   )load_checkpoint)ac_compile_parallelizebackbone)Zinference_only_modelsr:   cuda)r)   )r   Zstrict_loadingFzPyTorch consolidated checkpoint)$init_model_from_checkpoint_for_evalsr3   zSharding model)r<   r   r   init_weightsr   is_dirZdinov3.checkpointerr@   Z"dinov3.fsdp.ac_compile_parallelizerA   nn
ModuleDictto_emptyrD   eval)	r   r=   r>   r   _r@   rA   Z
moduledictrD   r   r   r   build_model_for_evalZ   s.   




rL   )Fr   N)F)loggingpathlibr   typingr   r   torch.nnrG   Zdinov3.layers.fp8_linearr   r?   r   r-   	getLoggerr   Moduler   r5   boolr<   strrL   r   r   r   r   <module>   s"   

'