python3Packages.cuda-bindings: fix lib lookups (#512828)
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
cudaPackages,
|
||||
replaceVars,
|
||||
addDriverRunpath,
|
||||
|
||||
# build-system
|
||||
@@ -15,10 +16,9 @@
|
||||
symlinkJoin,
|
||||
|
||||
# dependencies
|
||||
cuda-pathfinder,
|
||||
numpy,
|
||||
|
||||
# tests
|
||||
numpy,
|
||||
pytestCheckHook,
|
||||
|
||||
# passthru
|
||||
@@ -38,6 +38,21 @@ buildPythonPackage (finalAttrs: {
|
||||
hash = "sha256-uRv27h2b6wXC8oOf5k2KxZ0bUFNvNu6XO05FBbJcU1k=";
|
||||
};
|
||||
|
||||
# Apply patch relative to cuda_bindings
|
||||
patchFlags = [ "-p2" ];
|
||||
|
||||
patches = [
|
||||
(replaceVars ./patch-nvidia-libs-paths.patch {
|
||||
libcudart = lib.getLib cudaPackages.cuda_cudart;
|
||||
libcufile = lib.getLib cudaPackages.libcufile;
|
||||
libnvfatbin = lib.getLib cudaPackages.libnvfatbin;
|
||||
libnvjitlink = lib.getLib cudaPackages.libnvjitlink;
|
||||
libnvml = addDriverRunpath.driverLink;
|
||||
libnvrtc = lib.getLib cudaPackages.cuda_nvrtc;
|
||||
libnvvm = "${cudaPackages.cuda_nvcc}/nvvm";
|
||||
})
|
||||
];
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/cuda_bindings";
|
||||
|
||||
postPatch =
|
||||
@@ -90,15 +105,25 @@ buildPythonPackage (finalAttrs: {
|
||||
cudaPackages.libcufile # cufile.h
|
||||
];
|
||||
|
||||
pythonRemoveDeps = [
|
||||
# We circumvent cuda_pathfinder to localize nvidia libs with patches
|
||||
"cuda-pathfinder"
|
||||
];
|
||||
dependencies = [
|
||||
cuda-pathfinder
|
||||
# Not explicitly listed as a dependency, but is required at import time
|
||||
numpy
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"cuda"
|
||||
"cuda.cuda"
|
||||
"cuda.cudart"
|
||||
"cuda.nvrtc"
|
||||
"cuda.bindings.cufile"
|
||||
"cuda.bindings.driver"
|
||||
"cuda.bindings.nvfatbin"
|
||||
"cuda.bindings.nvjitlink"
|
||||
"cuda.bindings.nvml"
|
||||
"cuda.bindings.nvrtc"
|
||||
"cuda.bindings.nvvm"
|
||||
"cuda.bindings.runtime"
|
||||
];
|
||||
|
||||
preCheck = ''
|
||||
@@ -106,7 +131,6 @@ buildPythonPackage (finalAttrs: {
|
||||
'';
|
||||
|
||||
nativeCheckInputs = [
|
||||
numpy
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
@@ -123,6 +147,24 @@ buildPythonPackage (finalAttrs: {
|
||||
"tests/test_nvjitlink.py"
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
# sysfs cpu topology is not available in the sandbox, causing:
|
||||
# cuda.bindings.nvml.UnknownError: Unknown Error
|
||||
# hwloc/linux: failed to find sysfs cpu topology directory, aborting linux discovery.
|
||||
"test_device_get_cpu_affinity_within_scope"
|
||||
"test_device_get_memory_affinity"
|
||||
|
||||
# Requires the nvidia_fs kernel module (GPUDirect Storage), causing:
|
||||
# cuda.bindings.cufile.cuFileError: NVFS_SETUP_ERROR (5033): NVFS driver initialization error
|
||||
"test_buf_register_already_registered"
|
||||
"test_buf_register_host_memory"
|
||||
"test_buf_register_invalid_flags"
|
||||
"test_buf_register_large_buffer"
|
||||
"test_buf_register_multiple_buffers"
|
||||
"test_buf_register_simple"
|
||||
"test_driver_open"
|
||||
];
|
||||
|
||||
# Tests need access to a GPU
|
||||
doCheck = false;
|
||||
passthru.gpuCheck = cuda-bindings.overridePythonAttrs {
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
diff --git a/cuda_bindings/cuda/bindings/_bindings/cynvrtc.pyx.in b/cuda_bindings/cuda/bindings/_bindings/cynvrtc.pyx.in
|
||||
index f684be6870..9437de642b 100644
|
||||
--- a/cuda_bindings/cuda/bindings/_bindings/cynvrtc.pyx.in
|
||||
+++ b/cuda_bindings/cuda/bindings/_bindings/cynvrtc.pyx.in
|
||||
@@ -8,7 +8,7 @@ cimport cuda.bindings._lib.windll as windll
|
||||
{{else}}
|
||||
cimport cuda.bindings._lib.dlfcn as dlfcn
|
||||
{{endif}}
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
from libc.stdint cimport intptr_t, uintptr_t
|
||||
import threading
|
||||
|
||||
@@ -47,7 +47,7 @@ cdef int _cuPythonInit() except -1 nogil:
|
||||
# Load library
|
||||
with gil, __symbol_lock:
|
||||
{{if 'Windows' == platform.system()}}
|
||||
- handle = load_nvidia_dynamic_lib("nvrtc")._handle_uint
|
||||
+ handle = CDLL("@libnvrtc@/lib/libnvrtc.so")._handle
|
||||
|
||||
# Load function
|
||||
{{if 'nvrtcGetErrorString' in found_functions}}
|
||||
@@ -156,7 +156,7 @@ cdef int _cuPythonInit() except -1 nogil:
|
||||
{{endif}}
|
||||
|
||||
{{else}}
|
||||
- handle = <void*><uintptr_t>(load_nvidia_dynamic_lib("nvrtc")._handle_uint)
|
||||
+ handle = <void*><uintptr_t>(CDLL("@libnvrtc@/lib/libnvrtc.so")._handle)
|
||||
|
||||
# Load function
|
||||
{{if 'nvrtcGetErrorString' in found_functions}}
|
||||
diff --git a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx b/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx
|
||||
index 78ea77b283..0b875a6cd3 100644
|
||||
--- a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx
|
||||
+++ b/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx
|
||||
@@ -9,7 +9,7 @@ import threading
|
||||
|
||||
from .utils import FunctionNotFoundError, NotSupportedError
|
||||
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
|
||||
import cython
|
||||
|
||||
@@ -95,7 +95,7 @@ cdef void* __cuFileSetParameterString = NULL
|
||||
|
||||
|
||||
cdef void* load_library() except* with gil:
|
||||
- cdef uintptr_t handle = load_nvidia_dynamic_lib("cufile")._handle_uint
|
||||
+ cdef uintptr_t handle = CDLL("@libcufile@/lib/libcufile.so")._handle
|
||||
return <void*>handle
|
||||
|
||||
|
||||
diff --git a/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx
|
||||
index f5a9bbd218..8271f7aa20 100644
|
||||
--- a/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx
|
||||
+++ b/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx
|
||||
@@ -9,7 +9,7 @@ from libc.stdint cimport intptr_t, uintptr_t
|
||||
import threading
|
||||
from .utils import FunctionNotFoundError, NotSupportedError
|
||||
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -73,7 +73,7 @@ cdef void* __nvFatbinAddTileIR = NULL
|
||||
|
||||
|
||||
cdef void* load_library() except* with gil:
|
||||
- cdef uintptr_t handle = load_nvidia_dynamic_lib("nvfatbin")._handle_uint
|
||||
+ cdef uintptr_t handle = CDLL("@libnvfatbin@/lib/libnvfatbin.so")._handle
|
||||
return <void*>handle
|
||||
|
||||
|
||||
diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx
|
||||
index d676aac372..ed3c000566 100644
|
||||
--- a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx
|
||||
+++ b/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx
|
||||
@@ -9,7 +9,7 @@ from libc.stdint cimport intptr_t, uintptr_t
|
||||
import threading
|
||||
from .utils import FunctionNotFoundError, NotSupportedError
|
||||
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -76,7 +76,7 @@ cdef void* __nvJitLinkVersion = NULL
|
||||
|
||||
|
||||
cdef void* load_library() except* with gil:
|
||||
- cdef uintptr_t handle = load_nvidia_dynamic_lib("nvJitLink")._handle_uint
|
||||
+ cdef uintptr_t handle = CDLL("@libnvjitlink@/lib/libnvJitLink.so")._handle
|
||||
return <void*>handle
|
||||
|
||||
|
||||
diff --git a/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx
|
||||
index 28f0919423..852f75e46d 100644
|
||||
--- a/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx
|
||||
+++ b/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx
|
||||
@@ -10,7 +10,7 @@ import threading
|
||||
|
||||
from .utils import FunctionNotFoundError, NotSupportedError
|
||||
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -406,7 +406,7 @@ cdef void* __nvmlDeviceSetRusdSettings_v1 = NULL
|
||||
|
||||
|
||||
cdef void* load_library() except* with gil:
|
||||
- cdef uintptr_t handle = load_nvidia_dynamic_lib("nvml")._handle_uint
|
||||
+ cdef uintptr_t handle = CDLL("@libnvml@/lib/libnvidia-ml.so")._handle
|
||||
return <void*>handle
|
||||
|
||||
|
||||
diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx
|
||||
index 8a84834a9a..a3ced66807 100644
|
||||
--- a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx
|
||||
+++ b/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx
|
||||
@@ -9,7 +9,7 @@ from libc.stdint cimport intptr_t, uintptr_t
|
||||
import threading
|
||||
from .utils import FunctionNotFoundError, NotSupportedError
|
||||
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -75,7 +75,7 @@ cdef void* __nvvmGetProgramLog = NULL
|
||||
|
||||
|
||||
cdef void* load_library() except* with gil:
|
||||
- cdef uintptr_t handle = load_nvidia_dynamic_lib("nvvm")._handle_uint
|
||||
+ cdef uintptr_t handle = CDLL("@libnvvm@/lib/libnvvm.so")._handle
|
||||
return <void*>handle
|
||||
|
||||
|
||||
diff --git a/cuda_bindings/cuda/bindings/cyruntime.pyx.in b/cuda_bindings/cuda/bindings/cyruntime.pyx.in
|
||||
index 5cd65fbd96..fbbcffbbb7 100644
|
||||
--- a/cuda_bindings/cuda/bindings/cyruntime.pyx.in
|
||||
+++ b/cuda_bindings/cuda/bindings/cyruntime.pyx.in
|
||||
@@ -1874,7 +1874,7 @@ cdef cudaError_t cudaGraphicsVDPAURegisterOutputSurface(cudaGraphicsResource** r
|
||||
{{if True}}
|
||||
|
||||
from libc.stdint cimport uintptr_t
|
||||
-from cuda.pathfinder import load_nvidia_dynamic_lib
|
||||
+from ctypes import CDLL
|
||||
{{if 'Windows' == platform.system()}}
|
||||
cimport cuda.bindings._lib.windll as windll
|
||||
{{else}}
|
||||
@@ -1884,11 +1884,11 @@ cimport cuda.bindings._lib.dlfcn as dlfcn
|
||||
cdef cudaError_t getLocalRuntimeVersion(int* runtimeVersion) except ?cudaErrorCallRequiresNewerDriver nogil:
|
||||
# Load
|
||||
with gil:
|
||||
- loaded_dl = load_nvidia_dynamic_lib("cudart")
|
||||
+ loaded_dl = CDLL("@libcudart@/lib/libcudart.so")
|
||||
{{if 'Windows' == platform.system()}}
|
||||
- handle = <uintptr_t>loaded_dl._handle_uint
|
||||
+ handle = <uintptr_t>loaded_dl._handle
|
||||
{{else}}
|
||||
- handle = <void *><uintptr_t>loaded_dl._handle_uint
|
||||
+ handle = <void *><uintptr_t>loaded_dl._handle
|
||||
{{endif}}
|
||||
|
||||
{{if 'Windows' == platform.system()}}
|
||||
diff --git a/cuda_bindings/cuda/bindings/nvml.pyx b/cuda_bindings/cuda/bindings/nvml.pyx
|
||||
index 42c9fdcc87..0661379a68 100644
|
||||
--- a/cuda_bindings/cuda/bindings/nvml.pyx
|
||||
+++ b/cuda_bindings/cuda/bindings/nvml.pyx
|
||||
@@ -27471,4 +27471,3 @@ cpdef str vgpu_type_get_name(unsigned int vgpu_type_id):
|
||||
__status__ = nvmlVgpuTypeGetName(<nvmlVgpuTypeId_t>vgpu_type_id, vgpu_type_name, <unsigned int*>size)
|
||||
check_status(__status__)
|
||||
return cpython.PyUnicode_FromStringAndSize(vgpu_type_name, size[0])
|
||||
-
|
||||
Reference in New Issue
Block a user