我们正在使用 scikit-learn 来寻找相似的图像集群。我们希望为此有一个内部 API,但是当我们从 scikit 导入对象或使用它时,我们会得到非常多的上下文切换。
这些进口中的任何一个都创造了很多:
from sklearn.neighbors import NearestNeighbors
from sklearn.externals.joblib import load
from sklearn.decomposition import PCA
from sklearn.externals import joblib
这是vmstat 1
我们程序重新启动期间的输出。
我们在导入前后添加了一些睡眠,并将大量上下文切换与这些行关联起来。
但是,当我们处理 3 GB NearestNeighbors 对象中的数字时,我们会看到上下文切换的大幅增加。
您绝对可以发现我们发送到 API 的 3 个查询。
以下是增加的嫌疑人:
def reduce_dimensions(self, dataset):
return self.dim_obj.transform(dataset)
def get_closest_cluster(self, input_data):
indexs_with_distance = self.cluster_obj.radius_neighbors(X=input_data, radius=self.radious, return_distance=True)
return self.get_ordered_indexs(indexs_with_distance)
当我们在笔记本电脑上使用 docker compose 运行设置时,以及使用 docker 在 nomad 上运行设置时,就会发生这种情况。Web 应用程序是用 Flask 编写的,并使用 gunicorn 提供服务。
有什么方法可以告诉 scikit 使用这些上下文切换更加机智吗?
我们的管理员担心它会降低部署到相同节点的所有应用程序。
我们正在使用 Python 3.6 和 scikit-learn 0.19.1