NCCL 오류 해결 기록

steadycode·2023년 2월 3일
0

최근 ML 분산학습 시스템을 처음부터 빌드하는 작업을 하게 되었는데, 기존 사용하던 horovod source code의 작동 문제를 발견함. 본 포스팅은 위 문제를 해결한 과정을 기록함.


시행착오 1

NCCL github 에서 version 을 2.14 로 맞추었음에도 horovod 를 빌드할 때, nccl version 이 2.12.12 로 고정되는 현상을 발견함.

pytorch 가 source code 로 빌드가 힘들어 pip3 로 다운을 받았더니 기본 nccl version 이 2.14.3 으로 정해져서 이를 맞추려고 했음

# python nccl version
NCCL VERSION:  (2, 14, 3)
# horovod nccl version
NCCL version 2.12.12+cuda11.6

확인해보니 ncclCommInitRank 에서 에러를 발견함. 아마 libnccl-net.so 는 IB 를 사용하지 않아서 발생하는 warning 으로 파악.

INFO NET/Plugin : No plugin found (libnccl-net.so), using internal implementation

init.cc:255 NCCL WARN Cuda failure 'CUDA driver is a stub library'
NCCL INFO init.cc:913 -> 1
[0] NCCL INFO init.cc:950 -> 1
[0] NCCL INFO init.cc:963 -> 1
[1,0]<stderr>:Traceback (most recent call last):
[1,0]<stderr>:  File "mpi_ops.py", line 1042, in synchronize
[1,0]<stderr>:    mpi_lib.horovod_torch_wait_and_clear(handle)
[1,0]<stderr>:RuntimeError: ncclCommInitRank failed: unhandled cuda error

During handling of the above exception, another exception occurred:

horovod.common.exceptions.HorovodInternalError: ncclCommInitRank failed: unhandled cuda error

misc/argcheck.cc:30 NCCL WARN ncclGetAsyncError : comm argument is NULL

해결 방안

일단 NCCL version 이 맞지 않으므로 grep 으로 원인을 파악해보았음.

NCCL version 2.12.12+cuda11.6
grep -nR "NCCL version"

여기서는 원인 파악이 힘들었음. 결론적으로 실패.

원인파악 2

다시 확인해보니 NCCL_DEBUG=INFO 에서 출력되는 듯 함. locate 로 원인파악 시작

sudo apt install mlocate

locate nccl| grep "libnccl.so"

다음과 같은 결과를 얻을 수 있었음.

src/nccl/build/debian/libnccl-dev/usr/lib/x86_64-linux-gnu/libnccl.so
src/nccl/build/debian/libnccl2/usr/lib/x86_64-linux-gnu/libnccl.so.2
src/nccl/build/debian/libnccl2/usr/lib/x86_64-linux-gnu/libnccl.so.2.14.3
src/nccl/build/lib/libnccl.so
src/nccl/build/lib/libnccl.so.2
src/nccl/build/lib/libnccl.so.2.14.3
/usr/lib/x86_64-linux-gnu/libnccl.so
/usr/lib/x86_64-linux-gnu/libnccl.so.2
/usr/lib/x86_64-linux-gnu/libnccl.so.2.14.3
/usr/local/lib/libnccl.so
/usr/local/lib/libnccl.so.2
/usr/local/lib/libnccl.so.2.12.12

아마도 주된 원인은 /usr/lib 를 사용하는 것이 아닌 /usr/local/lib 를 사용했기 때문인 것 같음. ~/.bashrc 에서 우선순위를 /usr/local 로 설정해두었음.

본인은 NCCL 을 .deb 으로 빌드했기 때문에 다음과 같은 명령어는 사용이 불가했음

sudo make install prefix=/usr/local

그래서 사용한 방법은 다음과 같은데 이것도 오류가 발생함

sudo dpkg -x .deb /usr/local/lib

따라서 빌드한 build directory 의 include 와 lib 파일을 모두 /usr/local/lib 에 복사하는 방식으로 문제를 해결함.

cp -P lib/libnccl* /usr/local/lib

그랬더니 다음과 같이 NCCL_DEBUG=INFO 메시지에서 version 이 맞는 것을 확인할 수 있었음.

NCCL version 2.14.3+cuda11.6

시행착오 2

commInitRank 문제는 해결되었지만 다음의 에러는 여전히 발생함. 이번에는 connection 이 localRank 에서 close 되었다는 메시지를 발견함.

misc/strongstream.cc:33 NCCL WARN Cuda failure 'CUDA driver is a stub library'

그리고 이것은 또다른 오류를 만들어 냈는데, 다음과 같음.

NCCL INFO [Service thread] Connection closed by localRank 1

해결방안

아마 misc (miscellaneou) 내부 코드가 문제가 있었나본데, 컴파일러 버전을 9 버전으로 사용을 했나 싶어서 다시 컴파일을 해보았지만 결론적으로는 실패.


시행착오 3

결국 복잡해서 그만두었던 pytorch 를 source code build 하기로 결정함. pytorch 의 NCCL 버전과 horovod의 NCCL 버전을 shared library 수준부터 완전히 일치시키기 위한 것인 궁극적인 목표임.

해결방안

cmake-3.16 cmake-3.23-rc1 cmake-3.25 모두 이상한 에러를 경험했었음 에러는 다음과 같음

CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.

3.19~3.23 버전의 중간인 cmake-3.21 를 새로 빌드함. 설치 script 는 다음과 같음.

#!/bin/bash

USE_CUDA=1 \
USE_CUDNN=1 \
USE_OPENCV=1 \
USE_MKLDNN=0 \
USE_NINJA=OFF \
TORCH_CUDA_ARCH_LIST="7.5" \
NCCL_INCLUDE_DIR="/usr/local/include/" NCCL_LIB_DIR="/usr/local/lib/" USE_SYSTEM_NCCL=1 python3 setup.py install

이에 따른 summary build 는 다음과 같음

-- 
-- ******** Summary ********
-- General:
--   CMake version         : 3.21.0
--   CMake command         : /usr/local/bin/cmake
--   System                : Linux
--   C++ compiler          : /usr/bin/c++
--   C++ compiler id       : GNU
--   C++ compiler version  : 9.4.0
--   Using ccache if found : ON
--   Found ccache          : CCACHE_PROGRAM-NOTFOUND
--   CXX flags             :  -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow
--   Build type            : Release
--   Compile definitions   : ONNX_ML=1;ONNXIFI_ENABLE_EXT=1;ONNX_NAMESPACE=onnx_torch;HAVE_MMAP=1;_FILE_OFFSET_BITS=64;HAVE_SHM_OPEN=1;HAVE_SHM_UNLINK=1;HAVE_MALLOC_USABLE_SIZE=1;USE_EXTERNAL_MZCRC;MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS;USE_FLASH_ATTENTION
--   CMAKE_PREFIX_PATH     : /usr/lib/python3.8/site-packages;/usr/local/cuda;/usr/local/cuda
--   CMAKE_INSTALL_PREFIX  : /home/src/pytorch/torch
--   USE_GOLD_LINKER       : OFF
-- 
--   TORCH_VERSION         : 2.0.0
--   CAFFE2_VERSION        : 2.0.0
--   BUILD_CAFFE2          : OFF
--   BUILD_CAFFE2_OPS      : OFF
--   BUILD_STATIC_RUNTIME_BENCHMARK: OFF
--   BUILD_TENSOREXPR_BENCHMARK: OFF
--   BUILD_NVFUSER_BENCHMARK: OFF
--   BUILD_BINARY          : OFF
--   BUILD_CUSTOM_PROTOBUF : ON
--     Link local protobuf : ON
--   BUILD_DOCS            : OFF
--   BUILD_PYTHON          : True
--     Python version      : 3.8.10
--     Python executable   : /usr/bin/python3
--     Pythonlibs version  : 3.8.10
--     Python library      : /usr/lib/libpython3.8.so.1.0
--     Python includes     : /usr/include/python3.8
--     Python site-packages: lib/python3.8/site-packages
--   BUILD_SHARED_LIBS     : ON
--   CAFFE2_USE_MSVC_STATIC_RUNTIME     : OFF
--   BUILD_TEST            : True
--   BUILD_JNI             : OFF
--   BUILD_MOBILE_AUTOGRAD : OFF
--   BUILD_LITE_INTERPRETER: OFF
--   INTERN_BUILD_MOBILE   : 
--   TRACING_BASED         : OFF
--   USE_BLAS              : 0
--   USE_LAPACK            : 0
--   USE_ASAN              : OFF
--   USE_TSAN              : OFF
--   USE_CPP_CODE_COVERAGE : OFF
--   USE_CUDA              : ON
--     Split CUDA          : 
--     CUDA static link    : OFF
--     USE_CUDNN           : ON
--     USE_EXPERIMENTAL_CUDNN_V8_API: ON
--     CUDA version        : 11.6
--     USE_FLASH_ATTENTION : ON
--     cuDNN version       : 8.7.0
--     CUDA root directory : /usr/local/cuda
--     CUDA library        : /usr/local/cuda/lib64/stubs/libcuda.so
--     cudart library      : /usr/local/cuda/lib64/libcudart.so
--     cublas library      : /usr/local/cuda/lib64/libcublas.so
--     cufft library       : /usr/local/cuda/lib64/libcufft.so
--     curand library      : /usr/local/cuda/lib64/libcurand.so
--     cuDNN library       : /usr/local/cuda/lib64/libcudnn.so
--     nvrtc               : /usr/local/cuda/lib64/libnvrtc.so
--     CUDA include path   : /usr/local/cuda/include
--     NVCC executable     : /usr/local/cuda/bin/nvcc
--     CUDA compiler       : /usr/local/cuda/bin/nvcc
--     CUDA flags          :  -Xfatbin -compress-all -DONNX_NAMESPACE=onnx_torch -gencode arch=compute_75,code=sm_75 -Xcudafe --diag_suppress=cc_clobber_ignored,--diag_suppress=integer_sign_change,--diag_suppress=useless_using_declaration,--diag_suppress=set_but_not_used,--diag_suppress=field_without_dll_interface,--diag_suppress=base_class_has_different_dll_interface,--diag_suppress=dll_interface_conflict_none_assumed,--diag_suppress=dll_interface_conflict_dllexport_assumed,--diag_suppress=implicit_return_from_non_void_function,--diag_suppress=unsigned_compare_with_zero,--diag_suppress=declared_but_not_referenced,--diag_suppress=bad_friend_decl --expt-relaxed-constexpr --expt-extended-lambda  -Wno-deprecated-gpu-targets --expt-extended-lambda -DCUB_WRAPPED_NAMESPACE=at_cuda_detail -DCUDA_HAS_FP16=1 -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__
--     CUDA host compiler  : 
--     CUDA --device-c     : OFF
--     USE_TENSORRT        : OFF
--   USE_ROCM              : OFF
--   BUILD_NVFUSER         : ON
--   USE_EIGEN_FOR_BLAS    : ON
--   USE_FBGEMM            : ON
--     USE_FAKELOWP          : OFF
--   USE_KINETO            : ON
--   USE_FFMPEG            : OFF
--   USE_GFLAGS            : OFF
--   USE_GLOG              : OFF
--   USE_LEVELDB           : OFF
--   USE_LITE_PROTO        : OFF
--   USE_LMDB              : OFF
--   USE_METAL             : OFF
--   USE_PYTORCH_METAL     : OFF
--   USE_PYTORCH_METAL_EXPORT     : OFF
--   USE_MPS               : OFF
--   USE_FFTW              : OFF
--   USE_MKL               : OFF
--   USE_MKLDNN            : ON
--   USE_MKLDNN_ACL        : OFF
--   USE_MKLDNN_CBLAS      : OFF
--   USE_UCC               : OFF
--   USE_ITT               : ON
--   USE_NCCL              : ON
--     USE_SYSTEM_NCCL     : 1
--     USE_NCCL_WITH_UCC   : OFF
--   USE_NNPACK            : ON
--   USE_NUMPY             : ON
--   USE_OBSERVERS         : ON
--   USE_OPENCL            : OFF
--   USE_OPENCV            : OFF
--   USE_OPENMP            : ON
--   USE_TBB               : OFF
--   USE_VULKAN            : OFF
--   USE_PROF              : OFF
--   USE_QNNPACK           : ON
--   USE_PYTORCH_QNNPACK   : ON
--   USE_XNNPACK           : ON
--   USE_REDIS             : OFF
--   USE_ROCKSDB           : OFF
--   USE_ZMQ               : OFF
--   USE_DISTRIBUTED       : ON
--     USE_MPI               : ON
--     USE_GLOO              : ON
--     USE_GLOO_WITH_OPENSSL : OFF
--     USE_TENSORPIPE        : ON
--   Public Dependencies  : caffe2::Threads
--   Private Dependencies : pthreadpool;cpuinfo;qnnpack;pytorch_qnnpack;nnpack;XNNPACK;fbgemm;ittnotify;fp16;/usr/local/lib/libmpi.so;tensorpipe;gloo;foxi_loader;rt;fmt::fmt-header-only;kineto;gcc_s;gcc;dl
--   USE_COREML_DELEGATE     : OFF
--   BUILD_LAZY_TS_BACKEND   : ON
--   TORCH_DISABLE_GPU_ASSERTS : ON
-- Configuring done
-- Generating done
-- Build files have been written to: /home/src/pytorch/build

그러나 여전히 cmake 에서 오류가 발생하는 것을 확인. ATen 을 빌드할 때 에러가 나는데, make -j 16 으로 thread를 16개 사용하는 것을 확인. 아마 메모리 용량문제가 아닐까 싶어 16GB 를 32GB 로 바꾸었음. 확실히 메모리 용량 문제가 맞는 듯.

              total        used        free      shared  buff/cache   available
Mem:           31Gi       15.0Gi        16Gi        42Mi       2.6Gi        23Gi
Swap:         2.0Gi          0B       2.0Gi

그러나 /usr/local 의 permission 문제로 실패. --user 옵션을 추가해줬음.

#!/bin/bash
USE_CUDA=1 \
USE_CUDNN=1 \
USE_OPENCV=1 \
USE_MKLDNN=0 \
USE_NINJA=OFF \
TORCH_CUDA_ARCH_LIST="7.5" \
CC=/usr/bin/gcc-8 CXX=/usr/bin/g++-8 \
NCCL_INCLUDE_DIR="/usr/local/include/" NCCL_LIB_DIR="/usr/local/lib/" USE_SYSTEM_NCCL=1 python3 setup.py develop --user

결과는 성공. 그러나 horovod 재 빌드 후 실행해본 결과 여전히 다음의 에러를 경험.

misc/strongstream.cc:33 NCCL WARN Cuda failure 'CUDA driver is a stub library'
NCCL INFO enqueue.cc:1417 -> 1
[1] NCCL INFO enqueue.cc:1457 -> 1
[1] NCCL INFO enqueue.cc:1462 -> 1

아마 주된 원인은 CUDA driver 가 stub library 이기 때문으로 생각됨. 위 에러는 다음과 같은 문제를 가지고 있을 가능성이 있음.

There are several reasons why this error might occur, including:

Missing library: The library file may be missing from the system or the specified directory.

Incorrect library path: The library path specified in the LD_LIBRARY_PATH environment variable or in the /etc/ld.so.conf file may be incorrect, causing the linker to be unable to find the library.

Incompatible library: The library file may be present, but may be a different version or have a different architecture than the program expects.

Permission issues: The library file may not have the appropriate permissions for the program to access it.

시행착오 4

nvidia-smi 명령어로 드라이버 및 cuda version 확인결과 CUDA version 이 11.5 로 되어있음.

nvidia-smi

Mon Jan 30 17:24:58 2023       
+-----------------------------------------------------------------------------+
ö NVIDIA-SMI 495.29.05    Driver Version: 495.29.05    CUDA Version: 11.5     ö
nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:18:20_PST_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
which nvidia-smi
/usr/bin/nvidia-smi

디버깅 중 다음의 메뉴얼을 위 링크에서 확인할 수 있었음. 요약하자면

  • CUDA driver 는 runtime 보다 newer
  • 그러나 major release 는 동일해야함.

As described, applications that directly rely only on the CUDA runtime can be deployed in the following two scenarios:

CUDA driver that’s installed on the system is newer than the runtime.
CUDA runtime is newer than the CUDA driver on the system but they are from the same major release of CUDA Toolkit.

nvidia-driver 가 어떤 CUDA version 지원하는지 확인이 어려웠음. 따라서 다음의 링크로 확인해봄

여기서 12.x 는 525 부터 지원한다고 하니 적정한 515 를 설치하면 되지 않을까 생각이 듦.

sudo apt install nvidia-driver-515

sudo reboot

위 명령어를 통해 모든 dependency 설치가 가능함. 설치 후 실행결과 11.7 지원 확인.

Mon Jan 30 17:50:52 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.86.01    Driver Version: 515.86.01    CUDA Version: 11.7   

그러나 여전히 동일한 stub library 에러 발생하는 것을 확인.


시행착오 5

다시 nvidia-driver-510을 설치하기로 했음. Major 와 minor 버전을 모두 맞추면 호환성 문제가 해결되지 않을까 생각함. 그러나 여전히 에러 발생.

NCCL DOC 을 다시 확인해봄.

필자가 사용한 버전은 2.14.3 이지만, 11.6 이 지원이 안된다는 것을 확인함. 따라서 2.12 버전을 다시 설치

git clone https://github.com/NVIDIA/nccl.git
cd nccl
git checkout tags/v2.12.12-1
make
...

설치 확인

sudo updatedb
locate nccl| grep "libnccl.so"

/usr/lib/x86_64-linux-gnu/libnccl.so
/usr/lib/x86_64-linux-gnu/libnccl.so.2
/usr/lib/x86_64-linux-gnu/libnccl.so.2.12.12
/usr/local/lib/libnccl.so
/usr/local/lib/libnccl.so.2
/usr/local/lib/libnccl.so.2.12.12

그 이후 pytorch source code 재설치, 그리고 develop 으로 빌드했으니 PYTHON_PATH 를 다음과 같이 추가

export PYTHON_PATH="~/src/pytorch"

그러나 여전히 NCCL 버전이 바뀌지 않음. 따라서 reboot.

reboot 이후 horovod 재설치 진행했지만 실패. cmake-3.21 에서 cmake-3.16 으로 변경하고 재설치 진행. 그러나 실패. pip3 버전 업그레이드 이후 진행

python3 -m pip install --upgrade pip

시행착오 6

확인해보니, pytorch 1.13 이 아닌 2.0.0 을 설치했음. 1.13 으로 checkout

git checkout tags/v1.13.1
git submodule sync
git submodule update --init --recursive

재 설치 이후 컴파일 했더니 작동 안함. 결국 포기


시행착오 7

결국 pytorch 메인 홈페이지 에서 재설치.

Collecting torch
  Downloading torch-1.13.1-cp38-cp38-manylinux1_x86_64.whl (887.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 887.4/887.4 MB 4.8 MB/s eta 0:00:00
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/lib/python3/dist-packages (from torchvision) (7.0.0)
Collecting nvidia-cublas-cu11==11.10.3.66
  Downloading nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl (317.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 317.1/317.1 MB 7.5 MB/s eta 0:00:00
Collecting nvidia-cuda-nvrtc-cu11==11.7.99
  Downloading nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl (21.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.0/21.0 MB 11.2 MB/s eta 0:00:00
Collecting nvidia-cuda-runtime-cu11==11.7.99
  Downloading nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl (849 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 849.3/849.3 kB 11.0 MB/s eta 0:00:00
Collecting nvidia-cudnn-cu11==8.5.0.96
  Downloading nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl (557.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 557.1/557.1 MB 6.0 MB/s eta 0:00:00
Requirement already satisfied: wheel in /home/.local/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch) (0.38.4)
Requirement already satisfied: setuptools in /home/.local/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch) (58.3.0)
Installing collected packages: nvidia-cuda-runtime-cu11, nvidia-cuda-nvrtc-cu11, nvidia-cublas-cu11, nvidia-cudnn-cu11, torch
  Attempting uninstall: torch
    Found existing installation: torch 1.13.0a0+git49444c3
    Uninstalling torch-1.13.0a0+git49444c3:
      Successfully uninstalled torch-1.13.0a0+git49444c3

시스템에는 nvidia-driver-510 그리고 /usr/local/cuda-11.6 이지만 그냥 설치 완료.

실행 시 다음의 에러 발생

RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.7 and torchvision has CUDA Version=11.6. Please reinstall the torchvision that matches your PyTorch install.

그래서 결국 위 링크에서 설치하기로 했음.

명령어는 다음과 같음

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-ubuntu2004-11-7-local_11.7.0-515.43.04-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-7-local_11.7.0-515.43.04-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

신기하게도 dpkg 로 설치를 완료 했는데, 추가적으로 cuda install 을 진행해야함. cuda toolkit 을 다운로드 했는데, 12버전이 추가적으로 다운로드 되는 것을 확인. 로그는 다음과 같음. 추가적으로 library 확인이 필요할 듯 함.

The following additional packages will be installed:
  cuda-12-0 cuda-cccl-12-0 cuda-command-line-tools-12-0 cuda-compiler-12-0 cuda-cudart-12-0 cuda-cudart-dev-12-0 cuda-cuobjdump-12-0
  cuda-cupti-12-0 cuda-cupti-dev-12-0 cuda-cuxxfilt-12-0 cuda-demo-suite-12-0 cuda-documentation-12-0 cuda-driver-dev-12-0 cuda-drivers
  cuda-drivers-525 cuda-gdb-12-0 cuda-libraries-12-0 cuda-libraries-dev-12-0 cuda-nsight-12-0 cuda-nsight-compute-12-0
  cuda-nsight-systems-12-0 cuda-nvcc-12-0 cuda-nvdisasm-12-0 cuda-nvml-dev-12-0 cuda-nvprof-12-0 cuda-nvprune-12-0 cuda-nvrtc-12-0
  cuda-nvrtc-dev-12-0 cuda-nvtx-12-0 cuda-nvvp-12-0 cuda-opencl-12-0 cuda-opencl-dev-12-0 cuda-profiler-api-12-0 cuda-runtime-12-0
  cuda-sanitizer-12-0 cuda-toolkit-12-0 cuda-toolkit-12-0-config-common cuda-toolkit-12-config-common cuda-tools-12-0
  cuda-visual-tools-12-0 gds-tools-12-0 libcublas-12-0 libcublas-dev-12-0 libcufft-12-0 libcufft-dev-12-0 libcufile-12-0
  libcufile-dev-12-0 libcurand-12-0 libcurand-dev-12-0 libcusolver-12-0 libcusolver-dev-12-0 libcusparse-12-0 libcusparse-dev-12-0
  libnpp-12-0 libnpp-dev-12-0 libnvidia-cfg1-525 libnvidia-common-525 libnvidia-compute-525 libnvidia-compute-525:i386
  libnvidia-decode-525 libnvidia-decode-525:i386 libnvidia-encode-525 libnvidia-encode-525:i386 libnvidia-extra-525 libnvidia-fbc1-525
  libnvidia-fbc1-525:i386 libnvidia-gl-525 libnvidia-gl-525:i386 libnvjitlink-12-0 libnvjitlink-dev-12-0 libnvjpeg-12-0
  libnvjpeg-dev-12-0 libnvvm-samples-12-0 libxcb-xinput0 nsight-compute-2022.4.0 nsight-systems-2022.4.2 nvidia-compute-utils-525
  nvidia-dkms-525 nvidia-driver-525 nvidia-kernel-common-525 nvidia-kernel-source-525 nvidia-modprobe nvidia-settings nvidia-utils-525
  xserver-xorg-video-nvidia-525
The following packages will be REMOVED:
  libnvidia-cfg1-510 libnvidia-compute-510 libnvidia-compute-510:i386 libnvidia-decode-510 libnvidia-decode-510:i386
  libnvidia-encode-510 libnvidia-encode-510:i386 libnvidia-extra-510 libnvidia-fbc1-510 libnvidia-fbc1-510:i386 libnvidia-gl-510
  libnvidia-gl-510:i386 nvidia-compute-utils-510 nvidia-dkms-510 nvidia-driver-510 nvidia-kernel-common-510 nvidia-kernel-source-510
  nvidia-utils-510 xserver-xorg-video-nvidia-510
The following NEW packages will be installed:
  cuda cuda-12-0 cuda-cccl-12-0 cuda-command-line-tools-12-0 cuda-compiler-12-0 cuda-cudart-12-0 cuda-cudart-dev-12-0
  cuda-cuobjdump-12-0 cuda-cupti-12-0 cuda-cupti-dev-12-0 cuda-cuxxfilt-12-0 cuda-demo-suite-12-0 cuda-documentation-12-0
  cuda-driver-dev-12-0 cuda-drivers cuda-drivers-525 cuda-gdb-12-0 cuda-libraries-12-0 cuda-libraries-dev-12-0 cuda-nsight-12-0
  cuda-nsight-compute-12-0 cuda-nsight-systems-12-0 cuda-nvcc-12-0 cuda-nvdisasm-12-0 cuda-nvml-dev-12-0 cuda-nvprof-12-0
  cuda-nvprune-12-0 cuda-nvrtc-12-0 cuda-nvrtc-dev-12-0 cuda-nvtx-12-0 cuda-nvvp-12-0 cuda-opencl-12-0 cuda-opencl-dev-12-0
  cuda-profiler-api-12-0 cuda-runtime-12-0 cuda-sanitizer-12-0 cuda-toolkit-12-0 cuda-toolkit-12-0-config-common
  cuda-toolkit-12-config-common cuda-tools-12-0 cuda-visual-tools-12-0 gds-tools-12-0 libcublas-12-0 libcublas-dev-12-0 libcufft-12-0
  libcufft-dev-12-0 libcufile-12-0 libcufile-dev-12-0 libcurand-12-0 libcurand-dev-12-0 libcusolver-12-0 libcusolver-dev-12-0
  libcusparse-12-0 libcusparse-dev-12-0 libnpp-12-0 libnpp-dev-12-0 libnvidia-cfg1-525 libnvidia-common-525 libnvidia-compute-525
  libnvidia-compute-525:i386 libnvidia-decode-525 libnvidia-decode-525:i386 libnvidia-encode-525 libnvidia-encode-525:i386
  libnvidia-extra-525 libnvidia-fbc1-525 libnvidia-fbc1-525:i386 libnvidia-gl-525 libnvidia-gl-525:i386 libnvjitlink-12-0
  libnvjitlink-dev-12-0 libnvjpeg-12-0 libnvjpeg-dev-12-0 libnvvm-samples-12-0 libxcb-xinput0 nsight-compute-2022.4.0
  nsight-systems-2022.4.2 nvidia-compute-utils-525 nvidia-dkms-525 nvidia-driver-525 nvidia-kernel-common-525 nvidia-kernel-source-525
  nvidia-modprobe nvidia-utils-525 xserver-xorg-video-nvidia-525

결론은 다시 실패

마지막 시행착오

결국에 위의 시도는 전부 실패함. 다시 돌아가서 이전 시스템의 CUDA-11.3 과 nvidia-driver 470.161.03 을 설치함

결과적으로 성공함

[1,1]<stdout>:Python:  3.8.10 (default, Nov 14 2022, 12:59:47) 
[1,1]<stdout>:[GCC 9.4.0]
[1,1]<stdout>:Python Path:  /usr/bin/python3
[1,1]<stdout>:Torch:  1.12.1+cu113
[1,1]<stdout>:CUDA:  11.3
[1,1]<stdout>:CUDNN:  8700
[1,1]<stdout>:NCCL VERSION:  (2, 10, 3)
[1,0]<stdout>:NCCL version 2.10.3+cuda11.3

Conclusion

  • CUDA version 과 nvidia-driver 버전을 바꾸어가며 여러 개의 pytorch + horovod 를 실행함.
  • CUDA + DRIVER + NCCL 버전을 계속 바꾸어서 시도해봤지만 결국 실패함.
  • 결국 이전 시스템의 driver + toolkit + nccl 버전으로 회귀해서 문제를 해결함.
profile
steadycode

0개의 댓글