a
    þd.  ã                   @   sì   d Z ddlZddlZddlZddlmZ ddlZddlZddlm	Z	m
Z
 ddlmZ e ¡  e e¡ZdZg d¢g d¢d	œZd
d„ Zdd„ Ze ¡ ddd„ƒZedkrèe ¡ Zejddedd ejddedd e ¡ Zeejejƒ dS )zConvert Jukebox checkpointsé    N)ÚPath)ÚJukeboxConfigÚJukeboxModel)Úloggingz2https://openaipublic.azureedge.net/jukebox/models/)ú5b/vqvae.pth.tarú5b/prior_level_0.pth.tarú5b/prior_level_1.pth.tarz1b_lyrics/prior_level_2.pth.tar)r   r   r   z5b_lyrics/prior_level_2.pth.tar)zjukebox-1b-lyricsújukebox-5b-lyricsc                 C   sÜ  |   d¡r*t|  d¡ƒdkr*|  dd¡} n||   d¡rTt|  d¡ƒdkrT|  dd¡} nR|   d¡r~t|  d¡ƒdkr~|  dd¡} n(|   d	¡r¦t|  d¡ƒdkr¦|  d	d
¡} d| v rº|  dd¡} d| v rÎ|  dd¡} d| v rúd| vrúd| vrúd| vrú|  dd¡} |   d¡r|  dd¡S d| v r(|  dd¡S d| v r>|  dd¡} d| v rT|  dd¡S d| v rj|  dd¡S d | v r€|  d d!¡S d"| v r–|  d"d#¡S d$| v r¬|  d$d%¡S d&| v rÂ|  d'd(¡S d)| v rØ|  d)d¡S | S )*Nz.model.1.biasÚ.é
   z.conv1d_1.biasz.model.1.weightz.conv1d_1.weightz.model.3.biasz.conv1d_2.biasz.model.3.weightz.conv1d_2.weightzconditioner_blocks.0.zconditioner_blocks.0Zconditioner_blocksZprime_priorÚencoderz.emb.ÚtotalÚabsoluteÚrelativeÚkz.kz	.codebookzy_emb.zmetadata_embedding.z
x_emb.emb.z0.x_emb.embZembed_tokensZprime_state_lnzencoder.final_layer_normz.lnz.layer_normZ_lnZ_layer_normZprime_state_projzencoder.proj_inZprime_x_outzencoder.lm_headzprior.x_outZx_outZfc_proj_outZx_emb)ÚendswithÚlenÚsplitÚreplace)Úkey© r   út/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/transformers/models/jukebox/convert_jukebox.pyÚreplace_key2   sF     








r   c              
   C   s  i }dd l }| d¡}| d¡}| d¡}| d¡}	| d¡}
| d¡}| d¡}| d	¡}| d
¡}|  ¡ D ]¨\}}| |¡rè| |¡}| ¡ }t|d ƒd t|d ƒ }d|d › d|d › d|› d|d › }| ||¡}nŒ| |¡rŠ| |¡}| ¡ }t|d ƒd t|d ƒ }dddœ|d  }d|d › d|d › d|› d}d|d › d|› d|d › }|| }| ||¡}nê| |¡rÚ| |¡}| ¡ }d|d › d|d › d|d › }| ||¡}nš|	 |¡rP|	 |¡}| ¡ }t|d ƒd t|d ƒ d }d|d › d|d › d|› d|d › }|	 ||¡}n$|
 |¡rö|
 |¡}| ¡ }t|d ƒd t|d ƒ d }dddœ|d  }d|d › d|d › d|› d}d|d › d|› d|d › }|| }|
 ||¡}n~| |¡rF| |¡}| ¡ }d|d › d|d › d|d › }| ||¡}n.| |¡r¦| |¡}| ¡ }t|d ƒd t|d ƒ d }d|› d|d › }| ||¡}nÎ| |¡r6| |¡}| ¡ }t|d ƒd t|d ƒ d }dddœ|d  }d|› d}d|d › d|› d|d › }|| }| ||¡}n>| |¡rp| |¡}| ¡ }d|d › }| ||¡}n|}t|ƒ}|› d|› |vsš|d u r²t	d|› d|› d ƒ nV|j
||› d|›  j
kr||› d|›  }t	|› d!|› d"|j
› d#|j
› d$ƒ |}|||< |||< qn|S )%Nr   z@encoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).(bias|weight)zXencoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)z;encoders.(\d*).level_blocks.(\d*).model.(\d*).(bias|weight)z@decoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).(bias|weight)zXdecoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)z;decoders.(\d*).level_blocks.(\d*).model.(\d*).(bias|weight)z<conditioner_blocks.(\d*).cond.model.(\d*).(\d).(bias|weight)zTconditioner_blocks.(\d*).cond.model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)z7conditioner_blocks.(\d*).cond.model.(\d*).(bias|weight)é   é   z	encoders.z.level_blocks.é   z.downsample_block.r
   éÿÿÿÿ)Ú1Ú3éþÿÿÿzresnet_block.éýÿÿÿz.conv1d_z
.proj_out.z	decoders.z.upsample_block.z	.proj_in.z,conditioner_blocks.upsampler.upsample_block.z%conditioner_blocks.upsampler.proj_in.zfailed converting ú to z, does not matchz-> z
 : 
shape z and z, do not match)ÚreÚcompileÚitemsÚ	fullmatchÚmatchÚgroupsÚintÚsubr   ÚprintÚshape)Ú
state_dictZmodel_state_dictÚ
key_prefixÚmappingZnew_dictr"   Zre_encoder_block_conv_inZre_encoder_block_resnetZre_encoder_block_proj_outZre_decoder_block_conv_outZre_decoder_block_resnetZre_decoder_block_proj_inZre_prior_cond_conv_outZre_prior_cond_resnetZre_prior_cond_proj_inZoriginal_keyÚvalueZregex_matchr'   Zblock_indexZ
re_new_keyr   Z
conv_indexÚprefixZresnet_blockÚvalr   r   r   Úfix_jukebox_keys`   s²    
ÿ

ÿ

ÿ


(
 
"
 (
  
"
 
 
$
r2   c                 C   sT  t |  D ]t}tj |› d| d¡d › ¡stjt› |› dd}tj|› ddd t	|› d| d¡d › dƒ 
|j¡ qt |  d¡d  }t | ¡}t|ƒ}g }i }t|ƒD ]î\}	}
t |› d|
 d¡d › ¡d }i }| ¡ D ]~}| d¡r|| || d	d
¡< qè| d¡r0|| || dd¡< qèd|
vrZd|v rZ|| || dd¡< qè|| ||< qè|	dkrvdndd|	 › }t|| ¡ ||ƒ}| |¡ q²| d¡}|j |¡ tt|ƒƒD ]}	|j|	  |d|	  ¡ qÄt|ƒjdd t	|› ddƒ}t  !||¡ W d  ƒ n1 s(0    Y  t"d| › d|› ƒ | #|¡ |S )zD
    Copy/paste/tweak model's weights to our Jukebox structure.
    ú/r   T)Úallow_redirects)Úexist_okÚwbÚmodelz.bÚbZbiasz.wÚwZweightZlevel_2zcond.model.z.blocks.z.model.r   Úvqvaezpriors.r   r   z/mapping.jsonNzSaving model r!   )$ÚMODEL_MAPPINGÚosÚpathÚisfiler   ÚrequestsÚgetÚPREFIXÚmakedirsÚopenÚwriteÚcontentr   Zfrom_pretrainedr   Ú	enumerateÚtorchÚloadÚkeysr   r   r2   r,   ÚappendÚpopr:   Zload_state_dictÚranger   Zpriorsr   ÚmkdirÚjsonÚdumpr*   Zsave_pretrained)Ú
model_nameÚpytorch_dump_folder_pathÚfileÚrZmodel_to_convertÚconfigr7   Zweight_dictr.   ÚiZ	dict_nameZold_dicZnew_dicr   r-   Zvqvae_state_dictZtxtfiler   r   r   Úconvert_openai_checkpointÔ   sD     (
"
,
rV   Ú__main__z--model_namer	   z(Name of the model you'd like to convert.)ÚdefaultÚtypeÚhelpz--pytorch_dump_folder_pathzjukebox-5b-lyrics-convertedz+Path to the output PyTorch model directory.)NN)Ú__doc__ÚargparserN   r<   Úpathlibr   r?   rG   Ztransformersr   r   Ztransformers.utilsr   Zset_verbosity_infoZ
get_loggerÚ__name__ÚloggerrA   r;   r   r2   Zno_gradrV   ÚArgumentParserÚparserÚadd_argumentÚstrÚ
parse_argsÚargsrP   rQ   r   r   r   r   Ú<module>   sD   
ù.t2üü