Unverified Commit 6a7e3489 authored by Gaétan Lepage's avatar Gaétan Lepage Committed by GitHub
Browse files

python3Packages.cuda-bindings: fix lib lookups (#512828)

parents 11c458cb df356804
Loading
Loading
Loading
Loading
+49 −7
Original line number Diff line number Diff line
@@ -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 {
+178 −0
Original line number Diff line number Diff line
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])
-