开发者社区 > ModelScope模型即服务 > 计算机视觉 > 正文

想问一下Modelscope调用pipeline 推理之后显存不释放咋办,调用次数多了就爆显存?

想问一下Modelscope调用pipeline 推理之后显存不释放咋办,调用次数多了就爆显存?

展开
收起
青城山下庄文杰 2023-07-22 09:01:28 843 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    对于pipeline 推理后显存不释放的问题,有以下几个原因:

    模型本身存在内存泄漏
    有些模型在Python层面存在Bug,会造成内存泄漏,使用一段时间后显存就会越来越多。

    缓存不释放
    pipeline 在 inference 时会缓存一些中间结果,如果不清除缓存,也会慢慢占用更多显存。

    变量不释放
    在Jupyter Notebook中,变量即使不在使用,也不会自动释放。需要手动清除。

    暂时没找到
    如没有明显的原因,可以尝试:

    使用del手动清除模型变量
    python
    Copy
    del 模型变量
    使用gc.collect()收集垃圾
    python
    Copy
    import gc
    gc.collect()
    重新启动kernel,清除缓存

    限制pipeline的内存使用

    python
    Copy
    pipeline(..., device=0, max_length=等参数)
    采用pipeline的@lru_cache缓存函数调用
    可以尝试上述几点,尤其是:

    使用del手动删除模型变量
    使用gc.collect()手动触发垃圾回收
    限制pipeline的最大显存使用

    2023-07-27 18:48:48
    赞同 展开评论 打赏
  • 发一下调用代码? 模型占用的显存是不会释放的,但是临时输入和计算的显存底层pytorch会自行管理-此回答整理自钉群“魔搭ModelScope开发者联盟群 ①”

    2023-07-24 13:23:46
    赞同 展开评论 打赏
  • 如果使用 ModelScope 调用 pipeline 进行推理之后显存没有及时释放,可能会导致显存占用过高并最终导致显存溢出。以下是一些可能的解决方案:

    1. 手动释放资源:在每次推理完成后,手动释放使用的资源,包括模型、张量和其他相关对象。确保在使用完后调用相应的清理方法或函数,以释放显存并避免内存泄漏。

    2. 优化代码和循环:检查代码中是否存在循环调用或重复创建模型实例的情况。如果可能的话,尽量将模型的加载和初始化步骤放在循环外部,以避免重复创建和销毁模型对象,从而减少显存占用。

    3. 使用批处理推理:如果您的数据可以进行批处理推理,尝试一次性推理多个样本。这样可以减少模型加载和推理的次数,从而降低显存使用量。

    4. 减小模型尺寸:如果显存使用量仍然过高,可以考虑减小模型的尺寸或使用轻量级模型。通过选择更小的模型,可以减少模型参数和计算量,从而降低显存的需求。

    5. 使用分布式推理:如果您有可用的多个 GPU,可以尝试使用分布式推理来将负载分散到多个设备上。这样可以减少每个设备的显存占用,并提高整体的处理能力。

    6. 调整批处理大小和并发数:根据您的硬件限制和任务需求,调整批处理大小和并发数。较小的批处理大小和较低的并发数可能会降低显存占用。

    2023-07-24 13:21:05
    赞同 展开评论 打赏
  • 当使用Modelscope调用pipeline进行推理后,显存不释放的问题可能是由于未正确管理资源导致的。以下是一些可能的解决方案:

    1. 显式释放资源:在每次调用pipeline之后,手动释放不再需要的显存资源。可以使用torch.cuda.empty_cache()来清空显存缓存。

    2. 使用with语句管理资源:使用with语句可以确保在使用完pipeline后自动释放资源。示例如下:

    import torch
    from modelscope import model_packaging
    
    # 加载pipeline
    with model_packaging():
        pipeline = model_packaging.load_pipeline('your_pipeline_name')
    
        # 进行推理
        output = pipeline(input_tensor)
    
    # pipeline使用完后,资源会自动释放
    
    1. 限制调用次数:如果调用次数过多导致显存爆满,可以考虑限制调用次数,或者在每次调用之前检查显存使用情况,如果显存不足,则等待一段时间再进行下一次调用。

    2. 使用较小的batch size:降低batch size可以减少显存的使用量。可以尝试减小batch size来避免显存爆满的问题。

    3. 使用更轻量级的模型或推理方法:如果显存一直不够,可以考虑使用更轻量级的模型,或者使用更高效的推理方法,例如使用TensorRT等加速库进行推理。

    希望以上解决方案能够帮助到你解决显存不释放的问题。

    2023-07-22 19:38:22
    赞同 展开评论 打赏

包含图像分类、图像生成、人体人脸识别、动作识别、目标分割、视频生成、卡通画、视觉评价、三维视觉等多个领域

相关电子书

更多
视觉AI能力的开放现状及ModelScope实战 立即下载
ModelScope助力语音AI模型创新与应用 立即下载
低代码开发师(初级)实战教程 立即下载