PNL | Etiquetado distribuido con Execnet – Parte 1

¿Qué es Execnet?

  • Execnet es una biblioteca de ejecución distribuida para Python.
  • Permite crear pasarelas y canales para la ejecución remota de código.
  • Una puerta de enlace es una conexión desde el proceso de llamada a un entorno remoto.
  • El entorno remoto puede ser un subproceso local o una conexión SSH a un Node remoto.
  • Un canal se crea a partir de una puerta de enlace y maneja la comunicación entre el creador del canal y el código remoto.
  • De esta manera, execnet es una especie de interfaz de paso de mensajes (MPI) , donde la puerta de enlace crea la conexión y el canal se utiliza para enviar mensajes de ida y vuelta.

Dado que muchos procesos NLTK utilizan el 100 % de la CPU durante el cálculo, execnet es una forma ideal de distribuir ese cálculo para maximizar el uso de recursos. Se puede crear una puerta de enlace por núcleo de CPU, y no importa si los núcleos están en la computadora local o distribuidos en máquinas remotas. En muchas situaciones, solo se requiere tener los objetos y datos entrenados en una sola máquina y puede enviar los objetos y datos a los Nodes remotos según sea necesario.
Instalar execnet:
debería ser tan simple como sudo pip install execnet o sudo easy_install execnet . La versión actual de execnet, a partir de este escrito, es 1.2. La página de inicio de execnet, que tiene documentación y ejemplos de la API, se encuentra en http://codespeak.net/execnet/.

¿Cómo funciona?
Pickle debe importarse para serializar (transmitir) el etiquetador. Execnet no sabe de forma nativa cómo lidiar con objetos complejos, como un etiquetador de parte del discurso, por lo que el etiquetador debe volcarse en una string usando pickle.dumps().
Se usa el etiquetador predeterminado que usa la función nltk.tag.pos_tag() , pero se puede usar cualquier etiquetador de parte del discurso entrenado previamente siempre que implemente la interfaz TaggerI . Execnet se puede iniciar creando una puerta de enlace con execnet.makegateway() después de tener un etiquetador serializado.
La puerta de enlace predeterminada crea un subproceso de Python y remote_exec()Se puede llamar a la función del módulo remote_tag para crear un canal. Con un canal abierto, se puede enviar el etiquetador serializado, seguido de la primera oración tokenizada del corpus del banco de árboles.
Visualmente, el proceso de comunicación se ve así

Ahora, llamando a channel.receive() , devolverá una oración etiquetada que es equivalente a la primera oración etiquetada en el corpus del banco de árboles, por lo que se sabe que el etiquetado funcionó. Finalmente, se finaliza al salir de la puerta de enlace, lo que cierra el canal y elimina el subproceso.

import execnet, remote_tag, nltk.tag, nltk.data
from nltk.corpus import treebank
import pickle
  
pickled_tagger = pickle.dumps(nltk.data.load(nltk.tag._POS_TAGGER))
gw = execnet.makegateway()
  
channel = gw.remote_exec(remote_tag)
channel.send(pickled_tagger)
channel.send(treebank.sents()[0])
  
tagged_sentence = channel.receive()
  
# will give output
tagged_sentence == treebank.tagged_sents()[0]
  
gw.exit()

Producción :

True

Publicación traducida automáticamente

Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *