File size: 3,397 Bytes
fd82c69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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 "所有处理已完成"