You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python-Gunicorn在Apple Silicon GPU推理时崩溃问题求助

问题解决建议

针对你在Apple Silicon macOS上使用Gunicorn部署Flask+ONNX Runtime(GPU)服务时出现的SIGSEGV崩溃问题,以下是具体的排查和修复方案:


核心原因

Gunicorn的多进程模型与Apple Silicon的GPU资源管理机制冲突:

  • Flask开发服务器是单进程单线程,GPU上下文可正常复用;
  • Gunicorn通过fork主进程创建Worker,GPU资源无法跨进程共享,若模型在主进程初始化,Worker会继承无效的GPU上下文,触发段错误。

具体修复步骤

1. 每个Worker进程单独初始化模型

禁止在全局或主进程中加载模型,必须在每个Worker启动后单独初始化GPU模型。可通过两种方式实现:

方式1:Flask请求前钩子

from flask import Flask
import onnxruntime as ort

app = Flask(__name__)
inference_session = None

def init_gpu_model():
    global inference_session
    # 显式指定CoreML Provider
    providers = [('CoreMLExecutionProvider', {'enable_cpu_fallback': False})]
    inference_session = ort.InferenceSession('midas.onnx', providers=providers)

# 在Worker进程的第一个请求前初始化模型
@app.before_first_request
def setup_model():
    init_gpu_model()

@app.route('/predict')
def predict():
    # 使用inference_session执行推理逻辑
    pass

方式2:Gunicorn post_fork钩子

from gunicorn.app.base import BaseApplication
from your_flask_app import app, init_gpu_model

class GunicornFlaskApp(BaseApplication):
    def __init__(self, app, options=None):
        self.options = options or {}
        self.application = app
        super().__init__()

    def load_config(self):
        config = {k: v for k, v in self.options.items() if k in self.cfg.settings}
        for k, v in config.items():
            self.cfg.set(k.lower(), v)

    def load(self):
        return self.application

# Worker进程fork后执行模型初始化
def post_fork(server, worker):
    init_gpu_model()

if __name__ == '__main__':
    gunicorn_options = {
        'workers': 1,
        'threads': 1,
        'post_fork': post_fork
    }
    GunicornFlaskApp(app, gunicorn_options).run()

2. 强制Gunicorn使用单线程模式

ONNX Runtime的CoreML Provider在多线程环境下易出现GPU资源竞争,添加threads=1配置避免冲突:

  • 命令行启动:gunicorn --workers 1 --threads 1 your_app:app
  • 代码配置:在gunicorn_options中加入'threads': 1

3. 禁用预加载模式

确保Gunicorn未开启preload_app=True(默认关闭),该选项会在主进程提前加载模型,导致Worker继承无效GPU上下文。

4. 升级onnxruntime-silicon到最新版本

旧版本存在多进程环境下的GPU兼容性bug,执行升级命令:

pip install --upgrade onnxruntime-silicon

内容的提问来源于stack exchange,提问作者Marin Nagy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:08