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

如何通过uWSGI在不同GPU上均匀启动深度学习模型服务多进程?

解决uWSGI多进程绑定不同GPU的问题

当然可以通过uWSGI配置实现多进程的GPU均匀分配,核心思路是给每个worker进程单独设置CUDA_VISIBLE_DEVICES环境变量,让不同worker绑定到不同GPU。下面是两种实用的配置方式:

方法一:用uWSGI内置变量动态分配

利用uWSGI的per-worker-env指令和内置的%(worker_id)变量,结合GPU数量做取模运算,实现均匀分配。

假设你有2个GPU,要启动4个worker(每个GPU跑2个进程),uwsgi.ini配置如下:

[uwsgi]
# 基础配置
http = :5000
module = your_flask_or_django_app:app
processes = 4

# 按worker ID取模GPU数量,分配对应GPU
# 这里%2代表GPU总数为2,可根据实际数量修改
per-worker-env = CUDA_VISIBLE_DEVICES=%(worker_id)%2

这样worker 0、2会绑定0号GPU,worker 1、3会绑定1号GPU,自动实现均匀负载。

方法二:用post-fork钩子自定义分配

如果需要更灵活的分配规则(比如指定特定GPU给某些worker),可以用post-fork钩子执行shell命令设置环境变量:

[uwsgi]
http = :5000
module = your_app:app
processes = 4

# 每个worker启动后,根据自身ID设置对应的GPU
# UWSGI_WORKER_ID是worker进程的内置环境变量
post-fork = exec:export CUDA_VISIBLE_DEVICES=$((UWSGI_WORKER_ID % 2))

如果要自定义GPU映射(比如worker 0用1号GPU,worker1用3号,worker2用1号,worker3用3号),可以改成:

post-fork = exec:export CUDA_VISIBLE_DEVICES=$(echo "1 3 1 3" | cut -d' ' -f$((UWSGI_WORKER_ID + 1)))

关键注意事项

  • 确保你的深度学习框架(PyTorch/TensorFlow等)会自动读取CUDA_VISIBLE_DEVICES,不要在代码里硬编码device_id,否则会覆盖环境变量的设置。
  • 如果GPU性能差异大,可以调整分配比例(比如高性能GPU多分配几个worker),只需要修改取模规则或映射列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:42:05