Abdelrahman2922's picture
Add files using upload-large-folder tool
a4d9876 verified
Raw
History Blame Contribute Delete
2.63 kB
#!/bin/bash
# This script demonstrates how to fine-tune OmniVoice from a JSONL manifest.
set -euo pipefail
stage=0
stop_stage=1
# ====== Modify as needed ======
# GPUs to use
GPU_IDS="0,1"
NUM_GPUS=2
# Path to your input JSONL file
# (each line: {"id": ..., "audio_path": ..., "text": ..., "language_id": ...})
TRAIN_JSONL="/home/riftuser/OmniVoice/sync_data/data/train_raw.jsonl"
# Path to your dev JSONL file. Set to empty string to skip dev set.
DEV_JSONL="/home/riftuser/OmniVoice/sync_data/data/dev_raw.jsonl"
# Directory to write tokenized WebDataset shards
TOKEN_DIR="/home/riftuser/OmniVoice/sync_data/tokens"
# Audio tokenizer model (HuggingFace repo or local path)
TOKENIZER_PATH="eustlb/higgs-audio-v2-tokenizer"
# Training config file
# If you encounter issues with flex_attention on your GPU, use the SDPA config instead:
# TRAIN_CONFIG="config/train_config_finetune_sdpa.json"
TRAIN_CONFIG="/home/riftuser/OmniVoice/sync_data/configs/config.json"
# Data config file
data_config="/home/riftuser/OmniVoice/sync_data/configs/data_saudi.json"
# Output directory for fine-tuned checkpoints
OUTPUT_DIR="/home/riftuser/OmniVoice/exp_v1/omnivoice_finetune"
# =================================
export PYTHONPATH="$(cd "$(dirname "$0")/.." && pwd):${PYTHONPATH:-}"
# Stage 0: Tokenize audio into WebDataset shards
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
# Stage 1: Fine-tune
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