Deap フレームワークを使用して遺伝的アルゴリズムを実装しています。アルゴリズムは機能しますが、GA のマルチプロセス バージョンは、単一プロセスの 2 GB に対して 9 GB のメモリを非常に消費していることに気付きました。プロセスごとにメモリが割り当てられているためと思われます。実際、マップが実行されるとすぐに、使用されるメモリが増加します。プロセス間で共有されるデータは読み込みのみに使用されるため、すべてのプロセスが同じメモリにアクセスできます。
これが私のコードの構造です。
def evaluate(individual, dataset=None):
penalty = dataset.compute(individual)
return penalty
def initialize():
dataset = dataset(file1, file2)
pool = multiprocessing.Pool()
toolbox.register("map", pool.map)
toolbox.register("evaluate", evaluate, dataset=dataset)
return toolbox, dataset
def main():
toolbox, dataset = initialize()
dataset.data = some_training_set
fitnesses = toolbox.map(toolbox.evaluate, population)
dataset.data = some_validation_set
fitnesses = toolbox.map(toolbox.evaluate, population)
次に、データセット (パンダを使用して読み取る) と辞書を含むクラスがあります。
class Dataset:
def __init__(self, file1, file2):
self.data = read(file1)
self.dict = loadpickle(file2)
def compute(self, individual):
for row in self.data
# some stuff reading row and self.dict
メモリを共有する最も簡単な方法は何ですか? self.data と self.dict にグローバル変数を使用しようとしましたが、何も...