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

Docker中用Gunicorn运行KMeans遇Worker异常及OpenBLAS警告求助

解决Docker+Gunicorn运行KMeans时的OpenBLAS警告与Worker崩溃问题

场景说明

在Docker容器中使用Gunicorn运行KMeans聚类任务,Gunicorn用于实现主文件其他功能与KMeans的并行运行。运行过程中出现OpenBLAS警告,随后Gunicorn Worker进程崩溃(退出码139)。

硬件规格

Architecture: X86_64
CPU: Intel Xeon Gold

运行日志

2023-07-27 04:36:32,772 INFO 聚类已正常启动!
2023-07-27 04:36:32,772 INFO 我们处理的数据预览:
2023-07-27 04:36:32,782 INFO
   pressure   distance  cloudcover  humidity  windspeedKmph  percpmm  tempC
0    900.00  22.429714        40.5     30.93           3.57    19.24  33.50
1    866.67  24.261809         0.0     16.98           3.57    12.41  32.62
2    983.33  22.970385         0.0     23.26           2.71     4.30  33.06
3    916.67  23.144274         4.5     35.12           3.57    13.67  36.12
4    883.33  21.591553         0.0     27.44           3.57    34.58  31.31
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata.
[2023-07-27 04:36:34 +0000] [1] [ERROR] Worker (pid:8) was sent code 139!
[2023-07-27 04:36:34 +0000] [2551] [INFO] Booting worker with pid: 2551
[2023-07-27 04:36:37 +0000] [2551] [INFO] Started server process [2551]
[2023-07-27 04:36:37 +0000] [2551] [INFO] Waiting for application startup.
[2023-07-27 04:36:37 +0000] [2551] [INFO] Application startup complete.

已尝试无效方案

  • 从conda-forge安装numpy和scipy(无Dockerfile修改权限,无法操作)
  • 设置环境变量OPENBLAS_NUM_THREADS=1
  • 使用MiniBatchKMeans替代KMeans

可行解决方案

1. 调整OpenBLAS线程数到预编译支持范围

预编译的OpenBLAS通常对超过64核的CPU存在兼容问题,尝试设置线程数为32或更低(而非1),可通过以下方式设置:

  • 启动容器时传递环境变量:
    docker run -e OPENBLAS_NUM_THREADS=32 ...
    
  • 在Gunicorn启动脚本中添加:
    export OPENBLAS_NUM_THREADS=32
    gunicorn ...
    

2. 限制Gunicorn Worker进程数

多Worker进程同时调用OpenBLAS会加剧线程冲突,启动Gunicorn时限制Worker数量:

gunicorn --workers=2 ...

Worker数建议设置为CPU核心数的1/4或更低,避免资源竞争。

3. 显式设置KMeans的n_jobs参数

在代码中设置KMeans的n_jobs为小于等于64的值,同时与OpenBLAS线程数匹配:

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, n_jobs=32)

4. 禁用OpenMP线程

scikit-learn部分算法会使用OpenMP,与OpenBLAS线程冲突,添加环境变量:

export OMP_NUM_THREADS=1

5. 排查线程实际使用情况

设置OPENBLAS_VERBOSE=2环境变量,查看OpenBLAS实际线程分配情况,进一步调整参数:

export OPENBLAS_VERBOSE=2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:03:27