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!
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:
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:
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.