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.

Especificar el conjunto de instrucciones exactas de la CPU con ruedas Python cibonizadas.

Tengo un paquete de Python con una extensión nativa compilada por Cython. Debido a algunas necesidades de rendimiento, la compilación se hace con las banderas -march=native, -mtune=native. Esto básicamente permite al compilador utilizar cualquier extensión ISA disponible.

Además, tenemos una versión pura de Python sin cythonizar de este paquete. Debería utilizarse en entornos que sean menos sensibles al rendimiento.

Por lo tanto, en total tenemos dos versiones publicadas:

  • Rueda de Cythonizada construida para una plataforma muy específica.
  • Rueda de Python puro.

Algunos otros paquetes dependen de este paquete, y algunas máquinas son un poco diferentes a la máquina en la que se compiló el paquete. Debido a que utilizamos -march=native, obtenemos SIGILL, ya que falta alguna extensión ISA en el servidor.

Por lo tanto, en esencia, me gustaría hacer que pip ignore la rueda nativa si la CPU del host no es compatible con la rueda.

La rueda nativa sí tiene el nombre de implementación cp37 y de plataforma, pero no veo una forma de definir requisitos de ISA más granulares aquí. Siempre puedo usar las banderas --implementation en pip, pero me pregunto si hay una mejor manera para que pip diferencie entre diferentes ISAs.

Gracias,

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en Python y Cython, hay algunas opciones a considerar para hacer que pip ignore las ruedas nativas si la CPU del host no es compatible con la rueda.

    En primer lugar, puedes intentar agregar los requisitos o restricciones específicos de ISA al archivo setup.py del paquete Cythonizado. Aquí, puedes agregar las extensiones mínimas o requeridas que el paquete necesita para ser compatible con la CPU del host. De esta manera, cuando construyas la rueda con Cython, pip puede determinar la compatibilidad basándose en las restricciones que establezcas en setup.py.

    Otra opción es crear una rueda separada para cada ISA específica, por ejemplo una para SSE, otra para AVX y otra para AVX2, y luego especificar la versión específica requerida por la CPU del host durante la instalación. Esto se puede hacer utilizando la bandera --platform en pip durante la instalación para especificar el nombre de la plataforma y la rueda específica. De esta manera, pip solo instalará la rueda compatible con la CPU del host específica.

    Por último, puedes considerar el uso de entornos virtuales para asegurarte de que se utilicen los paquetes y versiones correctos en cada máquina con una configuración consistente. Esto puede ser útil en casos en los que diferentes máquinas tienen diferentes requisitos o restricciones. Al utilizar entornos virtuales, puedes asegurarte de que el paquete correcto se instale en cada entorno sin el riesgo de conflictos con otros paquetes o dependencias.

Comments are closed.