Изменение конфигурации во время выполнения для PySpark

голоса
2

Я пытался развернуть обученный индекс Faiss в PySpark и выполнить распределенный поиск. Так что весь процесс включает в себя:

  1. Препроцесс
  2. Загрузить Индекс Фэйса(~15G) и выполнить Поиск Фэйса
  3. постобработку и запись на HDFS

Для выполнения многопоточного поиска я ставлю в качестве 10 (spark.task.cpus=10) процессоров для каждой задачи. Но на шагах 1 и 3 можно использовать только 1 процессор на задачу. Для того, чтобы использовать все процессоры, я хочу установить spark.task.cpus=1перед шагами 1 и 3. Я пробовал установить метод, RuntimeConfigно похоже, что это заставило мою программу застрять. Есть советы, как изменить конфигурацию во время выполнения или как оптимизировать эту проблему?

Пример кода:

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)
Задан 26/04/2020 в 10:00
источник пользователем
На других языках...                            


1 ответов

голоса
0

Альтернативная идея: использовать mapPartitions для шагов 1 и 3. Затем используйте многопроцессорный пул внутри каждого рабочего для параллельного отображения элементов в разделе. Таким образом, можно использовать все cpus, назначенные рабочему, без изменения конфигурации (чего я не знаю, если это вообще возможно).

Псевдокод:

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)
Ответил 13/05/2020 в 10:59
источник пользователем

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