Ändern der Konfiguration zur Laufzeit für PySpark

stimmen
2

Ich habe versucht, einen trainierten Faiss-Index in PySpark zu implementieren und eine verteilte Suche durchzuführen. Der gesamte Prozess umfasst also:

  1. Vor-Prozess
  2. Faiss-Index(~15G) laden und Faiss-Suche durchführen
  3. Post-Processing und Schreiben in HDFS

Ich stelle die CPUs pro Task auf 10 (spark.task.cpus=10) ein, um eine Multi-Thread-Suche durchzuführen. In Schritt 1 und Schritt 3 kann jedoch nur 1 CPU pro Task verwendet werden. Um alle CPUs auszunutzen, die ich spark.task.cpus=1vor Schritt 1 und 3 einstellen möchte. Ich habe die Set-Methode ausprobiert, RuntimeConfigaber es scheint, dass mein Programm dadurch hängen geblieben ist. Haben Sie einen Rat, wie Sie die Konfiguration zur Laufzeit ändern oder dieses Problem optimieren können?

Code-Beispiel:

def load_and_search(x, model_path):
    faiss_idx = faiss.read_index(model_path)
    q_vec = np.concatenate(x)
    _, idx_array = faiss_idx.search(q_vec, k=10)
    return idx_array


data = sc.textFile(input_path)

# preprocess, only used one cpu per task
data = data.map(lambda x: x)

# load faiss index and search, used multiple cpus per task
data = data.mapPartitioins(lambda x: load_and_search(x, model_path))

# postprocess and write, one cpu per task
data = data.map(lambda x: x).saveAsTextFile(result_path)
Veröffentlicht am 26/04/2020 um 10:00
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Alternative Idee: Verwendung mapPartitions für die Schritte 1 und 3. Verwenden Sie dann einen Multiprocessing-Pool innerhalb jedes Workers, um die Elemente in der Partition parallel abzubilden. Auf diese Weise können Sie alle einem Worker zugewiesenen Cpus verwenden, ohne die Konfiguration zu ändern (was ich nicht weiß, ob dies überhaupt möglich ist).

Pseudocode:

def item_mapper(item):
    return ...

def partition_mapper(partition):
    pool = mp.Pool(processes=10)
    yield from pool.imap(partition, item_mapper)

rdd.mapPartitions(partition_mapper)
Beantwortet am 13/05/2020 um 10:59
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more