es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Heroku no detecta OpenVino al intentar implementar.

Tengo un modelo de OpenVino que estoy tratando de implementar en Heroku. La aplicación se ejecuta en la máquina (ya que OpenVino está instalado en la máquina en el directorio /opt/intel). Incluso después de instalar exitosamente OpenVino con pip, al hacer la importación sigo recibiendo el mensaje de error:

ImportError: dlopen(/opt/intel/openvino_2021/python/python3.9/openvino/inference_engine/ie_api.so, 2): Símbolo no encontrado: _PyCMethod_New
  Referencia: /opt/intel/openvino_2021/python/python3.9/openvino/inference_engine/ie_api.so
  Se esperaba en: espacio de nombres plano

cuando intento importar OpenVino en el script. Por esa razón, decidí no utilizar pip e instalar OpenVino desde el origen en la máquina. El script se puede ejecutar correctamente con OpenVino en la máquina, pero la pregunta es cómo implementar esto en Heroku sin incluir OpenVino en el archivo requirements.txt generado con pip freeze.

Especificar OpenVino en el requirements.txt de Heroku no funciona (no es sencillo instalarlo con pip como se explicó anteriormente), así que intenté mover la carpeta de OpenVino esperada dentro de la carpeta venv. En la carpeta del proyecto, copié la carpeta de OpenVino en venv > lib > python3.9 > site-packages. Sin embargo, una vez implementado en Heroku, eso parece no tener efecto y sigo obteniendo el siguiente error en los registros de Heroku:

2022-01-06T19:39:59.115102+00:00 app[web.2]: File "./main.py", line 26, in <module>
2022-01-06T19:39:59.115206+00:00 app[web.2]: from openvino.inference_engine import IECore, IENetwork
2022-01-06T19:39:59.115219+00:00 app[web.2]: File "/app/.heroku/python/lib/python3.9/site-packages/openvino/inference_engine/__init__.py", line 30, in <module>
2022-01-06T19:39:59.115309+00:00 app[web.2]: from .ie_api import *
2022-01-06T19:39:59.115333+00:00 app[web.2]: ImportError: libpython3.9.so.1.0: no se puede abrir el archivo de objeto compartido: No such file or directory

Por lo tanto, la carpeta esperada no está allí. Por supuesto, para Heroku también es una estructura de directorio diferente:

/app/.heroku/python/lib/python3.9/site-packages/

En lugar de:

/venv/lib/python3.9/site-packages

Sin embargo, necesito obtener OpenVino en ese directorio site-packages para la aplicación de Heroku.

¿Cómo puedo agregar manualmente la carpeta de OpenVino esperada a /app/.heroku/python/lib/python3.9/site-packages? Si eso no es posible, ¿cómo puedo editar el buildpack para instalar OpenVino en la aplicación de Heroku?

Cualquier ayuda sería muy apreciada.

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según los mensajes de error, parece que la aplicación de Heroku no puede ubicar las bibliotecas compartidas necesarias para OpenVino.

    Una posible solución es incluir las bibliotecas compartidas necesarias como parte del paquete de aplicación que despliegues en Heroku. Puedes copiar las bibliotecas requeridas a un subdirectorio de tu aplicación, por ejemplo “lib”, y luego modificar la variable de entorno LD_LIBRARY_PATH para incluir este directorio.

    Para hacer esto, puedes agregar un script a tu aplicación de Heroku que se ejecute antes del script principal de Python, por ejemplo:

    #!/bin/sh
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/lib
    python main.py
    

    En este script, primero agregamos el directorio “lib” a la variable de entorno LD_LIBRARY_PATH y luego ejecutamos el script principal de Python. Puedes guardar este archivo como “run.sh” en el directorio principal de tu aplicación de Heroku.

    Para copiar los archivos necesarios de OpenVino al directorio “lib”, puedes modificar tu proceso de construcción de la siguiente manera:

    1. Construye OpenVino desde el código fuente en tu máquina local.
    2. Crea un nuevo directorio en el directorio principal de tu aplicación de Heroku, por ejemplo “lib”.
    3. Copia los archivos necesarios de OpenVino a este directorio. Los archivos requeridos deben incluir el subdirectorio “openvino/inference_engine”, así como cualquier biblioteca compartida necesaria. Es posible que debas experimentar con qué archivos son necesarios; si tienes dudas, puedes copiar todo el directorio “openvino” al directorio “lib” y ver si eso funciona.
    4. Modifica tu proceso de implementación en Heroku para incluir el directorio “lib” en el paquete de implementación. Puedes hacer esto agregando las siguientes líneas a tu “Procfile”:
    lib: cp -r lib/* /app/lib
    

    Esta línea copia el directorio “lib” al directorio “lib” en la aplicación de Heroku implementada. Puedes agregar esta línea en cualquier lugar de tu Procfile; se ejecutará antes de que se inicie el proceso principal de Python.

    Con estos cambios, al implementar tu aplicación en Heroku, los archivos y bibliotecas compartidas de OpenVino se copiarán al directorio “lib” en la aplicación implementada, y el script run.sh se asegurará de que las bibliotecas compartidas necesarias se incluyan en la variable de entorno LD_LIBRARY_PATH al ejecutar el script principal de Python.

Comments are closed.