мы используем 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-гигабайтном объекте NearestNeighbors, мы видим значительное увеличение переключений контекста.
Вы определенно можете определить 3 запроса, которые мы отправляем в наш API.
Вот предполагаемые повышения:
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. Веб-приложение написано с помощью Flask и обслуживается с помощью gunicorn.
Есть ли способ сделать scikit более находчивым с этими переключателями контекста?
Наши администраторы обеспокоены тем, что это приведет к деградации всех приложений, развернутых на одних и тех же узлах.
Мы используем Python 3.6 и scikit-learn 0.19.1.