Skip to content

Commit

Permalink
Merge branch 'espnet:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
ftshijt committed Jun 6, 2023
2 parents 1c59ebe + a631428 commit 7f43e50
Show file tree
Hide file tree
Showing 37 changed files with 854 additions and 6 deletions.
2 changes: 1 addition & 1 deletion egs2/TEMPLATE/asr1/db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ MAGICDATA=downloads
MEDIASPEECH=downloads
MINI_LIBRISPEECH=downloads
MISP2021=
MSUPERB=/ocean/projects/cis210027p/shared/corpora/MultilingualSUPERB
MLSUPERB=
L3DAS22=
LIBRIMIX=downloads
LIBRITTS=
Expand Down
110 changes: 110 additions & 0 deletions egs2/TEMPLATE/sv1/cmd.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# ====== About run.pl, queue.pl, slurm.pl, and ssh.pl ======
# Usage: <cmd>.pl [options] JOB=1:<nj> <log> <command...>
# e.g.
# run.pl --mem 4G JOB=1:10 echo.JOB.log echo JOB
#
# Options:
# --time <time>: Limit the maximum time to execute.
# --mem <mem>: Limit the maximum memory usage.
# -–max-jobs-run <njob>: Limit the number parallel jobs. This is ignored for non-array jobs.
# --num-threads <ngpu>: Specify the number of CPU core.
# --gpu <ngpu>: Specify the number of GPU devices.
# --config: Change the configuration file from default.
#
# "JOB=1:10" is used for "array jobs" and it can control the number of parallel jobs.
# The left string of "=", i.e. "JOB", is replaced by <N>(Nth job) in the command and the log file name,
# e.g. "echo JOB" is changed to "echo 3" for the 3rd job and "echo 8" for 8th job respectively.
# Note that the number must start with a positive number, so you can't use "JOB=0:10" for example.
#
# run.pl, queue.pl, slurm.pl, and ssh.pl have unified interface, not depending on its backend.
# These options are mapping to specific options for each backend and
# it is configured by "conf/queue.conf" and "conf/slurm.conf" by default.
# If jobs failed, your configuration might be wrong for your environment.
#
#
# The official documentation for run.pl, queue.pl, slurm.pl, and ssh.pl:
# "Parallelization in Kaldi": http://kaldi-asr.org/doc/queue.html
# =========================================================~


# Select the backend used by run.sh from "local", "stdout", "sge", "slurm", or "ssh"
cmd_backend='local'

# Local machine, without any Job scheduling system
if [ "${cmd_backend}" = local ]; then

# The other usage
export train_cmd="run.pl"
# Used for "*_train.py": "--gpu" is appended optionally by run.sh
export cuda_cmd="run.pl"
# Used for "*_recog.py"
export decode_cmd="run.pl"

# Local machine logging to stdout and log file, without any Job scheduling system
elif [ "${cmd_backend}" = stdout ]; then

# The other usage
export train_cmd="stdout.pl"
# Used for "*_train.py": "--gpu" is appended optionally by run.sh
export cuda_cmd="stdout.pl"
# Used for "*_recog.py"
export decode_cmd="stdout.pl"


# "qsub" (Sun Grid Engine, or derivation of it)
elif [ "${cmd_backend}" = sge ]; then
# The default setting is written in conf/queue.conf.
# You must change "-q g.q" for the "queue" for your environment.
# To know the "queue" names, type "qhost -q"
# Note that to use "--gpu *", you have to setup "complex_value" for the system scheduler.

export train_cmd="queue.pl"
export cuda_cmd="queue.pl"
export decode_cmd="queue.pl"


# "qsub" (Torque/PBS.)
elif [ "${cmd_backend}" = pbs ]; then
# The default setting is written in conf/pbs.conf.

export train_cmd="pbs.pl"
export cuda_cmd="pbs.pl"
export decode_cmd="pbs.pl"


# "sbatch" (Slurm)
elif [ "${cmd_backend}" = slurm ]; then
# The default setting is written in conf/slurm.conf.
# You must change "-p cpu" and "-p gpu" for the "partition" for your environment.
# To know the "partion" names, type "sinfo".
# You can use "--gpu * " by default for slurm and it is interpreted as "--gres gpu:*"
# The devices are allocated exclusively using "${CUDA_VISIBLE_DEVICES}".

export train_cmd="slurm.pl"
export cuda_cmd="slurm.pl"
export decode_cmd="slurm.pl"

elif [ "${cmd_backend}" = ssh ]; then
# You have to create ".queue/machines" to specify the host to execute jobs.
# e.g. .queue/machines
# host1
# host2
# host3
# Assuming you can login them without any password, i.e. You have to set ssh keys.

export train_cmd="ssh.pl"
export cuda_cmd="ssh.pl"
export decode_cmd="ssh.pl"

# This is an example of specifying several unique options in the JHU CLSP cluster setup.
# Users can modify/add their own command options according to their cluster environments.
elif [ "${cmd_backend}" = jhu ]; then

export train_cmd="queue.pl --mem 2G"
export cuda_cmd="queue-freegpu.pl --mem 2G --gpu 1 --config conf/queue.conf"
export decode_cmd="queue.pl --mem 4G"

else
echo "$0: Error: Unknown cmd_backend=${cmd_backend}" 1>&2
return 1
fi
11 changes: 11 additions & 0 deletions egs2/TEMPLATE/sv1/conf/pbs.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Default configuration
command qsub -V -v PATH -S /bin/bash
option name=* -N $0
option mem=* -l mem=$0
option mem=0 # Do not add anything to qsub_opts
option num_threads=* -l ncpus=$0
option num_threads=1 # Do not add anything to qsub_opts
option num_nodes=* -l nodes=$0:ppn=1
default gpu=0
option gpu=0
option gpu=* -l ngpus=$0
12 changes: 12 additions & 0 deletions egs2/TEMPLATE/sv1/conf/queue.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Default configuration
command qsub -v PATH -cwd -S /bin/bash -j y -l arch=*64*
option name=* -N $0
option mem=* -l mem_free=$0,ram_free=$0
option mem=0 # Do not add anything to qsub_opts
option num_threads=* -pe smp $0
option num_threads=1 # Do not add anything to qsub_opts
option max_jobs_run=* -tc $0
option num_nodes=* -pe mpi $0 # You must set this PE as allocation_rule=1
default gpu=0
option gpu=0
option gpu=* -l gpu=$0 -q g.q
14 changes: 14 additions & 0 deletions egs2/TEMPLATE/sv1/conf/slurm.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Default configuration
command sbatch --export=PATH
option name=* --job-name $0
option time=* --time $0
option mem=* --mem-per-cpu $0
option mem=0
option num_threads=* --cpus-per-task $0
option num_threads=1 --cpus-per-task 1
option num_nodes=* --nodes $0
default gpu=0
option gpu=0 -p cpu
option gpu=* -p gpu --gres=gpu:$0 -c $0 # Recommend allocating more CPU than, or equal to the number of GPU
# note: the --max-jobs-run option is supported as a special case
# by slurm.pl and you don't have to handle it in the config file.
7 changes: 7 additions & 0 deletions egs2/TEMPLATE/sv1/db.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Set the path of your corpus
# "downloads" means the corpus can be downloaded by the recipe automatically

VOXCELEB1=
VOXCELEB2=
MUSAN=
RIR=
Empty file added egs2/TEMPLATE/sv1/local/path.sh
Empty file.
23 changes: 23 additions & 0 deletions egs2/TEMPLATE/sv1/path.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
MAIN_ROOT=$PWD/../../..

export PATH=$PWD/utils/:$PATH
export LC_ALL=C

if [ -f "${MAIN_ROOT}"/tools/activate_python.sh ]; then
. "${MAIN_ROOT}"/tools/activate_python.sh
else
echo "[INFO] "${MAIN_ROOT}"/tools/activate_python.sh is not present"
fi
. "${MAIN_ROOT}"/tools/extra_path.sh

export OMP_NUM_THREADS=1

# NOTE(kan-bayashi): Use UTF-8 in Python to avoid UnicodeDecodeError when LC_ALL=C
export PYTHONIOENCODING=UTF-8

# You need to change or unset NCCL_SOCKET_IFNAME according to your network environment
# https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/docs/env.html#nccl-socket-ifname
export NCCL_SOCKET_IFNAME="^lo,docker,virbr,vmnet,vboxnet"

# NOTE(kamo): Source at the last to overwrite the setting
. local/path.sh
1 change: 1 addition & 0 deletions egs2/TEMPLATE/sv1/pyscripts
1 change: 1 addition & 0 deletions egs2/TEMPLATE/sv1/scripts/utils/print_args.sh
59 changes: 59 additions & 0 deletions egs2/TEMPLATE/sv1/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/bin/bash
# Set bash to 'debug' mode, it will exit on :
# -e 'error', -u 'undefined variable', -o ... 'error in pipeline', -x 'print commands',
set -e
set -u
set -o pipefail

log() {
local fname=${BASH_SOURCE[1]##*/}
echo -e "$(date '+%Y-%m-%dT%H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*"
}
help_message=$(cat << EOF
Usage: $0 <target-dir>
EOF
)


if [ $# -ne 1 ]; then
log "${help_message}"
log "Error: 1 positional argument is required."
exit 2
fi


dir=$1
mkdir -p "${dir}"

if [ ! -d "${dir}"/../../TEMPLATE ]; then
log "Error: ${dir}/../../TEMPLATE should exist. You may specify wrong directory."
exit 1
fi

targets=""

# Copy
for f in cmd.sh conf local; do
target="${dir}"/../../TEMPLATE/sv1/"${f}"
cp -r "${target}" "${dir}"
targets+="${dir}/${target} "
done


# Symlinks to TEMPLATE/sv1
for f in sv.sh path.sh scripts pyscripts; do
target=../../TEMPLATE/sv1/"${f}"
ln -sf "${target}" "${dir}"
targets+="${dir}/${target} "
done


# Symlinks to TEMPLATE/sv1
for f in db.sh utils steps; do
target=../../TEMPLATE/sv1/"${f}"
ln -sf "${target}" "${dir}"
targets+="${dir}/${target} "
done


log "Created: ${targets}"
1 change: 1 addition & 0 deletions egs2/TEMPLATE/sv1/steps
71 changes: 71 additions & 0 deletions egs2/TEMPLATE/sv1/sv.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/usr/bin/env bash

# Set bash to 'debug' mode, it will exit on :
# -e 'error', -u 'undefined variable', -o ... 'error in pipeline', -x 'print commands',
set -e
set -u
set -o pipefail

log() {
local fname=${BASH_SOURCE[1]##*/}
echo -e "$(date '+%Y-%m-%dT%H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*"
}

# General configuration
stage=1 # Processes starts from the specified stage.
stop_stage=10000 # Processes is stopped at the specified stage.
skip_stages= # Spicify the stage to be skipped
skip_data_prep=false # Skip data preparation stages.
skip_train=false # Skip training stages.
skip_eval=false # Skip decoding and evaluation stages.
skip_upload=true # Skip packing and uploading to zenodo
skip_upload_hf=true # Skip uploading to hugging face stages.
eval_valid_set=false # Run decoding for the validation set
n_gpu=1 # The number of gpus ("0" uses cpu, otherwise use gpu).
num_nodes=1 # The number of nodes.
nj=32 # The number of parallel jobs.
inference_nj=32 # The number of parallel jobs in decoding.
gpu_inference=false # Whether to perform gpu decoding.
dumpdir=dump # Directory to dump features.
expdir=exp # Directory to save experiments.

run_args=$(scripts/utils/print_args.sh $0 "$@")

local_data_opts=
n_train_frame=
n_eval_frame=

. utils/parse_options.sh

if [ $# -ne 0 ]; then
log "${help_message}"
log "Error: No positional arguments are required."
exit 2
fi

. ./path.sh
. ./cmd.sh


if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ] && ! [[ " ${skip_stages} " =~ [[:space:]]1[[:space:]] ]]; then
log "Stage 1: Data preparation for train and evaluation."
# [Task dependent] Need to create data.sh for new corpus
local/data.sh ${local_data_opts}
log "Stage 1 FIN."
fi

if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
echo "Stage 2: Train."
${python} -m espnet2.bin.launch \
--cmd ${cuda_cmd} --name ${jobname} \
--log ${sv_exp}/train.log \
--ngpu ${ngpu} \
--num_nodes ${num_nodes} \
--init_file_prefix ${sv_exp}/.dist_init_ \
--multiprocessing_distributed true -- \
${python} -m espnet2.bin.spk_train \
--use_preprocessor true \
--resume true \
--output_dir ${sv_exp} \
${_opts} ${sv_args}
fi
1 change: 1 addition & 0 deletions egs2/TEMPLATE/sv1/utils/parse_options.sh
4 changes: 2 additions & 2 deletions egs2/ml_superb/asr1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ Dataset are extracted from various multilingual sources. All sources are with ei

### Data download/setup

[Pending]
[Download link](https://drive.google.com/file/d/1zslKQwadZaYWXAmfBCvlos9BVQ9k6PHT/view?usp=sharing)

After download the dataset, please set the `MLSUPERB` to the data directory. The preparation will be automatically done in scripts for each tasks.

### Self-supervised model setup

ML-SUPERB utilizes [S3PRL]() to support different self-supervised model, supporting both the current popular self-supervised models and customized models from users.
ML-SUPERB utilizes [S3PRL](https://github.com/s3prl/s3prl) to support different self-supervised model, supporting both the current popular self-supervised models and customized models from users.

#### Existng self-supervised model

Expand Down
2 changes: 1 addition & 1 deletion egs2/ml_superb/asr1/local/data.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ log "data preparation started"

if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
log "stage1: Download data to ${MLSUPERB}"
log "Not released yet"
log "Please use the download link in readme and set the MLSUPERB as its unzipped path."
fi

if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
Expand Down

0 comments on commit 7f43e50

Please sign in to comment.