У меня есть некоторый код python3, примененный к файлу json, с некоторыми нейронными сетями и случайными лесами в кодах.Я поместил свои коды в контейнер Docker, но заметил, что эти задачи ML выполняются быстрее без Docker, чем с Docker.В Docker я использую Flask для загрузки файла json и запуска кодов.Конечно, я использовал идентичные версии модулей Python локально и внутри Docker, а именно:
- theano 0.8.2
- keras 2.0.5
- scikit-learn0.19.0
Кроме того, Flask - это
Сначала я подумал, что 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