abetlen / abetlen/llama-cpp-python
The new shared library causes conflicts if more than 1 variant of llama-cpp-python is imported
- Lenguaje dominante
- Python
- Estrellas
- 10.6k
- Forks
- 1.4k
- Merge medio
- 5 h 23 min
- PR fusionados (30 d)
- 5
Descripción
The `ctypes.CDLL` call under https://github.com/abetlen/llama-cpp-python/blob/7e20e346bd49cc8f0031eb053fe879a38c777b6f/llama_cpp/llama_cpp.py#L75 loads symbols in the global scope. In my project, it is possible to load 3 different versions of llama-cpp-python:
* CUDA
* CUDA + tensorcores (without `-DGGML_CUDA_FORCE_MMQ=ON`)
* CPU
Due to the shared library, when one of the libraries is already imported and the user switches to another one, undefined behavior happens, such as the CPU version having BLAS=1 in its logs.
Can this be prevented? I think that it may be impossible to work around this issue on my side. I have tried `importlib.reload` and it didn't work.
Guía de contribución
Línea de trabajo
El issue está en llama_cpp/llama_cpp.py, línea 75, donde ctypes.CDLL carga globalmente una biblioteca compartida. Examina el mecanismo de carga de bibliotecas y cómo se distinguen las distintas variantes de compilación (CUDA, CPU). Busca pruebas existentes o ejemplos de carga de múltiples bibliotecas. La solución probablemente implique aislar los handles de biblioteca por variante, posiblemente mediante el uso de flags de dlopen o un loader personalizado. Comprueba el sistema de compilación de llama.cpp para ver los flags de las variantes.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, python
- Área
- backend, build-system
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100