Объем памяти в графике DyNet растет, а время предсказания замедляется

Я использую реализацию DRMM, определенную здесь:https://github.com/nlpaueb/deep-relevance-ranking/blob/master/models/drmm/posit.py

В этой реализации используется DyNet, и она отлично обучается, но во время прогнозирования она очень медленная и растет в памяти - запрашивая до 14 ГБ памяти VIRT и памяти 4G RES для прогнозирования одного запроса из трех слов и используя 4G из этого. Для запроса ~180 слов потребовалось 443 с 100 Гбайт VIRT и ~8 Гбайт памяти RES. Таким образом, это не масштабируется и ухудшается при нескольких запросах.

Вопрос двоякий: 1) правильно ли выполнено создание / очистка графа. 2) любые предложения / указатели для ускорения этого кода - мы пробовали кэшировать входные данные (dwds, dvecs, dconv) и выполнить некоторую векторизацию, но этого было недостаточно, поэтому любые отзывы приветствуются.

dy.renew_cg()

qtext = query.lower()
qwds, qvecs, qconv = self.model.MakeInputs(qtext). # see posit.py


for doc in docs:
    doc_id = doc['text']
    bm25 = doc['score']
    dtext = get_text(doc_id)

    efeats = self.model.GetExtraFeatures(qtext, dtext, bm25) # see posit.py
    efeats_fv = dy.inputVector(efeats)
    dwds, dvecs, dconv = self.model.MakeInputs(dtext) # see posit.py
    score = self.model.GetQDScore(qwds, qvecs, qconv, dwds, dvecs, dconv, efeats_fv) # see posit.py 
    rel_scores[doc_id] = score.value()


top = heapq.nlargest(k, rel_scores, key=rel_scores.get)
dy.renew_cg()

0 ответов

Другие вопросы по тегам