|-原 用子进程隔离 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
相关内容
CentOS 8 结束生命周期,切换到 CentOS-Vault 源教程(vault源不好用,...
Centos7 安装Apache过程详解
PHP strpos() 对比 mysql locate()
CasaOS one-click installation scripts
composer的安装和使用知识整理
慎用composer update
Could not open input file: composer.phar报错
composer在国内使用效果很差,总提示没有找到要下载的文件
compser安装后无法使用,php7.4版本下安装的
win10系统 安装好composer后 cmd 命令行下输入composer提示不是内部或外部的命...
使用composer安装项目需要注意的
Windows环境下Composer的安装教程遇到的问题及解决方法
= 8.0.0".">解决Yii2里引入自定义文件 composer dump-autoload后报错:Composer detect...
composer 设置Github全局 token,在所有项目上都使用阿里云镜像
Packagist.org 明确了 Composer 1.x 被弃用的时间表
composer.json 变更autoload files后要怎么操作
composer 在国内现在在是太难用了 20231120
Call to undefined function Composer\XdebugHandler\putenv() in phar 运...
composer update 由于目标计算 机积极拒绝,无法连接。
解决composer update出现的Discard changes [y,n,v,d,s,?]的问题
推荐内容