1

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 にグローバル変数を使用しようとしましたが、何も...

4

1 に答える 1