Speech Seaco Paraformer启动失败?run.sh脚本执行问题排查
1. 问题定位:为什么/bin/bash /root/run.sh会失败?
当你在终端输入/bin/bash /root/run.sh却看到报错、无响应、或界面无法访问(如http://localhost:7860打不开),这通常不是模型本身的问题,而是环境执行链中的某个环节被卡住了。很多用户第一反应是“模型坏了”或“镜像有问题”,但实际90%以上的启动失败,都出在run.sh这个看似简单的脚本上。
我们不猜、不跳步,直接从脚本执行的真实路径开始排查:
run.sh是整个 WebUI 的“总开关”,它负责:- 检查 Python 环境和依赖是否就绪
- 启动 Gradio 服务(WebUI 核心)
- 加载 Paraformer 模型权重(约 1.2GB)
- 绑定端口
7860并监听请求
- 它不是黑盒——你完全可以在终端里逐行运行它,看清哪一步停住了。
关键提醒:不要直接双击或右键运行
run.sh;必须在终端中用bash -x方式执行,才能看到每条命令的真实输出。
2. 排查四步法:从终端输出找真相
2.1 第一步:用调试模式运行脚本,捕获完整日志
在服务器终端中执行:
cd /root bash -x ./run.sh 2>&1 | tee run_debug.logbash -x:让 shell 显示每一条执行的命令(带+前缀)2>&1:把错误信息(stderr)也重定向到标准输出| tee run_debug.log:同时打印到屏幕 + 保存到文件,方便回溯
正常流程应类似:
+ python3 -c 'import torch; print(torch.cuda.is_available())' True + python3 -m pip list | grep gradio gradio 4.41.0 + python3 webui.py --share --port 7860 Running on local URL: http://127.0.0.1:7860❌ 如果卡在某一行(比如停在+ python3 webui.py ...不再往下走),说明问题就在这里。
2.2 第二步:重点检查三个“高频断点”
2.2.1 断点一:CUDA不可用 → GPU识别失败
常见报错:
False ... OSError: libcudnn.so.8: cannot open shared object file: No such file or directory原因:
- 系统未安装 NVIDIA 驱动,或驱动版本太低(需 ≥525)
- CUDA Toolkit 未正确配置(
nvcc -V报错或显示为空) - PyTorch 安装的是 CPU 版本(
torch.cuda.is_available()返回False)
快速验证:
nvidia-smi # 应显示GPU型号和温度 nvcc -V # 应显示 CUDA 版本(如 12.1) python3 -c "import torch; print(torch.__version__, torch.cuda.is_available())"正确输出示例:2.1.0+cu121 True
❌ 若为False:
→ 先确认是否真有 GPU(lspci | grep -i nvidia)
→ 若有,重装 PyTorch 官方 CUDA 版:
pip3 uninstall torch torchvision torchaudio -y pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1212.2.2 断点二:端口被占用 → 7860 已被其他进程霸占
常见现象:
- 脚本执行到
python3 webui.py --port 7860后无响应 - 或报错:
OSError: [Errno 98] Address already in use
验证命令:
ss -tuln | grep ':7860' # 或 lsof -i :7860若有输出(如python3 12345 root ...),说明端口正被占用。
解决方法:
# 强制杀掉占用进程(谨慎使用) kill -9 12345 # 或换端口启动(临时绕过) python3 webui.py --port 7861 # 然后访问 http://localhost:7861小技巧:
run.sh中可修改--port参数,避免冲突。
2.2.3 断点三:模型加载失败 → 权重文件缺失或路径错误
常见报错:
FileNotFoundError: [Errno 2] No such file or directory: '/root/models/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch'检查路径真实性:
ls -lh /root/models/ # 正常应看到类似: # speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/ # └── model.pth # └── config.yaml # └── vocab.txt若目录不存在:
→ 检查镜像是否完整下载(部分镜像需首次运行时自动拉取模型)
→ 手动下载模型(推荐方式):
cd /root/models git clone https://www.modelscope.cn/Linly-Talker/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git注意:不要用modelscopeCLI 下载——该模型在 ModelScope 上为私有仓库,ms download会失败;必须用git clone。
3. run.sh 脚本精读:每一行都在做什么?
别把它当黑盒。下面是对/root/run.sh的逐行功能解析(基于科哥公开版本 v1.0.0):
#!/bin/bash # 第1行:声明这是 bash 脚本(必须!否则可能被 sh 解释导致语法错误) cd /root # 第3行:强制进入根目录,确保后续路径相对正确(关键!若当前路径不对,webui.py 找不到模型) source /root/venv/bin/activate # 第5行:激活 Python 虚拟环境(所有依赖都在这里,漏这步=没装包) export PYTHONPATH="/root:$PYTHONPATH" # 第7行:把项目根目录加入 Python 模块搜索路径(否则 import webui 会失败) python3 -m pip install -r requirements.txt -q # 第9行:静默安装依赖(-q 表示不输出过程)。若此处卡住,大概率是 pip 源慢或网络问题 python3 webui.py --share --port 7860 # 第11行:真正启动服务。--share 开通公网临时链接(可选),--port 指定端口最容易被忽略的陷阱:
- 如果你手动改过
webui.py路径,或把项目挪到了/home/user/下,但run.sh仍写cd /root,那必然失败。 venv目录被误删?source命令会报No such file or directory,但因-q参数被静默,你根本看不到。
自查清单(执行前快速扫一遍):
- [ ]
ls /root/run.sh存在且有执行权限(chmod +x /root/run.sh) - [ ]
ls /root/venv/bin/activate存在 - [ ]
ls /root/webui.py存在 - [ ]
ls /root/models/...模型目录存在且非空 - [ ]
nvidia-smi可见 GPU,torch.cuda.is_available()为True
4. 实战修复案例:3个真实用户问题还原
4.1 案例一:WSL2 用户启动白屏(无报错)
现象:bash -x ./run.sh最后停在python3 webui.py ...,浏览器打不开7860,但终端无任何错误。
排查发现:
WSL2 默认不支持 GUI,Gradio 的--share和本地绑定需额外配置。
解决方案:
# 改用 host 绑定(非 localhost) python3 webui.py --server-name 0.0.0.0 --port 7860 # 然后在 Windows 浏览器访问:http://localhost:7860 # 或查 WSL IP:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f14.2 案例二:国产显卡(昇腾/寒武纪)无法启动
现象:torch.cuda.is_available()返回False,但npu-smi显示昇腾卡正常。
原因:
Paraformer 当前仅适配 CUDA,不支持 CANN/NPU 生态。run.sh中硬编码了cuda设备调用。
临时绕过(仅测试用):
编辑webui.py,搜索device = "cuda",改为device = "cpu"
性能下降约 8 倍,仅用于验证流程是否通畅。
4.3 案例三:中文路径导致热词加载失败
现象:
单文件识别成功,但热词列表输入后无效果,日志中出现UnicodeDecodeError。
根源:run.sh启动时未设置语言环境,Linux 默认LANG=C,无法正确读取含中文的vocab.txt或热词字符串。
永久修复:
在run.sh顶部添加:
export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8"并确保系统已生成该 locale:
locale-gen zh_CN.UTF-85. 预防性建议:让 run.sh 更健壮
科哥的脚本已很简洁,但我们可以加几行“保险丝”,让它失败时主动告诉你哪里错了:
5.1 在 run.sh 中插入状态检查(推荐追加)
在python3 webui.py ...前插入:
# === 健康检查区 === echo "[INFO] 正在检查运行环境..." if ! command -v nvidia-smi &> /dev/null; then echo "[ERROR] NVIDIA 驱动未安装,请先安装驱动" exit 1 fi if ! python3 -c "import torch; assert torch.cuda.is_available(), 'CUDA 不可用'" &> /dev/null; then echo "[ERROR] PyTorch CUDA 支持异常,请检查 torch 安装" exit 1 fi if [ ! -d "/root/models/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" ]; then echo "[ERROR] 模型目录缺失,请运行 git clone ..." exit 1 fi echo "[OK] 环境检查通过,正在启动服务..." # === 健康检查区结束 ===这样,一旦失败,你会立刻看到明确提示,不用翻几百行日志。
5.2 替代启动方案:不用 run.sh,直启更透明
如果你只想快速验证模型能否跑通,跳过所有封装:
cd /root source venv/bin/activate cd /root/models/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch python3 -c " from modelscope.pipelines import pipeline asr = pipeline('speech_paraformer_asr', model='damo/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-pytorch') result = asr('https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/ASR/test_audio/asr_example_zh.wav') print(' 本地模型调用成功:', result['text'][:20]) "输出本地模型调用成功: 今天天气不错啊→ 证明模型、CUDA、权重全部就绪
❌ 报错 → 错误精准定位到模型加载层,与 WebUI 无关
6. 总结:启动失败,从来不是玄学
run.sh启动失败,本质是环境、路径、权限、依赖四个维度中至少一个没对齐。它不像训练任务那样涉及复杂超参,而是一个确定性的工程执行流。
记住这三句话,下次遇到问题就能秒定位:
- “卡在哪,就看 bash -x 输出的最后一行”
- “报错说找不到,先 ls 看看文件真在不在”
- “CUDA 不可用,先 nvidia-smi,再 nvcc -V,最后 torch.cuda”
你不需要成为 Linux 专家,只需要养成「看输出、查路径、验依赖」的习惯。每一次成功的启动,都是对系统理解的一次加固。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。