modelscope_common_infer.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env bash
  2. set -e
  3. set -u
  4. set -o pipefail
  5. model_name=speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch # pre-trained model, download from modelscope
  6. data_dir= # wav list, ${data_dir}/wav.scp
  7. exp_dir="exp"
  8. gpuid_list="0,1"
  9. ngpu=$(echo $gpuid_list | awk -F "," '{print NF}')
  10. njob=4
  11. gpu_inference=true
  12. decode_cmd=utils/run.pl
  13. . utils/parse_options.sh
  14. if ${gpu_inference}; then
  15. inference_nj=$[${ngpu}*${njob}]
  16. _ngpu=1
  17. else
  18. inference_nj=${njob}
  19. _ngpu=0
  20. fi
  21. # LM configs
  22. use_lm=false
  23. beam_size=1
  24. lm_weight=0.0
  25. python modelscope_utils/download_model.py \
  26. --model_name ${model_name}
  27. if [ -d ${exp_dir} ]; then
  28. echo "${exp_dir} is already exists. if you want to decode again, please delete ${exp_dir} first."
  29. exit 1
  30. else
  31. mkdir -p ${exp_dir}/${model_name}
  32. cp ${HOME}/.cache/modelscope/hub/damo/${model_name}/* ${exp_dir}/${model_name}/. -r
  33. _dir=${exp_dir}/decode_asr
  34. _logdir=${_dir}/logdir
  35. mkdir -p "${_dir}"
  36. mkdir -p "${_logdir}"
  37. fi
  38. for n in $(seq "${inference_nj}"); do
  39. split_scps+=" ${_logdir}/keys.${n}.scp"
  40. done
  41. # shellcheck disable=SC2086
  42. utils/split_scp.pl "${data_dir}/wav.scp" ${split_scps}
  43. if "${use_lm}"; then
  44. cp ${exp_dir}/${model_name}/decode_asr_transformer.yaml ${exp_dir}/${model_name}/decode_asr_transformer.yaml.back
  45. cp ${exp_dir}/${model_name}/decode_asr_transformer_wav.yaml ${exp_dir}/${model_name}/decode_asr_transformer_wav.yaml.back
  46. sed -i "s#beam_size: [0-9]*#beam_size: `echo $beam_size`#g" ${exp_dir}/${model_name}/decode_asr_transformer.yaml
  47. sed -i "s#beam_size: [0-9]*#beam_size: `echo $beam_size`#g" ${exp_dir}/${model_name}/decode_asr_transformer_wav.yaml
  48. sed -i "s#lm_weight: 0.[0-9]*#lm_weight: `echo $lm_weight`#g" ${exp_dir}/${model_name}/decode_asr_transformer.yaml
  49. sed -i "s#lm_weight: 0.[0-9]*#lm_weight: `echo $lm_weight`#g" ${exp_dir}/${model_name}/decode_asr_transformer_wav.yaml
  50. fi
  51. echo "Decoding started... log: '${_logdir}/asr_inference.*.log'"
  52. # shellcheck disable=SC2086
  53. ${decode_cmd} --max-jobs-run "${inference_nj}" JOB=1:"${inference_nj}" "${_logdir}"/asr_inference.JOB.log \
  54. python -m funasr.bin.modelscope_infer \
  55. --local_model_path ${exp_dir}/${model_name} \
  56. --wav_list ${_logdir}/keys.JOB.scp \
  57. --output_file ${_logdir}/text.JOB \
  58. --gpuid_list ${gpuid_list} \
  59. --njob ${njob} \
  60. --ngpu ${_ngpu} \
  61. for i in $(seq ${inference_nj}); do
  62. cat ${_logdir}/text.${i}
  63. done | sort -k1 >${_dir}/text
  64. mv ${exp_dir}/${model_name}/decode_asr_transformer.yaml.back ${exp_dir}/${model_name}/decode_asr_transformer.yaml
  65. mv ${exp_dir}/${model_name}/decode_asr_transformer_wav.yaml.back ${exp_dir}/${model_name}/decode_asr_transformer_wav.yaml