Конфликт между тензорным потоком и pyopenglPython

Программы на Python
Ответить
Anonymous
 Конфликт между тензорным потоком и pyopengl

Сообщение Anonymous »

Используя Python 3.13, я получаю ошибку сегментации с кодом, который раньше (с использованием Python 3.10, tensorflow-cpu 2.12, PyOpenGl 3.1.0 и pygame 2.5.0) работал нормально.
Теперь происходит сбой сегментации в том месте, где OpenGL фактически выполняет некоторую работу (при вызове glCallList), что это я думаю первая часть, где мы собственно и выполняем работу). Трассировка стека, предоставленная gdb, показывает:
#0 0x00007701f41d08e1 in llvm::raw_svector_ostream::write_impl(char const*, unsigned long) ()
from /usr/local/lib/python3.13/site-packages/tensorflow/python/platform/../../libtensorflow_framework.so.2
#1 0x00007701b9ed80f3 in llvm::raw_ostream::write(char const*, unsigned long) ()
from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#2 0x00007701b9ea7f08 in llvm::Twine::printOneChild(llvm::raw_ostream&, llvm::Twine::Child, llvm::Twine::NodeKind) const () from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#3 0x00007701b9ea7c27 in ?? () from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#4 0x00007701b9ea7a75 in llvm::Twine::str[abi:cxx11]() const ()
from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#5 0x00007701bcae6818 in ?? () from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#6 0x00007701ba218c2a in llvm::LLVMTargetMachine::initAsmInfo() ()
from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#7 0x00007701bca9471f in ?? () from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#8 0x00007701bca962a2 in ?? () from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#9 0x00007701bb95c156 in llvm::EngineBuilder::selectTarget(llvm::Triple const&, llvm::StringRef, llvm::StringRef, llvm::SmallVectorImpl const&) () from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#10 0x00007701bb95bc64 in llvm::EngineBuilder::selectTarget() ()
from /lib/x86_64-linux-gnu/libLLVM-15.so.1
#11 0x00007701c643795c in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#12 0x00007701c6433487 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#13 0x00007701c64ab946 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#14 0x00007701c649c7e8 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#15 0x00007701c6480ae8 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#16 0x00007701c60f2f86 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#17 0x00007701c5fe6fca in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#18 0x00007701c6014a05 in ?? () from /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
#19 0x00007703ce73af7a in ?? () from /lib/x86_64-linux-gnu/libffi.so.8
#20 0x00007703ce73a40e in ?? () from /lib/x86_64-linux-gnu/libffi.so.8
#21 0x00007703ce73ab0d in ffi_call () from /lib/x86_64-linux-gnu/libffi.so.8
#22 0x00007703ce75e86b in ?? ()
from /usr/local/lib/python3.13/lib-dynload/_ctypes.cpython-313-x86_64-linux-gnu.so
#23 0x00007703ce75c7a1 in ?? ()
from /usr/local/lib/python3.13/lib-dynload/_ctypes.cpython-313-x86_64-linux-gnu.so
#24 0x00007703d2541469 in ?? () from /usr/local/bin/../lib/libpython3.13.so.1.0

т.е. он дает сбой в общей библиотеке тензорного потока. Сегфолты исчезают, когда я удаляю импорт из тензорного потока из Python.
текущие версии:
pygame 2.6.1
PyOpenGL 3.1.10
tensorflow_cpu 2.20.0
python:3.13-slim-bookworm (basic docker)
libgl1-mesa-dri/oldstable,now 22.3.6-1+deb12u1 amd64 [installed,automatic]
libllvm15/oldstable,now 1:15.0.6-4+b1 amd64 [installed,automatic]

Я подозреваю, что между libllvm, opengl и tensorflow каким-то образом существует несоответствие версий. Так ли это и как это исправить?
Пример автономного кода, который выдает ошибку сегментации (код взят из https://www.tutorialspoint.com/pygame/p ... opengl.htm):
import tensorflow
import pygame

from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

verticies = (
(1, -1, -1),
(1, 1, -1),
(-1, 1, -1),
(-1, -1, -1),
(1, -1, 1),
(1, 1, 1),
(-1, -1, 1),
(-1, 1, 1)
)
edges = (
(0,1),
(0,3),
(0,4),
(2,1),
(2,3),
(2,7),
(6,3),
(6,4),
(6,7),
(5,1),
(5,4),
(5,7)
)
def Cube():
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(verticies[vertex])
glEnd()

def main():
pygame.init()
display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

#gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)

glTranslatef(0.0,0.0, -5)

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glRotatef(1, 3, 1, 1)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
Cube()
pygame.display.flip()
pygame.time.wait(10)

main()


Подробнее здесь: https://stackoverflow.com/questions/798 ... d-pyopengl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»