Проблемы производительности при машинном обучении с использованием Docker и Flask - PullRequest
0 голосов
/ 22 мая 2018

У меня есть некоторый код python3, примененный к файлу json, с некоторыми нейронными сетями и случайными лесами в кодах.Я поместил свои коды в контейнер Docker, но заметил, что эти задачи ML выполняются быстрее без Docker, чем с Docker.В Docker я использую Flask для загрузки файла json и запуска кодов.Конечно, я использовал идентичные версии модулей Python локально и внутри Docker, а именно:

  • theano 0.8.2
  • keras 2.0.5
  • scikit-learn0.19.0

Кроме того, Flask - это

  • 0,12

Сначала я подумал, что theano может использовать разные ресурсы с vs без Docker,но он работает с одним процессором и одним потоком.Он также не использует мой графический процессор.Я понял, что, вероятно, это не то, что было, когда понял, что мой случайный лес в Docker работает медленнее.Вот несколько тестов, которые я выполнил (я сделал несколько тестов для каждого, я сообщаю средние значения времени, поскольку они были стабильными)

Без докера, без Flask:

  • Задача1 (код theano + keras): 1,0 с
  • Задание 2 (код Theano + Keras): 0,7 с
  • Задание 3 (код scikit-learn): 0,25 с

Докер (cpus = 1) + Flask (режим отладки = True):

  • T1: 6,5 с
  • T2: 2,2 с
  • T3: 0,58с

Докер (процессор = 2) + Колба (режим отладки = True):

  • T1: 5,5 с
  • T2: 1,4 с
  • T3: 0,55 с

Докер (процессор = 2) + колба (режим отладки = False):

  • T1: 4,5 с
  • T2: 1,2 с
  • T3: 0,5 с

Докер (cpus = 2) (без Flask, просто вызывая файл json, как это делается локально):

  • T1: 2,8 с
  • T2: 1,1 с
  • T3: 0,5 с

Flask (режим отладки = True) (без контейнера Docker):

  • T1: 2,8 с
  • T2: 1,5 с
  • T3: 0,2 с

Я полагаю, что процессор = 1 против процессора = 2 просто выделяет больше одного процессора для кодов, и что второй процессор просто берет на себя некоторые другиеРабота.Ясно, что время, когда Flask ИЛИ Docker не используется, немного сокращается, но я все равно не могу достичь скорости, которую могу достичь без Docker И без Flask.Кто-нибудь догадывается, почему это происходит?

Это минимальный кусок кода того, как мы используем Flask для запуска приложения

api = Flask(__name__)
pipeline = Pipeline()  # private class calling multiple tasks

@api.route("/", methods=['POST'])
def entry():
    data = request.get_json(force=True)
    data = pipeline.process(data)
    # This calls the different tasks which are timed

if __name__ == "__main__":
    api.run(debug=True, host='0.0.0.0', threaded=False)

PS.Извините, если в вопросе ничего не хватает, это мой 1-й вопрос StackOverflow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...