Объем памяти в графике 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()