Modificarea configurației la runtime pentru PySpark

voturi
2

Încercam să implementez un index Faiss instruit în PySpark și să fac o căutare distribuită. Deci întregul proces include:

  1. Pre-proces
  2. Încărcați Faiss Index (~ 15G) și faceți Faiss Search
  3. Post-proces și scrieți la HDFS

Am setat procesoare pe 10 ca sarcină ( spark.task.cpus=10 ) pentru a face căutări cu mai multe fire. Dar pasul 1 și pasul 3 pot utiliza doar 1 procesor per sarcină. Pentru a utiliza toate procesoarele pe care vreau să le setez spark.task.cpus=1 înainte de pasii 1 și 3. Am încercat setarea metodei RuntimeConfig dar se pare că mi-a blocat programul. Aveți sfaturi despre cum puteți schimba configurația la runtime sau cum să optimizați această problemă?

Exemplu de cod:

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)
Întrebat 26/04/2020 la 10:00
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Idee alternativă: utilizare mapPartitions pentru pașii 1 și 3. Apoi, utilizați un grup de multiprocesare în cadrul fiecărui lucrător pentru a mapa paralel elementele din partiție. În acest fel, puteți utiliza toate cpus atribuite unui lucrător fără a schimba configurația (ceea ce nu știu dacă este deloc posibil).

Pseudo cod:

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)
Publicat 13/05/2020 la 10:59
sursa de către utilizator

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