Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

302
Visualizações
Ejecutar dos entrenamientos de Tensorflow en paralelo usando joblib y dask

Tengo el siguiente código que ejecuta dos capacitaciones de TensorFlow en paralelo con trabajadores de Dask implementados en contenedores de Docker.

Necesito lanzar dos procesos, usando el mismo cliente dask, donde cada uno entrenará sus respectivos modelos con N trabajadores.

Para ello hago lo siguiente:

  • Uso joblib.delayed para generar los dos procesos.
  • Dentro de cada proceso ejecuto with joblib.parallel_backend('dask'): para ejecutar la lógica de ajuste/entrenamiento. Cada proceso de formación desencadena N dask trabajadores.

El problema es que no sé si todo el proceso es seguro para subprocesos, ¿hay algún elemento de concurrencia que me falte?

 # First, submit the function twice using joblib delay delayed_funcs = [joblib.delayed(train)(sub_task) for sub_task in [123, 456]] parallel_pool = joblib.Parallel(n_jobs=2) parallel_pool(delayed_funcs) # Second, submit each training process def train(sub_task): global client if client is None: print('connecting') client = Client() data = some_data_to_train # Third, process the training itself with N workers with joblib.parallel_backend('dask'): X = data[columns] y = data[label] niceties = dict(verbose=False) model = KerasClassifier(build_fn=build_layers, loss=tf.keras.losses.MeanSquaredError(), **niceties) model.fit(X, y, epochs=500, verbose = 0)
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Esto es pura especulación, pero un posible problema de simultaneidad se debe a que if client is None: parte, donde dos procesos podrían correr para crear un Client .

Si esto se resuelve (por ejemplo, mediante la creación explícita de un cliente por adelantado), entonces el programador de dask se basará en el tiempo de envío para priorizar la tarea (a menos que priority esté claramente asignada) y también en la estructura del gráfico (DAG), hay más detalles disponibles en docs .

over 4 years ago · Santiago Trujillo Relatório

0

La pregunta, tal como se da, podría marcarse fácilmente como "poco clara" para SO. Un par de notas:

  • global client : hace que el objeto del cliente esté disponible fuera de la función. Pero la función se ejecuta desde otro proceso, no afecta el otro proceso al hacer que el cliente
  • if client is None : este es un error de nombre, su código en realidad no se ejecuta como está escrito
  • client = Client() : crea un nuevo clúster en cada subproceso, cada uno asumiendo el total de recursos disponibles, sobresuscribiendo esos recursos.
  • dask sabe si se ha creado algún cliente en el proceso actual, pero eso no te ayuda aquí

Debe preguntarse: ¿por qué está creando procesos para los dos ajustes? ¿Por qué no dejar que Dask descubra su paralelismo, que es para lo que está destinado?

--

-EDITAR-

para responder a la forma de la pregunta formulada en un comentario.

Mi pregunta es si usar la misma variable de cliente en estos dos procesos paralelos crea un problema.

No, las dos variables de client no están relacionadas entre sí. Es posible que vea un mensaje de advertencia sobre la imposibilidad de vincularse a un puerto predeterminado, que puede ignorar con seguridad. Sin embargo, no lo hagas global ya que esto es innecesario y hace que lo que estás haciendo sea menos claro.

--

Creo que debo responder la pregunta tal como está redactada en su comentario, que aconsejo agregar a la pregunta principal

Necesito lanzar dos procesos, usando el mismo cliente dask, donde cada uno entrenará sus respectivos modelos con N trabajadores.

Tienes las siguientes opciones:

  • cree un cliente con una dirección conocida específica dentro de su programa o de antemano, luego conéctese a él
  • cree un cliente predeterminado Client() y obtenga su dirección (por ejemplo, client._scheduler_identity['address'] ) y conéctese a ese
  • escriba un archivo de información del programador con client.write_scheduler_file y utilícelo

Te conectarás en la función con

 client = Client(address)

o

 client = Client(scheduler_file=the_file_you_wrote)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda