|-原 用子进程隔离 large-v3:原理:子进程结束 → OS 回收该进程占用的所有显存(包括 CTranslate2 的 cudaMalloc)→ 主进程完全不受影响。
用子进程隔离 large-v3:原理:子进程结束 → OS 回收该进程占用的所有显存(包括 CTranslate2 的 cudaMalloc)→ 主进程完全不受影响。
实际上v3是有贡献的,只是跑100条测不出来,我跑1000多条里,能看到和v2的贡献差不多。
对,你说得没错。代码确实没把 v3 的显存彻底释放干净,所以才 OOM。
问题根源我之前说了:del + torch.cuda.empty_cache() 只能清 PyTorch 侧的缓存,CTranslate2 用 cudaMalloc 分配的显存不受控制。
但既然你确认了代码层面释放不干净,那就不是"加几行 gc.collect() 就能解决"的事。这是 CTranslate2 的已知行为——它的 CUDA 上下文在进程生命周期内不会真正归还显存给驱动。
真正能解决问题的做法
用子进程隔离 large-v3:
import multiprocessing as mp
def _run_large_v3(audio_file, model_dir, compute_type, result_queue):
"""在子进程里跑 large-v3,进程退出时 OS 回收所有显存"""
try:
model = WhisperModel(
f"{model_dir}\\faster-whisper-large-v3",
device="cuda",
compute_type=compute_type
)
asr_text = transcribe(model, audio_file)
result_queue.put((True, asr_text))
except Exception as e:
result_queue.put((False, str(e)))
# 主进程里调用
if model_name == "faster-whisper-large-v3" and lazy_load_large:
result_queue = mp.Queue()
p = mp.Process(
target=_run_large_v3,
args=(audio_file, args.model_dir, args.compute_type, result_queue)
)
p.start()
p.join(timeout=120) # 2分钟超时
if p.is_alive():
p.kill()
print(f" [{model_name:25s}] 超时,跳过")
all_results.append(f"{model_name}:TIMEOUT")
continue
success, result = result_queue.get()
if success:
asr_text = result
asr_time = 0 # 子进程内计时你可以用 Queue 多传一个值
print(f" [{model_name:25s}] 子进程完成")
else:
print(f" [{model_name:25s}] 失败: {result}")
all_results.append(f"{model_name}:ASR_ERROR")
asr_error_results.append(f"sub_id:{sub_id} [{model_name}] {result}")
continue原理:子进程结束 → OS 回收该进程占用的所有显存(包括 CTranslate2 的 cudaMalloc)→ 主进程完全不受影响。这是唯一能保证"彻底释放"的方式。...
浏览更多内容请先登录。
立即注册
更新于:2026-08-29 05:39:22
相关内容
Python 学习整理2
fastapi-speaker-extractor whisperx 项目报错 ValueError: The chosen ...
python报错 UnicodeEncodeError: 'gbk' codec can't encode character '\u...
python whisperx 报错 in load_align_model raise ValueError(f'The ch...
pyannote/embedding 模型是真难引入模型
Trae 或者是我自己 莫名奇妙创建了个文件,影响了项目代码的运行。
WhisperX 无法加载模型
HUGGINGFACE_HUB_CACHE 设置错误导致的问题
Trae的bug太多了,怪不得免费
通义之旅
通义之旅2
目标说话人声音提取模型训练的思路
python报错 can't convert cuda:0 device type tensor to numpy. Use Tenso...
Expected all tensors to be on the same device, but found at least two ...
腾讯元宝推荐的项目结构(音频处理项目)
音频处理项目fse
各种python 相关命令
python 报错 SyntaxError: 'return' outside function
python常用命令
腾讯编程助手
python一些扩展兼容安装的处理方案
AI和Python 学习整理
AudioSeparationGUI 对输入的音频,自动根据说话人进行分类 20250817
SoloSpeech 项目安装和运行测试 20250817
python 多项目部署 优先考虑用Anaconda
espnet 声音分离
ClearerVoice-Studio 安装测试遇到的问题,安装pysptk一直失败
uvr5 bs roformer 爆显存以及关于huggingface的国内镜像hf-mirror.com
用Kimi编程
Studio One 调试插件Techivation AI-Rack 一键智能混音
在hf-mirror.com模型镜像站用代码下载模型遇到报错 speaker-diarization模型不...
用腾讯元宝编程
Conda国内镜像源
数字对象标识符 (DOI)
在创建conda环境时,如果不指定Python版本,conda将不会默认安装Python。
whisperx 的使用 音频处理
Win10系统 Trae的使用 关于powershell报错: 因为在此系统上禁止运行脚本
warp的使用
AI编程工具比较
FastApi
SQL 学习整理
SQL中EXISTS的使用
Yii2报错没有关联命名 common\models\Post has no relation named
SQL常用语句
SQL复杂查询(案例一)
Sql常用查询操作
【知乎】从零学会SQL:复杂查询
sql查询两张表中不同的数据
php知识点学习整理
PHP preg_quote() 函数
PHP str_ireplace() 函数
查看php位置
php7.4 查看版本
PHP提示 cURL error 60: SSL certificate problem: unable to get loca...
php过滤表单输入的emoji表情
PHP 中英文混排截取字符串 (用php自带的函数,简单效果又好)
PHP的源代码BUG整理
php如何查看扩展是否开启
linux下安装php的Exif扩展笔记!(用LNMP一键安装脚本安装的php)
configure: error: Cannot find ldap.h 解决方法
一个PHP针对数字的加密解密类
php的Memcache addServer 后set失败
PHP8 报错Required parameter $r follows optional parameter
php执行shell不阻塞方法
CURL超时时间设置
推荐内容