2017-11-28 21 views
0

model 개체의 동일한 복사본에 model.wv.most_similar_cosmulmultiple cores을 사용하여 batches of input pairs에 전화하고자합니다.Gensim word2vec/doc2vec 멀티 스레딩 병렬 쿼리

multiprocessing 모듈은 model의 사본이 여러 개 필요합니다. model은 RAM이 30GB 이상이므로 너무 많은 RAM이 필요합니다.

내 쿼리 쌍을 평가하려고했습니다. 첫 라운드에는 약 12 ​​시간이 걸렸습니다. 더 많은 라운드가있을 수 있습니다. 그래서 스레딩 솔루션을 찾고 있습니다. 파이썬에 Global Interpreter Lock 문제가 있음을 이해합니다.

제안 사항? 텍스트 벡터 모델은 메모리와 수 있도록 변함 작업에 후 multiprocessing사용

+0

어떤 운영 체제 : A-동일하지 비슷한하지만 사용의 경우에이 기술을 사용하는 까다로운 부분을 더 논의

에서 내 대답을 참조? '멀티 프로세싱 (multiprocessing) '은 리눅스에서'fork'를 사용하기 때문에 데이터는 공유되고 쓰기 접근시에만 복사되어야합니다. – BlackJack

+0

@BlackJack 이상합니다. 파이썬이 코드 세그먼트에 쓰기 액세스가 필요한지 사전에 어떻게 알 수 있습니까? 나는 그것이 모를 경우 포크 (fork) 시간에 각 자식에 대한 객체를 복사해야한다고 생각했습니다. – Mai

+0

파이썬은 운영체제가 알지 못합니다. 이것은 일반적으로 파이썬 객체 나 파이썬과 관련이 없지만 운영체제 수준의 프로세스와 메모리 페이지와 관련이 있습니다. – BlackJack

답변

1

포크 (fork) 프로세스는 많은 프로세스는 같은 객체 메모리를 공유 할 수 있습니다.

특히 단위 기준 벡터 (syn0norm 또는 doctag_syn0norm)의 자동 생성이 이미 발생했는지 확인하고 싶을 것입니다. most_similar() 호출에 의해 처음으로 자동으로 트리거되거나 해당 개체에 init_sims() 메서드를 사용하여 강제로 호출 할 수 있습니다. 일 때, 원래 원시 벡터를 필요로하지 않는 단위 규범 벡터 사이에서 가장 유사한 쿼리를 수행하는 경우 원시 혼합 크기 syn0 벡터를 복제하여 많은 주소 지정 가능한 메모리를 절약하려면 init_sims(replace=True)을 사용하십시오.

Gensim에는 모델 거대한 배열의 소스로 메모리 매핑 파일을 사용하는 옵션이 있으며 여러 프로세스가 동일한 읽기 전용 메모리 매핑 파일을 사용하는 경우 OS는 해당 파일을 물리적으로 매핑 할만큼 똑똑합니다. 메모리를 한 번 사용하여 공유 어레이에 대한 두 프로세스 포인터를 제공합니다.

How to speed up Gensim Word2vec model load time?