Zmiana konfiguracji w trybie runtime dla PySparku

głosy
2

Próbowałem wdrożyć przeszkolony indeks Faissa do PySparku i przeprowadzić rozproszone wyszukiwanie. Więc cały proces obejmuje:

  1. Proces wstępny
  2. Załaduj indeks Faissa(~15G) i zrób wyszukiwanie Faissa
  3. Post-process and write to HDFS

Ustawiam procesory na zadanie jako 10 (spark.task.cpus=10) w celu wykonania wyszukiwania wielowątkowego. Ale krok 1 i krok 3 mogą wykorzystać tylko 1 procesor na zadanie. W celu wykorzystania wszystkich procesorów chcę ustawić spark.task.cpus=1przed krokami 1 i 3. Próbowałem ustawić metodę, RuntimeConfigale wygląda na to, że mój program utknął. Jakieś porady, jak zmienić konfigurację w trybie runtime lub jak zoptymalizować ten problem?

Przykład kodu:

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)
Utwórz 26/04/2020 o 10:00
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Alternatywny pomysł: użyć mapPartitions dla kroków 1 i 3. Następnie użyj puli wieloprocesorowej w obrębie każdego pracownika, aby mapować elementy w partycji równolegle. W ten sposób można wykorzystać cały cpus przypisany do pracownika bez zmiany konfiguracji (czego nie wiem czy jest to w ogóle możliwe).

Pseudokod:

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)
Odpowiedział 13/05/2020 o 10:59
źródło użytkownik

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