Changement de configuration à l'exécution pour PySpark

voix
2

J'essayais de déployer un index Faiss formé à PySpark et de faire une recherche distribuée. Donc, tout le processus comprend :

  1. Pré-processus
  2. Charger l'index Faiss (~15G) et faire une recherche Faiss
  3. Post-traiter et écrire à HDFS

Je fixe à 10 (spark.task.cpus=10) le nombre d'unités centrales par tâche afin de pouvoir effectuer une recherche multi-thread. Mais l'étape 1 et l'étape 3 ne peuvent utiliser qu'une seule unité centrale par tâche. Afin d'utiliser toutes les unités centrales que je veux définir spark.task.cpus=1avant les étapes 1 et 3. J'ai essayé la méthode de configuration RuntimeConfigmais il semble que cela ait bloqué mon programme. Des conseils sur la façon de modifier la configuration au moment de l'exécution ou d'optimiser ce problème ?

Exemple de code :

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)
Créé 26/04/2020 à 10:00
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Idée alternative : utilisation mapPartitions pour les étapes 1 et 3. Ensuite, utilisez un pool de multitraitement au sein de chaque travailleur pour mettre en parallèle les éléments de la partition. De cette façon, vous pouvez utiliser tous lespus assignés à un travailleur sans changer de configuration (ce que je ne sais pas si c'est possible).

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)
Créé 13/05/2020 à 10:59
source utilisateur

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