RWKV-TTS / run_multiple_process.sh
kevinwang676's picture
Add files using upload-large-folder tool
fd82c69 verified
export PYTHONPATH=/home/yueyulin/github/CosyVoice:/home/yueyulin/github/CosyVoice/third_party/Matcha-TTS/:/home/yueyulin/github/RWKVTTS
# 设置默认参数
LANGUAGE="zh"
OUTPUT_DIR="/home/yueyulin/data/speech_corpus"
COSY_MODEL_DIR="/home/yueyulin/models/CosyVoice2-0.5B/"
PROMPTS_DIR="extract_data/prompts/zh"
DEVICE="cuda:0"
PARQUET_FILES=()
JSONL_FILES=()
FILE_TYPE="" # 用于标记文件类型
is_cross_lingual=""
is_instructed=""
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
--language)
LANGUAGE="$2"
shift 2
;;
--output_dir)
OUTPUT_DIR="$2"
shift 2
;;
--cosy_model_dir)
COSY_MODEL_DIR="$2"
shift 2
;;
--prompts_dir)
PROMPTS_DIR="$2"
shift 2
;;
--parquet_files)
# 接收多个parquet文件路径
shift
while [[ $# -gt 0 && ! $1 =~ ^-- ]]; do
PARQUET_FILES+=("$1")
shift
done
FILE_TYPE="parquet"
;;
--jsonl_files)
# 接收多个jsonl文件路径
shift
while [[ $# -gt 0 && ! $1 =~ ^-- ]]; do
JSONL_FILES+=("$1")
shift
done
FILE_TYPE="jsonl"
;;
--device)
DEVICE="$2"
shift 2
;;
--cross_lingual)
is_cross_lingual="--is_cross_lingual"
shift
;;
--instructed)
is_instructed="--is_instructed"
shift
;;
*)
echo "未知参数: $1"
exit 1
;;
esac
done
# 检查是否提供了文件
if [ "$FILE_TYPE" == "parquet" ]; then
if [ ${#PARQUET_FILES[@]} -eq 0 ]; then
echo "错误: 未指定parquet文件,请使用 --parquet_files 参数"
exit 1
fi
FILES=("${PARQUET_FILES[@]}")
FILE_ARG="--parquet_files"
echo "将处理 ${#FILES[@]} 个parquet文件"
elif [ "$FILE_TYPE" == "jsonl" ]; then
if [ ${#JSONL_FILES[@]} -eq 0 ]; then
echo "错误: 未指定jsonl文件,请使用 --jsonl_files 参数"
exit 1
fi
FILES=("${JSONL_FILES[@]}")
FILE_ARG="--jsonl_files"
echo "将处理 ${#FILES[@]} 个jsonl文件"
else
echo "错误: 请使用 --parquet_files 或 --jsonl_files 参数指定输入文件"
exit 1
fi
echo "运行参数:"
echo "语言: $LANGUAGE"
echo "输出目录: $OUTPUT_DIR"
echo "模型目录: $COSY_MODEL_DIR"
echo "提示词目录: $PROMPTS_DIR"
echo "设备: $DEVICE"
echo "文件类型: $FILE_TYPE"
# 确保输出目录存在
mkdir -p $OUTPUT_DIR
# 启动处理进程,每个文件一个进程
for ((i=0; i<${#FILES[@]}; i++)); do
FILE="${FILES[$i]}"
FILENAME=$(basename "$FILE")
echo "处理文件 $FILENAME 使用 $DEVICE"
# 在后台启动进程
nohup python data/utils/utilitie.py \
--task generate_speech_tokens \
--language $LANGUAGE \
$is_cross_lingual \
$FILE_ARG "$FILE" \
--output_dir $OUTPUT_DIR \
--cosy_model_dir $COSY_MODEL_DIR \
--prompts_dir $PROMPTS_DIR \
$is_instructed \
--device "$DEVICE" > "$OUTPUT_DIR/log_${FILENAME%.*}.log" 2>&1 &
# 记录进程ID
PID=$!
echo "启动进程 PID: $PID 处理文件: $FILENAME 使用 $DEVICE"
# 等待一点时间确保进程启动
sleep 5
done
echo "所有处理进程已启动,日志文件保存在 $OUTPUT_DIR 目录"
echo "使用 'ps aux | grep utilitie.py' 命令查看运行状态"
echo "使用 'nvidia-smi' 命令监控GPU使用情况"
# 等待所有后台进程完成
wait
echo "所有处理已完成"