Paraformer-large存储空间不足?临时文件清理自动化脚本
1. 背景与问题分析
在使用Paraformer-large 语音识别离线版(带 Gradio 可视化界面)进行长音频转写时,用户常面临一个实际工程挑战:磁盘空间逐渐耗尽。该模型基于 FunASR 框架,在处理大体积音频文件(如数小时录音)时,会自动生成大量中间缓存文件,包括:
- 音频切片临时文件
- VAD(语音活动检测)分段数据
- 解码过程中的特征缓存
- PyTorch 模型加载的临时副本
这些文件通常存储于系统默认缓存路径(如~/.cache、/tmp或项目目录下),若不及时清理,极易导致“No space left on device”错误,尤其在云服务器或容器环境中资源受限的情况下更为突出。
本文将提供一套自动化脚本方案,帮助用户实现Paraformer-large 运行环境下的临时文件智能清理机制,保障服务长期稳定运行。
2. 临时文件来源与定位
2.1 主要缓存路径分析
根据 FunASR 和 PyTorch 的默认行为,以下目录是主要的临时文件生成位置:
| 路径 | 来源组件 | 文件类型 |
|---|---|---|
~/.cache/torch/hub/ | PyTorch Hub | 模型权重缓存 |
~/.cache/modelscope/ | ModelScope SDK | Paraformer-large 模型文件 |
/tmp/或/var/tmp/ | 系统级临时目录 | 音频解码中间文件 |
当前工作目录下的./output/,./temp/等 | 用户代码逻辑 | 自定义输出片段 |
2.2 实际占用情况验证
可通过以下命令快速查看各目录占用大小:
# 查看 .cache 目录总占用 du -sh ~/.cache/* # 查看 tmp 目录大文件 find /tmp -type f -size +100M -exec ls -lh {} \;示例输出:
1.8G /home/user/.cache/modelscope 450M /home/user/.cache/torch 2.3G /tmp/funasr_temp_XXXXXX可见,单次长音频处理可能产生超过 2GB 的临时数据,必须建立定期清理机制。
3. 自动化清理脚本设计与实现
3.1 清理策略设计原则
为避免误删正在使用的文件,需遵循以下原则:
- ✅仅删除非活跃文件:通过
atime(访问时间)判断是否近期被使用 - ✅保留核心模型缓存:防止每次重启都重新下载模型
- ✅可配置化路径与阈值:适配不同部署环境
- ✅支持定时任务集成:便于加入
cron
3.2 核心清理脚本(Bash)
#!/bin/bash # clean_funasr_temp.sh # Paraformer-large 专用临时文件清理脚本 # 使用方式: bash clean_funasr_temp.sh [days] DAYS=${1:-7} # 默认清理超过7天未访问的文件 LOG_FILE="/var/log/funasr_clean.log" echo "[$(date)] 开始执行 Paraformer-large 临时文件清理 (阈值: ${DAYS} 天)" >> $LOG_FILE # 1. 清理 modelscope 缓存中旧的音频处理结果(排除模型本身) find ~/.cache/modelscope -name "*.wav" -o -name "*.pcm" | while read file; do if [ $(find "$file" -atime +$DAYS | wc -l) -gt 0 ]; then rm -f "$file" echo "已删除: $file" >> $LOG_FILE fi done # 2. 清理 /tmp 中以 funasr 或 temp 开头的旧目录 find /tmp -maxdepth 1 -type d \( -name "funasr_*" -o -name "temp_*" \) -atime +$DAYS | while read dir; do rm -rf "$dir" echo "已删除目录: $dir" >> $LOG_FILE done # 3. 清理当前工作空间中的 output/temp 文件夹(假设脚本位于 /root/workspace) WORKSPACE="/root/workspace" if [ -d "$WORKSPACE/output" ]; then find "$WORKSPACE/output" -type f -atime +$DAYS -delete echo "已清理 $WORKSPACE/output 中旧文件" >> $LOG_FILE fi if [ -d "$WORKSPACE/temp" ]; then find "$WORKSPACE/temp" -type f -atime +$DAYS -delete echo "已清理 $WORKSPACE/temp 中旧文件" >> $LOG_FILE fi # 4. 可选:压缩日志文件轮转 if [ -f "$LOG_FILE" ] && [ $(stat -c%s "$LOG_FILE") -gt 10485760 ] ; then gzip -c "$LOG_FILE" > "$LOG_FILE.$(date +%Y%m%d).gz" && > "$LOG_FILE" echo "日志已轮转" >> $LOG_FILE fi echo "[$(date)] 清理完成" >> $LOG_FILE3.3 脚本使用说明
- 将脚本保存为
/root/clean_funasr_temp.sh - 添加可执行权限:
chmod +x /root/clean_funasr_temp.sh- 手动测试运行(先试删):
# 查看将要删除的文件(不实际删除) find ~/.cache/modelscope -name "*.wav" -atime +7 # 正式执行(清理超过7天的) bash /root/clean_funasr_temp.sh 74. 定时任务集成(Cron)
为实现自动化,建议将脚本加入系统定时任务。
4.1 编辑 crontab
crontab -e4.2 添加每日凌晨清理任务
# 每天凌晨 2:00 执行清理,保留最近7天文件 0 2 * * * /bin/bash /root/clean_funasr_temp.sh 7 >> /var/log/funasr_cron.log 2>&1注意:确保
/var/log/funasr_cron.log可写,或修改日志路径至用户有权限的目录。
4.3 验证 cron 是否生效
# 查看 cron 日志(Ubuntu/Debian) grep CRON /var/log/syslog | tail -n 10 # 或查看自定义日志 tail -f /var/log/funasr_cron.log预期输出:
[Mon Jan 6 02:00:01 CST 2025] 开始执行 Paraformer-large 临时文件清理...5. 优化建议与最佳实践
5.1 避免影响在线服务的清理策略
由于 Paraformer-large 在处理长音频时可能持续读取中间文件,建议:
- 错峰清理:设置清理时间为业务低谷期(如凌晨)
- 增加安全缓冲:将
atime阈值设为至少两倍最长处理时间 - 监控磁盘使用率:结合
df -h告警机制
5.2 修改 FunASR 默认缓存路径(可选)
可通过环境变量控制缓存位置,便于集中管理:
export MODELSCOPE_CACHE=/mnt/data/modelscope_cache export TORCH_HOME=/mnt/data/torch_home然后在启动app.py前加载:
source /opt/miniconda3/bin/activate torch25 export MODELSCOPE_CACHE=/mnt/data/modelscope_cache cd /root/workspace && python app.py5.3 日志与告警增强(进阶)
可扩展脚本添加邮件或钉钉通知功能。例如发送磁盘使用摘要:
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}') if [[ "$DISK_USAGE" =~ ^([89][0-9]|100)% ]]; then echo "⚠️ 磁盘使用率过高: $DISK_USAGE" | mail -s "Paraformer 存储告警" admin@example.com fi6. 总结
本文针对Paraformer-large 语音识别离线版在实际应用中常见的“存储空间不足”问题,提出了一套完整的解决方案:
- 分析了临时文件的主要来源路径
- 设计并实现了安全、可配置的 Bash 清理脚本
- 提供了
cron定时任务集成方法 - 给出了生产环境下的优化建议和避坑指南
通过部署该自动化清理机制,可有效避免因磁盘满载导致的服务中断,提升系统的稳定性与运维效率,特别适用于需要长期运行语音转写服务的场景。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。