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

862
Visualizações
Keras + Tensorflow y Multiprocesamiento en Python

Estoy usando Keras con Tensorflow como backend.

Estoy tratando de guardar un modelo en mi proceso principal y luego cargar/ejecutar (es decir, llamar a model.predict ) dentro de otro proceso.

Actualmente solo estoy probando el enfoque ingenuo de los documentos para guardar/cargar el modelo: https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model .
Así que básicamente:

  1. model.save() en el proceso principal
  2. model = load_model() en proceso hijo
  3. model.predict() en proceso hijo

Sin embargo, simplemente cuelga de la llamada load_model .

Buscando, descubrí esta respuesta potencialmente relacionada que sugiere que Keras solo se puede utilizar en un proceso: usar multiprocesamiento con theano, pero no estoy seguro de si esto es cierto (parece que no puedo encontrar mucho sobre esto).

¿Hay alguna manera de lograr mi objetivo? Se agradece mucho una descripción de alto nivel o un ejemplo breve.

Nota: Intenté enfoques en la línea de pasar un gráfico al proceso, pero fallé porque parece que los gráficos de tensorflow no son seleccionables (publicación SO relacionada para eso aquí: Tensorflow: Passing a session to a python multiprocess ). Si de hecho hay una manera de pasar el gráfico/modelo de tensorflow al proceso secundario, entonces también estoy abierto a eso.

¡Gracias!

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Según mi experiencia, el problema radica en cargar Keras en un proceso y luego generar un nuevo proceso cuando keras se ha cargado en su entorno principal. Pero para algunas aplicaciones (como, por ejemplo, entrenar una mezcla de modelos de Keras ), simplemente es mejor tener todas estas cosas en un solo proceso. Entonces, lo que aconsejo es el siguiente enfoque (un poco engorroso, pero funciona para mí):

  1. NO CARGUE KERAS A SU ENTORNO PRINCIPAL . Si desea cargar Keras / Theano / TensorFlow, hágalo solo en el entorno de funciones. Por ejemplo , no hagas esto:

     import keras def training_function(...): ...

    pero haz lo siguiente:

     def training_function(...): import keras ...
  2. Ejecute el trabajo conectado con cada modelo en un proceso separado: por lo general, creo trabajadores que realizan el trabajo (como, por ejemplo, capacitación, ajuste, calificación) y los ejecuto en procesos separados. Lo bueno de esto es que toda la memoria utilizada por este proceso se libera por completo cuando finaliza el proceso. Esto lo ayuda con muchos problemas de memoria que generalmente encuentra cuando usa multiprocesamiento o incluso ejecuta múltiples modelos en un solo proceso. Entonces esto se ve, por ejemplo, así:

     def _training_worker(train_params): import keras model = obtain_model(train_params) model.fit(train_params) send_message_to_main_process(...) def train_new_model(train_params): training_process = multiprocessing.Process(target=_training_worker, args = train_params) training_process.start() get_message_from_training_process(...) training_process.join()

Un enfoque diferente es simplemente preparar diferentes scripts para diferentes acciones de modelos. Pero esto puede causar errores de memoria, especialmente cuando sus modelos consumen memoria. TENGA EN CUENTA que por esta razón es mejor hacer su ejecución estrictamente secuencial.

over 4 years ago · Santiago Trujillo Relatório

0

Creé un ejemplo simple para mostrar cómo ejecutar el modelo Keras en múltiples procesos con múltiples gpus. Espero que esta muestra pueda ayudarte. https://github.com/yuanyuanli85/Keras-Multiple-Process-Predicción

over 4 years ago · Santiago Trujillo Relatório

0

Creé un decorador que arregló mi código.

 from multiprocessing import Pipe, Process def child_process(func): """Makes the function run as a separate process.""" def wrapper(*args, **kwargs): def worker(conn, func, args, kwargs): conn.send(func(*args, **kwargs)) conn.close() parent_conn, child_conn = Pipe() p = Process(target=worker, args=(child_conn, func, args, kwargs)) p.start() ret = parent_conn.recv() p.join() return ret return wrapper @child_process def keras_stuff(): """ Keras stuff here"""
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