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

在ModelScope中,能一个卡同时启动2个同样推理吗

1.我用3090的卡跑推理,是openbuddy-mistral-7b 我用infer.sh脚本推理的时候显存占用47%,但是再启一个推理进程的话,就阻塞不动了,能一个卡同时启动2个同样推理吗? 2. 用你给的那个脚本(打印response)去推理的话,报 CUDA out of memory. Tried to allocate 204.00 MiB (GPU 0; 23.69 GiB total capacity; 1.49 GiB already allocated; 40.69 MiB free; 1.51 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CON 这两个问题要向您求助

展开
收起
崔问问 2023-11-29 16:29:33 362 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。
    1. 关于同时在一张3090显卡上启动两个相同的推理进程的问题,可能是由于显存的限制导致的。显存占用47%表示已经使用了一定量的显存,再启动一个相同的推理进程可能会超出显存的容量,从而导致阻塞或出错。因此,在一张3090显卡上同时运行两个相同的推理进程可能是不可行的。

    如果您想同时运行多个推理进程,可以考虑使用多张显卡,并确保每个进程在独立的显卡上运行,以充分利用硬件资源。

    1. 对于 CUDA out of memory 的错误,请尝试以下解决方法:

      • 减小批量大小(batch size):减小每个推理进程中使用的批量大小,可以减少显存的需求。

      • 减小模型的尺寸:如果模型较大,可以考虑将其缩小,以减少内存消耗。

      • 使用更少的显卡内存操作:确保在推理期间没有额外的显卡内存操作,例如不需要存储过多的中间结果。

      • 设置 PyTorch 的环境变量来调整分配和释放显存的策略:

        export CUDA_LAUNCH_BLOCKING=1
        export PYTORCH_CUDA_ALLOC_CONF=1
        

        这些环境变量可以帮助您更好地管理显存,并避免碎片化问题。但请注意,这可能会导致一些性能损失。

    2023-11-30 14:44:01
    赞同 展开评论 打赏
  • 对于第一个问题,是否可以在一个 GPU 上同时运行两个推理进程取决于多个因素。尽管从理论上讲,你确实可以尝试在一个 GPU 上并行地运行多个推理任务,但实际效果会受到限制。以下是一些可能影响到性能的因素:

    1. 显存占用:每个推理进程都会占用一定的显存资源。如果显存被过度分配,那么新启动的进程可能会因缺乏足够的显存而阻塞。

    2. 硬件限制:虽然 NVIDIA GeForce RTX 3090 是一款非常强大的消费级显卡,但它仍然存在一些物理上的限制,如带宽、内存访问速度等。在高负载下,这些限制可能导致并行推理的性能下降。

    3. 驱动和软件支持:GPU 驱动程序和框架(如 PyTorch 或 TensorFlow)通常会有一些内在的优化来处理多进程环境,但这并不意味着它们能完美地处理所有情况。

    4. 模型大小和复杂性:如果你正在使用的是大型或复杂的模型,那么单个模型可能就已经占用了大部分的显存资源,这使得在同一张卡上并行运行多个模型变得困难。

    对于第二个问题,报错信息表明你的显存已经耗尽,无法为新的操作分配更多空间。你可以尝试以下方法来解决这个问题:

    1. 减少 batch size:如果你是通过批处理的方式进行推理,尝试减小批处理的大小,以降低每次推理所需的显存。

    2. 释放显存:确保在每次推理完成后,显存中的数据都被正确释放。在 Python 中,可以通过 torch.cuda.empty_cache() 函数手动清空缓存,从而释放一部分显存。

    3. 调整参数:PyTorch 提供了一些与内存管理相关的参数,如 max_split_size_mb。尝试按照错误提示的信息设置这些参数,看看能否避免显存碎片化。

    4. 升级硬件:如果以上方法都无法解决问题,并且你的工作流程需要更高的显存容量,那么考虑升级到具有更大显存的 GPU 可能是一个解决方案。

    5. 跨卡调度:如果你有多块 GPU,在 OpenBuddy 等工具的支持下,你可以将推理任务分布到不同的 GPU 上,这样可以更有效地利用资源。

    6. 监控和调试:使用像 nvidia-smi 这样的工具监视 GPU 的状态,找出哪些过程正在占用大量的显存,然后针对性地优化代码。
      https://help.aliyun.com/zh/viapi/developer-reference/api-start-the-service?spm=a2c4g.11174283.0.i3

    2023-11-30 10:44:03
    赞同 展开评论 打赏

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

相关电子书

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