问题描述
在调用sklearn.cluster中的KMeans时,cpu占用达100%,比如40核的cpu,最高4000%的cpu占用率
尝试解决方案
scikit-learn版本为0.24.2
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=k, random_state=123)
kmeans.fit(self.embeddings)
cluster_centers = kmeans.cluster_centers_
labels = kmeans.labels_
scikit-learn在0.23版本时会有n_jobs参数可以设置线程数,但是在降低版本之后,设置n_jobs参数依然会跑满cpu。下图是官方文档对n_jobs的解读。
考虑到之后高版本不会再使用n_jobs参数,所以未深究其中原因。
最终解决方案
在启动服务时设置线程数量可以解决该问题,如果设置为4个线程
OMP_NUM_THREADS=4 python run.py