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.

La forma más “Pythonic” de tener un paquete que instale dependencias en función de la presencia o fabricante de la GPU es la siguiente:

Actualmente estoy desarrollando una biblioteca de Aprendizaje Automático que permite a los usuarios escribir código independiente de CPU y GPU para lograr ciertas tareas. Para ejecutar el código habilitado para GPU, mi paquete tiene dependencias específicas que solo son compatibles con GPU de NVIDIA habilitados para CUDA. Por lo tanto, me gustaría que mi paquete solo instale esas dependencias cuando un usuario instale mi paquete en un dispositivo con GPU habilitado para CUDA. Investigué cómo hacer esto y al principio parecía que la respuesta estaba en PEP 508. Sin embargo, los “marcadores de entorno” descritos en este PEP no incluyen la presencia de una GPU, y mucho menos el fabricante y/o controladores de esa GPU.

Por lo tanto, estoy buscando la solución más “Pythonic” para instalar ciertas dependencias en función de la presencia de una GPU de NVIDIA habilitada para CUDA (si es mucho más fácil simplemente comprobar la presencia de una GPU de NVIDIA sin verificar el estado de CUDA, puedo hacerlo como solución por el momento, pero definitivamente preferiría verificar el estado habilitado para CUDA).

Entiendo que setup.py puede ejecutar código Python arbitrario, por lo que técnicamente puedo resolver este problema con código dentro de ese archivo que lo haga por mí. Sin embargo, tengo entendido que la comunidad de Python se está alejando de la dependencia de setup.py debido a los riesgos inherentes asociados con la ejecución de código arbitrario durante la instalación del paquete. Por lo tanto, me gustaría cumplir con las preferencias de la comunidad y que mi solución utilice pyproject.toml si es posible, aunque también estaría dispuesto a usar setup.cfg si se considera más apropiado (para ser honesto, no siento que comprenda completamente la distinción entre estos dos archivos y cuál es más apropiado para qué propósito, aunque según el video de mCoding que vi para configurar mis pruebas parece que setup.cfg se utiliza más para metadatos del paquete).

Aunque lo que estoy buscando hacer no se detalla expresamente en PEP 508, parece que va en el mismo espíritu, por lo que me sorprendería si no hubiera una forma canónica de hacerlo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en python, pip, setuptools y pyproject.toml, sugeriría utilizar el archivo pyproject.toml para especificar la dependencia de la GPU NVIDIA habilitada para CUDA. Esto se puede lograr utilizando la sección build-system.requires en el archivo pyproject.toml. Puedes especificar las dependencias necesarias para la instalación en diferentes plataformas, incluyendo cuda para GPUs NVIDIA habilitadas para CUDA.

    Alternativamente, puedes utilizar setup.cfg para especificar las dependencias condicionales. Puedes definir diferentes opciones, como with_cuda, y utilizar setup_requires para instalar paquetes adicionales necesarios para que se cumpla la condición.

    En cualquier caso, debes evitar el uso de ejecución de código arbitrario durante la configuración del paquete moviéndote lejos de setup.py. En su lugar, especifica las dependencias y los requisitos del entorno en uno de los archivos recomendados, como pyproject.toml o setup.cfg.

Comments are closed.