o
    پi                     @   s
  d dl Z d dlZd dlZd dlm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mZ dd Zd	d
 Zdd Zdd Zdd Zdeee	jf defddZdefddZedkr	 eddZejdedd ejdedd ejded d! ee  dS dS )"    N)ArgumentParser)Path)Dict)snapshot_download)	load_file	save_filec              	      s  t t j}t  j}td|d| |jddd dD ]}td| d| d|  qt||d	 fd
d t||d fdd}t	t
|dD ]6}||| }t|}t||t|d t|dkr}tdt| d|  t|| qOtd| d qOd S )Nz
dir_input=z dir_output=T)parentsexist_ok)zgeneration_config.jsonz*.pyz
tokenizer*zcp -rf / zconfig.jsonc                    
   t  | S N)_transform_configdataargs Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/debug_utils/model_truncator.py<lambda>      
 zmain.<locals>.<lambda>zmodel.safetensors.index.jsonc                    r   r   )_transform_safetensors_indexr   r   r   r   r   #   r   z*.safetensors)
debug_namer   zSave z tensors to zSkip saving z since it is empty)r   _maybe_snapshot_downloadinputoutputprintmkdirossystem_transform_jsonsortedlistglobrelative_tor   _transform_safetensors_filestrlenr   )r   	dir_input
dir_outputpatternsafetensors_indexpath_input_safetensorspath_output_safetensors
state_dictr   r   r   main   s>   



r/   c                 C   s   t |  r| S t| S r   )r   existsr   )pathr   r   r   r   6   s   r   c                 C   s6   t | |  }|| || t j|dd |S )N   )indent)jsonloads	read_text
write_textdumps)r(   r)   filenamefnr   r   r   r   r    <   s   r    c                 C   s   | j |d< d S )Nnum_hidden_layers)keep_num_layers)r   config_jsonr   r   r   r   C   s   r   c                    s*   |d } fdd|  D }||d< d S )N
weight_mapc                    s    i | ]\}}t  |r||qS r   )_filter_tensor_name).0namelocr   r   r   
<dictcomp>I   s
    z0_transform_safetensors_index.<locals>.<dictcomp>)items)r   r+   r>   r   r   r   r   G   s
   
r   r.   r   c                 C   s@   t | t |d  }tdt| d|  |D ]}| |= qd S )Nr>   zRemove z in )setr   r"   )r.   r+   r   names_to_removerA   r   r   r   r%   O   s
   r%   tensor_namec                 C   s0   t d|}|d u rdS t|d}|| jk S )Nz^model.layers.(\d+).*T   )rematchintgroupr<   )r   rG   mlayer_idr   r   r   r?   X   s
   
r?   __main__z*Create truncated model for fast debugging.)descriptionz--inputT)typerequiredz--outputz--keep-num-layers   )rQ   default)r4   r   rI   argparser   pathlibr   typingr   torchhuggingface_hubr   safetensors.torchr   r   r/   r   r    r   r   r&   Tensorr%   r?   __name__parseradd_argumentrK   
parse_argsr   r   r   r   <module>   s8   (
	

	