[에러 해결] CUDA 11.1 설치 불가: PyTorch 프로젝트 환경 설정 버전 불일치 원인과 해결 방법

안녕하세요, 개발자 여러분! 오래된 인공지능(AI) 프로젝트를 최신 시스템에서 재현하려다 환경 설정 문제에 부딪히는 일은 생각보다 흔합니다. 특히 CUDA, PyTorch, Python 등 핵심 라이브러리의 버전 불일치와 운영체제(OS)와의 호환성 문제는 많은 개발자를 고민하게 만듭니다.

오늘 다룰 내용은 스택오버플로우에서 한 학부생 개발자님이 겪고 있는 문제인데요, 오래된 AI 메모리 연구 프로젝트를 최신 Ubuntu 24 환경에서 구동하려다 CUDA 11.1 설치 불가 문제에 직면한 상황입니다. 이 문제를 자세히 분석하고, 효율적인 해결책과 함께 향후 유사한 문제를 예방할 수 있는 팁을 공유하고자 합니다.

1. 에러 발생 상황

한 학부생 개발자님이 "Incorporating neuro-inspired adaptability for continual learning in artificial intelligence" 논문 관련 AI 프로젝트(https://github.com/lywang3081/CAF.git)를 복제하려 했습니다. 해당 프로젝트의 README 파일에 명시된 환경 요구사항은 다음과 같습니다.

  • CUDA: 11.1
  • PyTorch: 1.8.1
  • TorchVision: 0.9.1
  • Python: 3.8
  • GPU: NVIDIA GeForce GTX 1080Ti
  • OS: Ubuntu 18

하지만 개발자님의 현재 시스템 환경은 다음과 같았습니다.

  • GPU: NVIDIA GeForce RTX 5070Ti (노트북)
  • OS: Ubuntu 24

문제는 최신 Ubuntu 24 시스템에서 구형인 CUDA 11.1을 설치할 수 없었다는 것입니다. 프로젝트는 구형 하드웨어(1080Ti)와 소프트웨어(Ubuntu 18, CUDA 11.1)를 기반으로 하고 있어, 최신 환경에서 그대로 구현하기 어려운 상황에 놓였습니다.

2. 명확한 발생 원인

이 문제의 핵심 원인은 주요 소프트웨어 및 하드웨어 구성 요소 간의 버전 호환성 문제입니다.

  • 2.1. Ubuntu 24와 CUDA 11.1의 비호환성

    Ubuntu 24는 최신 Linux 커널(주로 6.8 이상)을 사용합니다. 반면 CUDA 11.1은 2020년 말~2021년 초에 출시된 버전으로, 당시의 Linux 커널(주로 5.x 이하)을 대상으로 설계되었습니다. 오래된 CUDA 버전은 최신 커널 버전의 헤더 파일이나 시스템 구성 요소와 호환되지 않아, NVIDIA 드라이버나 CUDA 툴킷 설치 시 컴파일 오류 또는 기능 문제를 일으킬 가능성이 매우 높습니다. 특히 Ubuntu 24의 GLIBC 버전 등 시스템 라이브러리가 CUDA 11.1의 의존성과 충돌할 수 있습니다.

  • 2.2. 최신 GPU(RTX 5070Ti)와 구형 CUDA/PyTorch의 잠재적 문제

    RTX 5070Ti와 같은 최신 GPU는 최신 NVIDIA 드라이버(예: 535, 545, 550 버전 이상) 및 최신 CUDA 툴킷(예: CUDA 12.x)에 최적화되어 있습니다. 구형 CUDA 11.1 툴킷은 최신 GPU의 모든 기능을 활용하지 못할 수 있으며, 최신 드라이버와의 완벽한 호환성도 보장하기 어렵습니다. 또한 PyTorch 1.8.1은 CUDA 11.1에 맞춰 컴파일되었기 때문에, 만약 CUDA 12.x 환경에서 강제로 구동하려 할 경우 문제가 발생할 수 있습니다.

  • 2.3. 전체적인 의존성 불일치

    프로젝트는 Python 3.8, PyTorch 1.8.1, CUDA 11.1의 특정 조합을 요구합니다. 이 모든 의존성을 최신 Ubuntu 24 환경에서 동시에 만족시키는 것은 거의 불가능합니다. 마치 구형 자동차 부품을 최신 모델에 그대로 이식하려는 것과 같습니다.

3. 해결 방법 및 코드 예시

이러한 복잡한 버전 불일치 문제를 해결하는 가장 강력하고 권장되는 방법은 컨테이너 기술(Docker)을 활용하는 것입니다. 그 외 대안적인 방법들도 함께 제시합니다.

3.1. 이상적인 해결책: Docker를 활용한 환경 격리

Docker는 애플리케이션과 그 종속성을 컨테이너라는 독립된 환경에 패키징하여, 어떤 환경에서든 동일하게 실행될 수 있도록 돕는 기술입니다. 오래된 프로젝트를 최신 시스템에서 재현할 때 가장 효과적인 방법입니다.

단계별 해결책:

  1. Docker 및 NVIDIA Container Toolkit 설치:

    먼저 Ubuntu 24에 Docker와 NVIDIA GPU를 컨테이너에서 사용할 수 있게 해주는 NVIDIA Container Toolkit을 설치해야 합니다. 이는 최신 드라이버가 호스트 OS에 설치되어 있다면, 컨테이너 내에서 원하는 CUDA 버전을 사용할 수 있도록 합니다.

    # Docker 설치 (공식 문서 참조 권장)
    sudo apt update
    sudo apt install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    # 현재 사용자를 docker 그룹에 추가 (재로그인 필요)
    sudo usermod -aG docker $USER
    
    # NVIDIA Container Toolkit 설치 (공식 문서 참조 권장)
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
    sudo apt update
    sudo apt install -y nvidia-container-toolkit
    sudo systemctl restart docker
  2. Dockerfile 작성:

    프로젝트의 요구사항(Ubuntu 18, CUDA 11.1, PyTorch 1.8.1, Python 3.8)을 정확히 반영하는 Dockerfile을 작성합니다. 프로젝트의 루트 디렉터리에 Dockerfile이라는 파일을 생성합니다.

    # Dockerfile 예시
    # NVIDIA 공식 CUDA 이미지 중 Ubuntu 18.04와 CUDA 11.1을 지원하는 이미지 선택
    # CUDA Toolkit 11.1, cuDNN 8 (CUDA 11.1용)
    FROM nvcr.io/nvidia/pytorch:21.02-py3
    
    # FROM nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04 # 이 이미지도 사용 가능, PyTorch는 별도 설치 필요
    
    # PyTorch 21.02-py3 이미지는 이미 PyTorch 1.8.1, Python 3.8을 포함하고 있습니다.
    # 만약 위의 CUDA base 이미지를 사용한다면 PyTorch, Python을 직접 설치해야 합니다.
    # 다음은 nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04 기반으로 PyTorch 1.8.1을 설치하는 예시입니다.
    # FROM nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
    # ENV DEBIAN_FRONTEND=noninteractive
    # RUN apt update && apt install -y python3.8 python3.8-dev python3-pip git
    # RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
    # RUN update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
    # RUN pip install torch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html
    
    # 프로젝트 코드 복사 (Dockerfile이 프로젝트 루트에 있다고 가정)
    COPY . /app
    WORKDIR /app
    
    # 프로젝트별 추가 라이브러리 설치 (예: requirements.txt)
    # RUN pip install -r requirements.txt
    
    # 필요한 경우 환경 변수 설정
    # ENV PYTHONUNBUFFERED 1
    
    # 프로젝트 실행 명령어 (컨테이너 실행 시 직접 지정할 수도 있음)
    # CMD ["python", "main.py"]

    설명: nvcr.io/nvidia/pytorch:21.02-py3 이미지는 Ubuntu 18.04 기반에 CUDA 11.1, PyTorch 1.8.1, Python 3.8이 모두 설치된 NVIDIA 공식 이미지입니다. 이 이미지를 사용하면 가장 간단하게 환경을 구성할 수 있습니다.

  3. 컨테이너 빌드 및 실행:

    프로젝트 루트 디렉터리에서 다음 명령어를 실행하여 Docker 이미지를 빌드하고 컨테이너를 실행합니다.

    # Docker 이미지 빌드
    docker build -t my-ai-project .
    
    # Docker 컨테이너 실행 (GPU 지원 포함)
    # -it: 인터랙티브 터미널, --rm: 컨테이너 종료 시 자동 삭제, --gpus all: 모든 GPU 사용
    docker run -it --rm --gpus all -v $(pwd):/app my-ai-project bash
    
    # 컨테이너 내부에서 프로젝트 실행
    # (예시) python main.py

    이제 컨테이너 내부에서는 Ubuntu 18.04, CUDA 11.1, PyTorch 1.8.1, Python 3.8 환경이 완벽하게 구축되어 프로젝트를 실행할 수 있습니다. 호스트 OS는 Ubuntu 24에 최신 NVIDIA 드라이버가 설치되어 있더라도, 컨테이너 내부에서는 격리된 환경이 제공됩니다.

3.2. 대안 1: Miniconda/Anaconda를 사용한 가상 환경 (코드 수정 필요성 높음)

만약 Docker 사용이 어렵거나, 프로젝트의 코드를 어느 정도 수정할 각오가 되어 있다면, Miniconda/Anaconda를 사용하여 최신 CUDA 환경에서 PyTorch를 구동하는 방법을 고려할 수 있습니다. 하지만 이 방법은 원본 프로젝트의 PyTorch 버전(1.8.1)을 유지할 수 없으며, 코드 수정이 거의 필수적입니다.

단계별 해결책:

  1. 최신 CUDA 툴킷 설치:

    Ubuntu 24와 RTX 5070Ti에 호환되는 최신 CUDA 툴킷(예: CUDA 12.x)을 NVIDIA 개발자 웹사이트에서 다운로드하여 설치합니다.

    # (예시) CUDA 12.x 설치 명령어 (버전에 따라 다름, NVIDIA 공식 문서 참조)
    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
    sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/12.X.X/local_installers/cuda-repo-ubuntu2204-12-X-local_12.X.X-5X.XX.X-1_amd64.deb
    sudo dpkg -i cuda-repo-ubuntu2204-12-X-local_12.X.X-5X.XX.X-1_amd64.deb
    sudo cp /var/cuda-repo-ubuntu2204-12-X-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt-get update
    sudo apt-get -y install cuda-toolkit-12-X
    
    # 환경 변수 설정 ( ~/.bashrc 또는 ~/.zshrc 에 추가)
    echo 'export PATH=/usr/local/cuda-12.X/bin${PATH:+:${PATH}}' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.X/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
    source ~/.bashrc

    참고: Ubuntu 24는 Ubuntu 22.04와 호환되는 CUDA 패키지를 사용할 수 있습니다. 정확한 버전은 NVIDIA 웹사이트에서 확인해야 합니다.

  2. Miniconda/Anaconda 설치 및 가상 환경 생성:

    Python 3.8을 사용하는 가상 환경을 생성하고, 최신 CUDA 버전과 호환되는 PyTorch 버전을 설치합니다.

    # Miniconda 설치 (https://docs.conda.io/en/latest/miniconda.html)
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh
    
    # 가상 환경 생성 및 활성화
    conda create -n ai_project python=3.8
    conda activate ai_project
    
    # 최신 CUDA와 호환되는 PyTorch 설치 (예시: CUDA 12.1)
    # https://pytorch.org/get-started/locally/ 에서 정확한 명령 확인
    conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
    
    # 프로젝트별 추가 라이브러리 설치
    # pip install -r requirements.txt (이때 PyTorch 버전 불일치로 오류 발생 가능)
  3. 프로젝트 코드 수정:

    PyTorch 버전이 1.8.1에서 최신 버전(예: 2.x)으로 변경되므로, 프로젝트 코드에서 deprecated된 함수나 변경된 API 사용법을 찾아 수정해야 합니다. 이는 많은 시간과 노력을 필요로 할 수 있습니다.

3.3. 대안 2: Ubuntu 18.04 가상 머신(VM) 사용

가상 머신(VirtualBox, VMware 등)을 사용하여 Ubuntu 18.04를 설치하고, 그 안에 프로젝트의 모든 요구사항을 설정하는 방법입니다. GPU 가상화 및 패스스루 설정이 복잡하고, 노트북 환경에서는 성능 저하가 클 수 있어 Docker보다 덜 권장됩니다.

단계별 해결책:

  1. VirtualBox 또는 VMware Workstation Player 설치.
  2. Ubuntu 18.04 ISO 이미지를 다운로드하여 가상 머신 생성.
  3. 가상 머신 내부에 Ubuntu 18.04 설치.
  4. 가상 머신에 NVIDIA 드라이버, CUDA 11.1, PyTorch 1.8.1 등 프로젝트 요구사항 설치.
  5. GPU 패스스루(pass-through) 설정: 이 부분은 매우 까다로우며, 하드웨어 및 호스트 OS 지원 여부에 따라 불가능할 수도 있습니다.

4. 향후 예방을 위한 팁

이러한 환경 설정 문제를 겪지 않기 위한 몇 가지 예방 팁입니다.

  • 4.1. 환경 명세화 및 관리의 생활화

    새로운 프로젝트를 시작할 때부터 requirements.txt, environment.yml(Conda), 또는 Dockerfile 등을 사용하여 프로젝트의 모든 의존성을 명확하게 명세하고 관리해야 합니다. 이는 다른 개발자가 프로젝트에 참여하거나, 시간이 지난 후 프로젝트를 다시 구동할 때 발생할 수 있는 문제를 최소화합니다.

  • 4.2. 버전 고정의 중요성

    프로젝트에서 사용하는 주요 라이브러리(CUDA, PyTorch, TensorFlow, Python 등)는 특정 버전을 명시하여 고정하는 것이 좋습니다. pip install torch==1.8.1 torchvision==0.9.1 와 같이 버전을 정확히 지정하면, 예기치 않은 업데이트로 인한 호환성 문제를 방지할 수 있습니다.

  • 4.3. 컨테이너 기술(Docker) 숙달

    Docker와 같은 컨테이너 기술은 개발 환경의 재현성과 이식성을 극대화합니다. 특히 머신러닝/AI 프로젝트에서는 복잡한 GPU 환경 설정 때문에 필수적인 도구로 자리 잡고 있습니다. 학습하고 숙달하여 다양한 환경에서 유연하게 대처할 수 있도록 준비하는 것이 좋습니다.

  • 4.4. README 파일의 상세한 작성

    프로젝트의 README.md 파일에 환경 설정 방법, 필요한 라이브러리 버전, 설치 명령어 등을 상세하게 작성하여 다른 사용자(또는 미래의 자신)가 쉽게 프로젝트를 시작할 수 있도록 도와야 합니다. 이때, 예시로 든 문제처럼 이미지 대신 텍스트로 요구사항을 명시하는 것이 검색 및 접근성 측면에서 훨씬 좋습니다.

오래된 AI 프로젝트 환경 설정은 까다로울 수 있지만, Docker와 같은 도구를 활용하면 훨씬 효율적으로 해결할 수 있습니다. 이 글이 여러분의 개발 여정에 도움이 되기를 바랍니다!

댓글 남기기