Alteração da configuração em tempo de execução para o PySpark

votos
2

Eu estava a tentar implementar um índice Faiss treinado para o PySpark e fazer uma pesquisa distribuída. Então todo o processo inclui:

  1. Pré-processo
  2. Carregar Índice de Faiss(~15G) e fazer Pesquisa de Faiss
  3. Pós-processar e escrever para o HDFS

Eu defino CPUs por tarefa como 10 (spark.task.cpus=10) a fim de fazer uma pesquisa multi-tarefa. Mas o passo 1 e o passo 3 só podem utilizar 1 CPU por tarefa. Para utilizar todas as CPUs que eu quero definir spark.task.cpus=1antes dos passos 1 e 3. Eu tentei definir o método, RuntimeConfigmas parece que isso fez meu programa ficar preso. Algum conselho sobre como alterar a configuração em tempo de execução ou como otimizar este problema?

Exemplo de código:

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)
Publicado 26/04/2020 em 10:00
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Idéia alternativa: uso mapPartitions para os passos 1 e 3. Em seguida, use um pool de multiprocessamento dentro de cada trabalhador para mapear os itens na partição em paralelo. Desta forma, você pode usar todos os cpus atribuídos a um trabalhador sem alterar a configuração (que eu não sei se é de todo possível).

Pseudocódigo:

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)
Respondeu 13/05/2020 em 10:59
fonte usuário

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