2017-11-28 2 views
0

Iはbatches of input pairsに、multiple coresを使用して、modelオブジェクトの同じコピーに、model.wv.most_similar_cosmulを呼び出したいです。Gensim word2vec/doc2vecマルチスレッド並列クエリ

multiprocessingモジュールにはmodelの複数のコピーが必要ですが、modelはRAMが30GB以上であるためRAMが多すぎます。

私はクエリのペアを評価しようとしました。最初のラウンドでは12時間かかりました。より多くのラウンドが来るかもしれません。そのため、私はスレッド化ソリューションを探しています。私はPythonがGlobal Interpreter Lock号を持っていることを理解しています。

提案がありますか?あなたのテキストベクトルモデルは、多くのプロセスが同じオブジェクト・イン・メモリを共有できるようにメモリと変わらないかもしれない仕事である後multiprocessingを使用してプロセスをオフにフォーク

+0

? 'マルチプロセッシング'はLinux上で 'fork'を使用するので、データは共有され、書き込みアクセス時にしかコピーされません。 – BlackJack

+0

@BlackJackそれは変です。 'Python'は、コードセグメントが書き込みアクセスを必要とするかどうかを事前に知っていますか?私はそれがわからない場合、フォーク時に各子供のためにオブジェクトをコピーしなければならないと思った。 – Mai

+0

Pythonは、オペレーティングシステムが認識しません。これは一般的にはPythonオブジェクトやPythonとは関係ありませんが、オペレーティングシステムレベルのプロセスやメモリページがあります。 – BlackJack

答えて

1

特に、単位標準ベクトル(syn0normまたはdoctag_syn0norm)の自動生成が既に行われていることを確認する必要があります。それはmost_similar()コールで初めて必要になったときに自動的に起動されるか、または関連するオブジェクトに対してinit_sims()メソッドで強制的に実行されます。 の場合、元の生ベクターを必要としない、ユニットノルム付きベクター間で最も類似したクエリーを実行する場合は、生の混合量syn0ベクターを破棄し、アドレス可能なメモリーを大量に節約するためにinit_sims(replace=True)を使用してください。

Gensimには、モデル・ジャイアント・アレイのソースとしてメモリーマップ・ファイルを使用するオプションがあります。また、複数のプロセスが同じ読み取り専用メモリー・マップ・ファイルを使用する場合、OSはそのファイルを物理共有アレイへの両方のプロセスポインタを提供します。類似した - しかし、同一ではないユースケースでは、この技術を使用してのトリッキーな部分のより多くの議論のために

、で私の答えを参照してください。

オペレーティングシステム

How to speed up Gensim Word2vec model load time?

関連する問題