当我从 scikit-learn 导入一些东西时,我有大量的上下文切换
I have a crazy amount of context switches when I import something from scikit-learn
我们正在使用 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 对象中 c运行 时,我们会看到上下文切换的大量增加。
您绝对可以发现我们发送给 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 在我们的笔记本电脑上撰写时,当我们 运行 它在游牧上 docker 时,就会发生这种情况。该 Web 应用程序使用 Flask 编写并使用 gunicorn 提供。
有什么方法可以让 scikit 更灵活地使用这些上下文切换?
我们的管理员担心它会降低部署到相同节点的所有应用程序。
我们正在使用 Python 3.6 和 scikit-learn 0.19.1
尝试通过 运行 来限制您的进程可以使用的线程数:
OMP_NUM_THREADS=1 python run.py
在此处查看完整说明:
我们正在使用 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 对象中 c运行 时,我们会看到上下文切换的大量增加。
您绝对可以发现我们发送给 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 在我们的笔记本电脑上撰写时,当我们 运行 它在游牧上 docker 时,就会发生这种情况。该 Web 应用程序使用 Flask 编写并使用 gunicorn 提供。
有什么方法可以让 scikit 更灵活地使用这些上下文切换?
我们的管理员担心它会降低部署到相同节点的所有应用程序。
我们正在使用 Python 3.6 和 scikit-learn 0.19.1
尝试通过 运行 来限制您的进程可以使用的线程数:
OMP_NUM_THREADS=1 python run.py
在此处查看完整说明: