долгая загрузка модели нейронной сети

196
19 августа 2018, 16:10

есть нейронная сеть, она является чат-ботом. с сайта отправляется ajax-запрос на php, он через shell_exec запускает питон и получает от него ответ, который после отправляет клиенту. проблема в том что всё это работает очень долго, но самое узкое место в самом питоне.

замеряю время этой функцией:

start_time = time.clock() #начали считать
#код
q = time.clock() - start_time #закончики считать
return_(q) #функция ответа и завершения

в целом код отрабатывает быстро, в среднем 0.0001 сек. (без загрузки модели), но как только я возвращаю загрузку модели (model = load_model( mycfg.path + 'my_model.h5')), то время выполнения в среднем становится 1.18 сек., при этом сама модель имеет размер 67кб.

для чата такая скорость непозволительна, особенно учитывая потерю времени на прослойку в виде php, каким образом оптимизировать этот момент? может можно запустить сеть в фоновом режиме и работать с процессом, а не грузить каждый раз всё для работы с сетью?

Answer 1

Вы уже сами ответили на свой вопрос - можно запустить сеть и работать с загруженными данными, модулями и т.п. Я бы воспользовался Flask, делаем простое серверное приложение, которое по урлу ждет фразу пользователя, при получении фразы отдает ее на обработку нейросети и возвращает ответ.

from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/get_phrase/<ph>')
def get_phrase(ph):
    ans = some_do(ph)
    return jsonify({'answer': ans})
def some_do(ph):
    # work
    return result
Answer 2

В дополонению ответа про сервер вы можете попытаться взаимодействовать через 'std*' Например: (сторона питона):

model = init_model()
while True:
    print(model.get_output(input()))

(сторона php)

1. инициализация процесса
2. отправить ему текст
3. получить его выход
READ ALSO
Как правильно сделать такой цикл?

Как правильно сделать такой цикл?

Как сделать так, чтобы если счет у пользователя был меньше нуля после покупки, то покупка отменяется? Ps есть наработка самого цикла

172
socket на reactphp

socket на reactphp

Хочу поинтересоваться, во всех примерах реализации сокетов, показывается как реализовать элементарный чатНа то это и пример, конечно, вопрос...

175