Configuratie wijzigen tijdens runtime voor PySpark

stemmen
2

Ik probeerde een getrainde Faiss-index in te zetten bij PySpark en een gedistribueerde zoekopdracht uit te voeren. Dus het hele proces omvat:

  1. Voorproces
  2. Laad Faiss Index (~15G) en doe Faiss Search
  3. Post-proces en schrijven naar HDFS

Ik stel de CPU's per taak in op 10 (spark.task.cpus=10) om een multi-thread search te doen. Maar stap 1 en stap 3 kunnen maar 1 CPU per taak gebruiken. Om alle CPU's te kunnen gebruiken wil ik spark.task.cpus=1voor stap 1 en 3 instellen. Ik heb geprobeerd om de methode in te stellen, RuntimeConfigmaar het lijkt erop dat het mijn programma heeft laten vastlopen. Enig advies over hoe de configuratie te wijzigen tijdens runtime of hoe dit probleem te optimaliseren?

Code voorbeeld:

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)
De vraag is gesteld op 26/04/2020 om 10:00
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Alternatief idee: gebruik mapPartitions voor stap 1 en 3. Gebruik vervolgens een multiprocessing pool binnen elke werknemer om de items in de partitie parallel in kaart te brengen. Op deze manier kunt u alle cpus die aan een werker is toegewezen gebruiken zonder de configuratie te wijzigen (waarvan ik niet weet of het überhaupt mogelijk is).

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)
antwoordde op 13/05/2020 om 10:59
bron van user

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