Modifica della configurazione a runtime per PySpark

voti
2

Stavo cercando di implementare un indice Faiss addestrato su PySpark e di fare una ricerca distribuita. Quindi l'intero processo include:

  1. Pre-processo
  2. Carica l'indice Faiss(~15G) e fai la ricerca Faiss
  3. Post-processo e scrivere a HDFS

Ho impostato le CPU per ogni attività come 10 (spark.task.cpus=10) per poter effettuare la ricerca multithread. Ma il passo 1 e il passo 3 possono utilizzare solo 1 CPU per ogni attività. Al fine di utilizzare tutte le CPU che voglio impostare spark.task.cpus=1prima dei passi 1 e 3. Ho provato a impostare il metodo di RuntimeConfigma sembra che abbia bloccato il mio programma. Qualche consiglio su come cambiare la configurazione a runtime o come ottimizzare questo problema?

Esempio di codice:

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)
È pubblicato 26/04/2020 alle 10:00
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Idea alternativa: usare mapPartitions per i passi 1 e 3. Quindi, utilizzare un pool multiprocesso all'interno di ogni lavoratore per mappare gli elementi della partizione in parallelo. In questo modo, è possibile utilizzare tutti i cpus assegnati ad un worker senza modificare la configurazione (cosa che non so se è possibile).

Pseudocodice:

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)
Risposto il 13/05/2020 a 10:59
fonte dall'utente

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