Проблема с установкой для ODQA

Пытаюсь установить либу по http://docs.deeppavlov.ai/en/master/skills/odqa.html
часть датасетов скачалась, а потом получается ошибка File “/home/joo/myvenv/lib/python3.6/site-packages/numpy/lib/format.py”, line 725, in read_array
array = numpy.ndarray(count, dtype=dtype)
MemoryError

Полный трейсбек

(myvenv) joo@joo-tf:~$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from deeppavlov import configs
>>> from deeppavlov.core.commands.infer import build_model
>>> odqa = build_model(configs.odqa.en_odqa_infer_wiki, download=True)
2019-07-18 13:48:44.994 INFO in 'deeppavlov.download'['download'] at line 116: Skipped http://files.deeppavlov.ai/deeppavlov_data/multi_squad_model_noans_1.1.tar.gz download because of matching hashes
2019-07-18 13:54:10.253 INFO in 'deeppavlov.download'['download'] at line 116: Skipped http://files.deeppavlov.ai/deeppavlov_data/en_odqa.tar.gz download because of matching hashes
2019-07-18 13:57:06.704 INFO in 'deeppavlov.download'['download'] at line 116: Skipped http://files.deeppavlov.ai/datasets/wikipedia/enwiki.tar.gz download because of matching hashes
[nltk_data] Downloading package punkt to /home/joo/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
[nltk_data] Downloading package stopwords to /home/joo/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!
[nltk_data] Downloading package perluniprops to /home/joo/nltk_data...
[nltk_data]   Package perluniprops is already up-to-date!
[nltk_data] Downloading package nonbreaking_prefixes to
[nltk_data]     /home/joo/nltk_data...
[nltk_data]   Package nonbreaking_prefixes is already up-to-date!
2019-07-18 13:57:15.43 INFO in 'deeppavlov.models.vectorizers.hashing_tfidf_vectorizer'['hashing_tfidf_vectorizer'] at line 264: Loading tfidf matrix from /home/joo/.deeppavlov/models/odqa/enwiki_tfidf_matrix.npz
2019-07-18 13:57:15.77 ERROR in 'deeppavlov.core.common.params'['params'] at line 110: Exception in <class 'deeppavlov.models.vectorizers.hashing_tfidf_vectorizer.HashingTfIdfVectorizer'>
Traceback (most recent call last):
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/core/common/params.py", line 104, in from_params
    component = cls(**dict(config_params, **kwargs))
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/models/vectorizers/hashing_tfidf_vectorizer.py", line 80, in __init__
    self.tfidf_matrix, opts = self.load()
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/models/vectorizers/hashing_tfidf_vectorizer.py", line 266, in load
    matrix = Sparse((loader['data'], loader['indices'],
  File "/home/joo/myvenv/lib/python3.6/site-packages/numpy/lib/npyio.py", line 262, in __getitem__
    pickle_kwargs=self.pickle_kwargs)
  File "/home/joo/myvenv/lib/python3.6/site-packages/numpy/lib/format.py", line 725, in read_array
    array = numpy.ndarray(count, dtype=dtype)
MemoryError
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/core/commands/infer.py", line 61, in build_model
    component = from_params(component_config, mode=mode, serialized=component_serialized)
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/core/common/params.py", line 80, in from_params
    model = build_model(config, serialized=serialized)
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/core/commands/infer.py", line 61, in build_model
    component = from_params(component_config, mode=mode, serialized=component_serialized)
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/core/common/params.py", line 104, in from_params
    component = cls(**dict(config_params, **kwargs))
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/models/vectorizers/hashing_tfidf_vectorizer.py", line 80, in __init__
    self.tfidf_matrix, opts = self.load()
  File "/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/models/vectorizers/hashing_tfidf_vectorizer.py", line 266, in load
    matrix = Sparse((loader['data'], loader['indices'],
  File "/home/joo/myvenv/lib/python3.6/site-packages/numpy/lib/npyio.py", line 262, in __getitem__
    pickle_kwargs=self.pickle_kwargs)
  File "/home/joo/myvenv/lib/python3.6/site-packages/numpy/lib/format.py", line 725, in read_array
    array = numpy.ndarray(count, dtype=dtype)
MemoryError
>>>

Здравствуйте, @BitcoinKing

Кажется, проблема возникла в момент построения модели ODQA. Обратите, пожалуйста, внимание на то, что для ее загрузки требуется около 24 ГБ оперативной памяти. Если не хватает памяти на машине, можно увеличить swap файл.

Cпасибо, да, это ж было написано в доках, увеличил свап.
Но, правда, загрузка всех моделей занимает аж 40 минут! Это при том, что комп топовый: 16гб оперативы, проц i7, видеокарта 1080.
Само использование inference занимает по 15 секунд один вопрос - что конечно совсем не продакшен-рейди.
В связи с этим: а какие рекомендации по размещению в продакшен? Что будет на сервере, если будет/не будет работать свап, есть ли туториал как добиться нормальной скорости inference?

Здравствуйте, @BitcoinKing

С такими характеристиками компьютера загрузка модели в память, при условии, что все данные уже скачаны и распакованы, должна занимать примерно 20 минут. Если же загрузка осуществляется с самого начала, вместе со скачиванием данных, то 40 минут кажется реальной цифрой. Все-таки данных скачивается много, около 40 ГБ, и они еще распаковываются.
Скорость загрузки модели будет происходить быстрее, если увеличить размер оперативной памяти, так как своп все-таки работает медленнее.

Что касается скорости инференса, то в норме она занимает около 5-10 секунд. Проверьте, пожалуйста, что в питоновском энвайронменте, в котором происходит запуск, установлена именно tensorflow-gpu, а не tensorflow, и что видеокарта действительно используется. Обычно это видно по логам tensorflow при загрузке модели в память.

Другой способ увеличить скорость инференса - снизить количество релевантных документов, выдаваемых ранжировщиком на выходе. Это можно сделать, открыв .json конфиг используемого ранжировщика и установив значение параметра top_n, например, равным 1. Однако такой способ приведет к снижению общего качества модели.