У меня есть код Python3, примененный к файлу JSON, с некоторыми нейронными сетями и случайными лесами в кодах. Я поместил свои коды в контейнер Docker, но заметил, что эти задачи ML выполняются без Docker быстрее, чем с Docker. В Docker я использую Flask для загрузки файла JSON и запуска кодов. Конечно, я использовал идентичные версии модулей Python локально и внутри Docker, а именно:
- theano 0.8.2
- keras 2.0.5
- scikit-learn 0.19.0
Также , Flask составляет
При во-первых, я думал, что theano может использовать разные ресурсы с VS без Docker, но он работает как с одним процессором, так и с одним потоком. Он также не использует мой графический процессор. Я понял, что это, вероятно, не теано, когда понял, что мой случайный лес также работает медленнее в Docker. Вот несколько тестов, которые я выполнил (я сделал несколько тестов для каждого, сообщаю средние значения времени, поскольку они были стабильными)
Без Docker, без Flask:< /p>
- Задача 1 (код theano + keras): 1,0 с
- Задача 2 (код theano + keras) ) : 0,7 с.
- Задание 3 (код scikit-learn): 0,25 с.
Docker (cpus=1) + Flask (режим отладки = True):
- T1: 6,5 с
- T2: 2,2 с
- T3: 0,58 с
Docker (cpus=2) + Flask (режим отладки = True):
- T1: 5,5 с
- T2: 1,4 с< /li>
T3: 0,55 с
Docker (cpus=2) + Flask (режим отладки = False) ):
- T1: 4,5 с
- T2: 1,2 с
- T3: 0,5 с
Docker (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 с< /li>
Я думаю, что процессор=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. Простите, если в вопросе чего-то не хватает, это мой первый вопрос на StackOverflow
Подробнее здесь:
https://stackoverflow.com/questions/504 ... -and-flask