bytedeco / javacpp-presets

The missing Java distribution of native C++ libraries
Other
2.65k stars 736 forks source link

cuda location is /usr/lib/cuda on Ubuntu 22.04.03 and not /usr/local/cuda which cppbuild.sh script is looking for #1452

Closed archenroot closed 8 months ago

archenroot commented 8 months ago

On my system: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

I installed cuda using: sudo apt install nvidia-cuda-toolkit

but the files are not inside /usr/local/cuda, but here:

zangetsu  X10SRA  ~/Downloads  dpkg -L nvidia-cuda-toolkit
/.
/etc
/etc/nvcc.profile
/usr
/usr/bin
/usr/bin/TreeLauncherSubreaper
/usr/bin/TreeLauncherTargetLdPreloadHelper
/usr/bin/bin2c
/usr/bin/compute-sanitizer
/usr/bin/cu++filt
/usr/bin/cuda-memcheck
/usr/bin/cudafe++
/usr/bin/cuobjdump
/usr/bin/fatbinary
/usr/bin/nvcc
/usr/bin/nvdisasm
/usr/bin/nvlink
/usr/bin/nvprune
/usr/bin/ptxas
/usr/include
/usr/include/nvvm.h
/usr/lib
/usr/lib/cuda
/usr/lib/cuda/bin
/usr/lib/cuda/include
/usr/lib/cuda/lib64
/usr/lib/cuda/nvvm
/usr/lib/nvidia-cuda-toolkit
/usr/lib/nvidia-cuda-toolkit/bin
/usr/lib/nvidia-cuda-toolkit/bin/cicc
/usr/lib/nvidia-cuda-toolkit/bin/crt
/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub
/usr/lib/nvidia-cuda-toolkit/bin/crt/prelink.stub
/usr/lib/nvidia-cuda-toolkit/bin/g++
/usr/lib/nvidia-cuda-toolkit/bin/gcc
/usr/lib/nvidia-cuda-toolkit/bin/nvcc
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cudaGL_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cudaVDPAU_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cuda_gl_interop_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cuda_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cuda_profiler_api_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cuda_runtime_api_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/generated_cuda_vdpau_interop_meta.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_barrier.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_callbacks.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_driver_cbid.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_memory.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_patching.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_result.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_runtime_cbid.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/include/sanitizer_stream.h
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/libInterceptorInjectionTarget.so
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/libTreeLauncherPlaceholder.so
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/libTreeLauncherTargetInjection.so
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/libTreeLauncherTargetUpdatePreloadInjection.so
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/libsanitizer-collection.so
/usr/lib/nvidia-cuda-toolkit/compute-sanitizer/libsanitizer-public.so
/usr/lib/nvidia-cuda-toolkit/libdevice
/usr/lib/nvidia-cuda-toolkit/libdevice/libdevice.10.bc
/usr/share
/usr/share/doc
/usr/share/doc/nvidia-cuda-toolkit
/usr/share/doc/nvidia-cuda-toolkit/README.Debian
/usr/share/doc/nvidia-cuda-toolkit/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/nvidia-cuda-toolkit
/usr/lib/cuda/include/cuda.h
/usr/lib/cuda/nvvm/libdevice
/usr/lib/nvidia-cuda-toolkit/bin/nvcc.profile
/usr/share/doc/nvidia-cuda-toolkit/changelog.Debian.gz

I changed path in the script and it could start, but it failed again: [ERROR] Failed to execute JavaCPP Builder: Could not parse "cudnn.h": File does not exist

I searched for the file and found it here:

zangetsu  X10SRA  …/public/javacpp-presets  master ◔  locate cudnn.h
/home/zangetsu/.cache/bazel/_bazel_zangetsu/a9892f996f3609664d1666ede11763aa/external/local_config_cuda/cuda/cuda/include/cudnn.h
/home/zangetsu/proj/private/experiment/venv/lib/python3.10/site-packages/nvidia/cudnn/include/cudnn.h
/home/zangetsu/proj/public/javacpp-presets/caffe/cppbuild/linux-x86_64/caffe-1.0/include/caffe/util/cudnn.hpp
/home/zangetsu/proj/public/javacpp-presets/caffe/cppbuild/linux-x86_64/include/caffe/util/cudnn.hpp
/home/zangetsu/proj/public/javacpp-presets/caffe/target/native/org/bytedeco/caffe/linux-x86_64/include/caffe/util/cudnn.hpp
/home/zangetsu/proj/public/javacpp-presets/tensorflow/cppbuild/linux-x86_64/tensorflow-1.15.5/tensorflow/core/util/use_cudnn.h
/usr/include/x86_64-linux-gnu/cudnn.h

I created a link manually: sudo ln -s /usr/include/x86_64-linux-gnu/cudnn.h /usr/include/cudnn.h - there are required many files to create a link:

the package is kinda broken as it doesn't show the header files:

dpkg -L nvidia-cudnn
/.
/usr
/usr/sbin
/usr/sbin/update-nvidia-cudnn
/usr/share
/usr/share/doc
/usr/share/doc/nvidia-cudnn
/usr/share/doc/nvidia-cudnn/changelog.gz
/usr/share/doc/nvidia-cudnn/copyright

but when I removed it, it showed the files deleted including header files:

sudo apt remove nvidia-cudnn
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
  nvidia-cudnn
0 upgraded, 0 newly installed, 1 to remove and 5 not upgraded.
After this operation, 45,1 kB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 326426 files and directories currently installed.)
Removing nvidia-cudnn (8.2.4.15~cuda11.4) ...
Purging cuDNN installation from /usr
removed '/usr/lib/x86_64-linux-gnu/libcudnn_adv_infer.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_ops_infer.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_adv_train.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer.so'
removed '/usr/lib/x86_64-linux-gnu/libcudnn.so'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_ops_infer.so'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_ops_train.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_adv_train.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_ops_infer.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_adv_infer.so'
removed '/usr/lib/x86_64-linux-gnu/libcudnn.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_ops_train.so.8.2.4'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_ops_train.so'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train.so'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_adv_infer.so.8'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_adv_train.so'
removed '/usr/include/x86_64-linux-gnu/cudnn_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_ops_train.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_ops_infer.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_backend.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_adv_infer_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_adv_train.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_adv_infer.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_backend_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_ops_infer_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_version.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_cnn_train_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_cnn_infer.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_version_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_adv_train_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_cnn_train.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_ops_train_v8.h'
removed '/usr/include/x86_64-linux-gnu/cudnn_cnn_infer_v8.h'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer_static_v8.a'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_static.a'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_static_v8.a'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train_static.a'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer_static.a'
removed '/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train_static_v8.a'
removed '/usr/share/doc/nvidia-cudnn/NVIDIA_SLA_cuDNN_Support.txt'

Question: should I use the files downloaded from Nvidia site instead of these packages provided by Ubuntu to be as much as possible compatible with javacpp-preset config?

saudet commented 8 months ago

If you want to add support for another directory structure than /usr/local/cuda, contributions are welcome!

archenroot commented 8 months ago

On my ubuntu 22.04.3 I removed cuda 11 available from Ubuntu maintained packages and replace it by the one from Nvidia version 12 and Nvidia package installs into directories which are expected by the preset:

zangetsu  X10SRA  ~/devel/sdk  ls /usr/local/
drwxr-xr-x 12 root root 4,0K 2023-12-28 19:20 .
drwxr-xr-x 16 root root 4,0K 2023-12-10 17:36 ..
drwxr-xr-x  3 root root 4,0K 2023-11-01 21:12 aws-cli
drwxr-xr-x  2 root root 4,0K 2023-12-28 19:20 bin
lrwxrwxrwx  1 root root   22 2023-12-28 19:20 cuda -> /etc/alternatives/cuda
lrwxrwxrwx  1 root root   25 2023-12-28 19:20 cuda-12 -> /etc/alternatives/cuda-12
drwxr-xr-x 15 root root 4,0K 2023-12-28 19:20 cuda-12.3
drwxr-xr-x  2 root root 4,0K 2022-08-09 13:48 etc
drwxr-xr-x  2 root root 4,0K 2022-08-09 13:48 games
drwxr-xr-x  2 root root 4,0K 2022-08-09 13:48 include
drwxr-xr-x  3 root root 4,0K 2022-08-09 13:48 lib
lrwxrwxrwx  1 root root    9 2023-06-18 08:28 man -> share/man
drwxr-xr-x  2 root root 4,0K 2022-08-09 13:48 sbin
drwxr-xr-x  8 root root 4,0K 2023-12-14 20:01 share
drwxr-xr-x  2 root root 4,0K 2022-08-09 13:48 src

closing this issue