Python 学习整理3 202608

PHPer 2026-08-29 2 0 0

这里做下记录...

立即注册
更新于:2026-08-29 05:27:03
    您需要登录后才可以评论。 立即注册

    用子进程隔离 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超时时间设置

    推荐内容

    真枪实弹,假戏真做,12部具有“实干精神”的电影!

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作