Gensim рабочий поток застрял
Я тренирую вложения документов на ~20 миллионов предложений и использую параллельную обработку в gensim. Я создаю свою модель и тренируюсь с помощью следующего кода
class read_corpus(object):
def __init__(self, fname, n):
self.fname = fname
self.n = n
def __iter__(self):
num_notes = 0
with open(self.fname, 'r') as f:
while num_notes < n:
note = next(f)
sentence_id, sentence = note.split('\t')
# remove the newline character after each line and split into words
sentence = sentence[:-1].split(' ')
# some processing
yield TaggedDocument(sentence, [sentence_id])
num_notes += 1
def model(fname, vector_size, min_count,
n_epochs, model_name,
n, prev_model_name=None):
data = read_corpus(fname, n)
if prev_model_name is not None:
model = Doc2Vec.load(prev_model_name)
else:
model = Doc2Vec(vector_size=vector_size,
min_count=min_count,
workers=4,
window=8,
alpha=0.1,
min_alpha=0.0001)
model.build_vocab(data)
model.train(data, total_examples=model.corpus_count, epochs=n_epochs)
model.save(model_name)
По прошествии 6–8 эпох информация о регистрации показывает, что обучение застревает в ожидании рабочего потока. Примечание: в информации журнала указано "EPOCH 1", потому что я тренируюсь в цикле for.
...
INFO : EPOCH 1 - PROGRESS: at 99.71% examples, 162493 words/s, in_qsize 8, out_qsize 0
INFO : EPOCH 1 - PROGRESS: at 99.81% examples, 162528 words/s, in_qsize 7, out_qsize 0
INFO : EPOCH 1 - PROGRESS: at 99.91% examples, 162560 words/s, in_qsize 7, out_qsize 0
INFO : worker thread finished; awaiting finish of 3 more threads
INFO : worker thread finished; awaiting finish of 2 more threads
Он застрял здесь на несколько часов.
У меня был похожий вывод при предыдущем запуске. Но запись остановилась на INFO : worker thread finished; awaiting finish of 3 more threads