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mZm	Z	m
Z
 d dlmZ d dlmZ dZdZd	Zd
Zd
ZdZdd Zdd ZedkrMe  dS dS )    N)files)cached_path)CFMDiTTrainerUNetT)load_dataset)get_tokenizeri]  d         vocosc                  C   s  t jdd} | jdtdg ddd | jdtd	d
d | jdtddd | jdtddd | jdtdddgdd | jdtddd | jdtddd | jdtddd | jdtd d!d | jd"td#d$d | jd%td&d'd | jd(td)d*d | jd+td,d-d | jd.d/d0d1 | jd2td d3d | jd4td5g d6d7d | jd8td d9d | jd:d/d;d1 | jd<td g d=d>d | jd?d/d@d1 |  S )ANzTrain CFM Model)descriptionz
--exp_nameF5TTS_v1_Base)r   
F5TTS_Base
E2TTS_BasezExperiment name)typedefaultchoiceshelpz--dataset_nameEmilia_ZH_ENzName of the dataset to use)r   r   r   z--learning_rategh㈵>zLearning rate for trainingz--batch_size_per_gpui  zBatch size per GPUz--batch_size_typeframesamplezBatch size typez--max_samples@   zMax sequences per batchz--grad_accumulation_steps   zGradient accumulation stepsz--max_grad_normg      ?zMax gradient norm for clippingz--epochsr
   zNumber of training epochsz--num_warmup_updatesi N  zWarmup updatesz--save_per_updatesiP  zSave checkpoint every N updatesz--keep_last_n_checkpointszJ-1 to keep all, 0 to not save intermediate, > 0 to keep last N checkpointsz--last_per_updatesi  z$Save last checkpoint every N updatesz
--finetune
store_truezUse Finetune)actionr   z
--pretrainzthe path to the checkpointz--tokenizerpinyin)r   charcustomzTokenizer typez--tokenizer_pathzGPath to custom tokenizer vocab file (only used if tokenizer = 'custom')z--log_samplesz,Log inferenced samples per ckpt save updatesz--logger)Nwandbtensorboardloggerz--bnb_optimizerz*Use 8-bit Adam optimizer from bitsandbytes)argparseArgumentParseradd_argumentstrfloatint
parse_args)parser r,   M/home/ubuntu/.local/lib/python3.10/site-packages/f5_tts/train/finetune_cli.pyr*      sd   r*   c               
   C   s  t  } ttdd| j }| jdkr6d }t}tdddddd	d
}| jr5| j	d u r2tt
d}nQ| j	}nM| jdkr^d }t}tddddddd	dd}| jr]| j	d u rZtt
d}n)| j	}n%| jdkrd }t}tdddd	ddd}| jr| j	d u rtt
d}n| j	}| jrtj|stj|dd tj|}|dsd| }tj||}tj|st|| td | j}|dkr| jstd| j}n| j}t||\}	}
td|
 tdt tttttt td}t!|d3i ||
td||	d}t"|| j#| j$fi d | j%d!| j&d"| j'd#|d$| j(d%| j)d&| j*d'| j+d(| j,d)| j-d*| jd+| jd,|d-| j.d.| j/d/| j0}t1| j||d0}|j2|d1d2 d S )4Nf5_ttsz../../ckpts/r   r            i      )dimdepthheadsff_multtext_dimconv_layersz:hf://SWivid/F5-TTS/F5TTS_v1_Base/model_1250000.safetensorsr   Fr   )r3   r4   r5   r6   r7   text_mask_paddingr8   pe_attn_headz.hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.ptr      )r3   r4   r5   r6   r9   r:   z.hf://SWivid/E2-TTS/E2TTS_Base/model_1200000.ptT)exist_okpretrained_zcopy checkpoint for finetuner    z:Custom tokenizer selected, but no tokenizer_path provided.z	
vocab : z
vocoder : )n_fft
hop_length
win_lengthn_mel_channelstarget_sample_ratemel_spec_type)text_num_embedsmel_dim)transformermel_spec_kwargsvocab_char_mapnum_warmup_updatessave_per_updateskeep_last_n_checkpointscheckpoint_pathbatch_size_per_gpubatch_size_typemax_samplesgrad_accumulation_stepsmax_grad_normr#   wandb_projectwandb_run_namewandb_resume_idlog_sampleslast_per_updatesbnb_optimizer)rG   i  )resumable_with_seedr,   )3r*   r'   r   joinpathdataset_nameexp_namer   dictfinetunepretrainr   r   ospathisdirmakedirsbasename
startswithjoinisfileshutilcopy2print	tokenizertokenizer_path
ValueErrorr	   rC   r>   r?   r@   rA   rB   r   r   epochslearning_raterI   rJ   rK   rM   rN   rO   rP   rQ   r#   rU   rV   rW   r   train)argsrL   rT   	model_cls	model_cfg	ckpt_pathfile_checkpointrj   rk   rH   
vocab_sizerG   modeltrainertrain_datasetr,   r,   r-   mainQ   s   









		

ry   __main__)r$   r_   rg   importlib.resourcesr   r   f5_tts.modelr   r   r   r   f5_tts.model.datasetr   f5_tts.model.utilsr	   rB   rA   r?   r@   r>   rC   r*   ry   __name__r,   r,   r,   r-   <module>   s(    : 
