2

マルチプロセッシングを Python 3.3 で動作させる (そしてそれを理解する) ことを試みている間、私はすぐに仕事を楽にするために joblib に戻りました。しかし、私は非常に奇妙なことを経験します(私の見解では)。このコードを実行する場合 (動作するかどうかをテストするため):

Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(200000))

約 9 秒かかりますが、増やすn_jobsと実際には長くなります... n_jobs=225 秒n_jobs=4かかり、27 秒かかります。
私が間違っている場合は修正してください...しかし、n_jobs増加すると、代わりにはるかに高速になるべきではありませんか? Intel I7 3770K を使用しているので、CPU の問題ではないと思います。

おそらく、私のオリジナルの問題を与えることで、答えや解決策の可能性が高まる可能性があります。
30,000 個以上の文字列のリストがあり、data(他の文字列とは関係なく) 各文字列で何かを行う必要があります。約 14 秒かかります。これは、コードが機能するかどうかを確認するためのテスト ケースです。実際のアプリケーションでは、おそらく 100k 以上のエントリになるため、これは計算全体のごく一部にすぎないため、マルチプロセッシングが必要になります。これは、計算のこの部分で行う必要があることです。

data_syno = []
for entry in data:
    w = wordnet.synsets(entry)
    if len(w)>0: data_syno.append(w[0].lemma_names[0])
    else: data_syno.append(entry)
4

1 に答える 1

1

n_jobs パラメーターは、使用されるコアの最大数が -1 であるため、直観に反しています。1 の場合、1 つのコアのみを使用します。-2 では最大 1 コアを使用し、-3 では最大 2 コアを使用するなどです。

ドキュメントから:

n_jobs: int :

The number of jobs to use for the computation. If -1 all CPUs are used. If 1 is given, no parallel computing code is used at all, which is useful for debugging. For n_jobs below -1, (n_cpus + 1 + n_jobs) are used. Thus for n_jobs = -2, all CPUs but one are used.
于 2013-08-12T13:56:27.060 に答える