Abdelrahman2922's picture
Add files using upload-large-folder tool
a4d9876 verified
Raw
History Blame Contribute Delete
3.79 kB
#!/bin/bash
# This script demonstrates how to run the full training pipeline on the Emilia dataset.
set -euo pipefail
stage=0
stop_stage=2
# ====== Modify as needed ======
# GPUs to use
GPU_IDS="0,1,2,3,4,5,6,7"
NUM_GPUS=8
# Download directory for raw Emilia data
dl_dir="download"
# Directory containing JSONL manifests for train/dev splits
# Stage 0 will check for the presence of the following files:
# data/emilia/manifests/emilia_en_train.jsonl
# data/emilia/manifests/emilia_en_dev.jsonl
# data/emilia/manifests/emilia_zh_train.jsonl
# data/emilia/manifests/emilia_zh_dev.jsonl
MANIFEST_DIR="data/emilia/manifests"
# Directory to write tokenized WebDataset shards
TOKEN_DIR="data/emilia/tokens"
# Audio tokenizer model (HuggingFace repo or local path)
TOKENIZER_PATH="eustlb/higgs-audio-v2-tokenizer"
# Training config file
TRAIN_CONFIG="config/train_config_emilia.json"
# Data config file
data_config="config/data_config_emilia.json"
# Output directory for checkpoints
OUTPUT_DIR="exp/omnivoice_emilia"
# =================================
export PYTHONPATH="$(cd "$(dirname "$0")/.." && pwd):${PYTHONPATH:-}"
# Stage 0: Download data
if [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then
echo "Stage 0: Download data"
# You should manually download the Emilia dataset from
# https://openxlab.org.cn/datasets/Amphion/Emilia
# or https://huggingface.co/datasets/amphion/Emilia-Dataset/tree/fc71e07
# and place it in the download directory.
# Your download directory should at least contain the following structure:
#
# download/Amphion___Emilia
# β”œβ”€β”€ raw
# β”‚ β”œβ”€β”€ EN
# β”‚ └── ZH
if [ ! -d "$dl_dir"/Amphion___Emilia/raw ]; then
echo "Please refer https://openxlab.org.cn/datasets/Amphion/Emilia to download the dataset."
exit 1
fi
# We require JSONL manifests for the training and dev splits. You can
# either generate them yourself using the raw data and the provided
# metadata, or download our processed JSONL manifests from HuggingFace.
# https://huggingface.co/datasets/zhu-han/Emilia-Manifests
#
# Place them as data/emilia/manifests/{emilia_en_train,emilia_en_dev,emilia_zh_train,emilia_zh_dev}.jsonl
for split in emilia_en_dev emilia_zh_dev emilia_en_train emilia_zh_train; do
if [ ! -f "${MANIFEST_DIR}/${split}.jsonl" ]; then
echo "Please download the manifest for ${split} and place it in ${MANIFEST_DIR}/${split}.jsonl"
exit 1
fi
done
echo " Done. All manifests and data are in place."
fi
# Stage 1: Tokenize splits into directories matching data_config_emilia.json
if [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then
echo "Stage 1: Tokenizing audio"
for split in emilia_en_dev emilia_zh_dev emilia_en_train emilia_zh_train; do
echo " Tokenizing ${split} from ${MANIFEST_DIR}/${split}.jsonl"
CUDA_VISIBLE_DEVICES=${GPU_IDS} \
python -m omnivoice.scripts.extract_audio_tokens \
--input_jsonl "${MANIFEST_DIR}/${split}.jsonl" \
--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. Tokens written to ${TOKEN_DIR}/${split}"
done
fi
# Stage 2: Train
if [ $stage -le 2 ] && [ $stop_stage -ge 2 ]; then
echo "Stage 2: Training"
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