| #!/bin/bash |
|
|
| |
|
|
| set -euo pipefail |
|
|
| stage=0 |
| stop_stage=1 |
|
|
| |
| |
| GPU_IDS="0,1" |
| NUM_GPUS=2 |
|
|
| |
| |
| TRAIN_JSONL="/home/riftuser/OmniVoice/sync_data/data/train_raw.jsonl" |
|
|
| |
| DEV_JSONL="/home/riftuser/OmniVoice/sync_data/data/dev_raw.jsonl" |
|
|
| |
| TOKEN_DIR="/home/riftuser/OmniVoice/sync_data/tokens" |
|
|
| |
| TOKENIZER_PATH="eustlb/higgs-audio-v2-tokenizer" |
|
|
| |
| |
| |
| TRAIN_CONFIG="/home/riftuser/OmniVoice/sync_data/configs/config.json" |
|
|
| |
| data_config="/home/riftuser/OmniVoice/sync_data/configs/data_saudi.json" |
|
|
| |
| OUTPUT_DIR="/home/riftuser/OmniVoice/exp_v1/omnivoice_finetune" |
| |
|
|
| export PYTHONPATH="$(cd "$(dirname "$0")/.." && pwd):${PYTHONPATH:-}" |
|
|
|
|
| |
| if [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then |
| echo "Stage 0: Tokenizing audio" |
|
|
| for split_jsonl_path in ${TRAIN_JSONL} ${DEV_JSONL}; do |
| if [ -z "${split_jsonl_path}" ]; then |
| continue |
| fi |
|
|
| if [ "${split_jsonl_path}" = "${TRAIN_JSONL}" ]; then |
| split="train" |
| else |
| split="dev" |
| fi |
|
|
| echo " Tokenizing ${split} from ${split_jsonl_path}" |
|
|
| CUDA_VISIBLE_DEVICES=${GPU_IDS} \ |
| python -m omnivoice.scripts.extract_audio_tokens \ |
| --input_jsonl "${split_jsonl_path}" \ |
| --tar_output_pattern "${TOKEN_DIR}/${split}/audios/shard-%06d.tar" \ |
| --jsonl_output_pattern "${TOKEN_DIR}/${split}/txts/shard-%06d.jsonl" \ |
| --tokenizer_path "${TOKENIZER_PATH}" \ |
| --nj_per_gpu 3 \ |
| --shuffle True |
|
|
| echo " Done. Manifest written to ${TOKEN_DIR}/${split}/data.lst" |
| done |
| fi |
|
|
|
|
| |
| if [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then |
| echo "Stage 1: Fine-tuning" |
|
|
| accelerate launch \ |
| --gpu_ids "${GPU_IDS}" \ |
| --num_processes ${NUM_GPUS} \ |
| -m omnivoice.cli.train \ |
| --train_config ${TRAIN_CONFIG} \ |
| --data_config ${data_config} \ |
| --output_dir ${OUTPUT_DIR} |
| fi |
|
|