안녕하세요, 개발자 여러분! 오래된 인공지능(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는 애플리케이션과 그 종속성을 컨테이너라는 독립된 환경에 패키징하여, 어떤 환경에서든 동일하게 실행될 수 있도록 돕는 기술입니다. 오래된 프로젝트를 최신 시스템에서 재현할 때 가장 효과적인 방법입니다.
단계별 해결책:
-
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 -
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 공식 이미지입니다. 이 이미지를 사용하면 가장 간단하게 환경을 구성할 수 있습니다. -
컨테이너 빌드 및 실행:
프로젝트 루트 디렉터리에서 다음 명령어를 실행하여 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)을 유지할 수 없으며, 코드 수정이 거의 필수적입니다.
단계별 해결책:
-
최신 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 웹사이트에서 확인해야 합니다.
-
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 버전 불일치로 오류 발생 가능) -
프로젝트 코드 수정:
PyTorch 버전이 1.8.1에서 최신 버전(예: 2.x)으로 변경되므로, 프로젝트 코드에서 deprecated된 함수나 변경된 API 사용법을 찾아 수정해야 합니다. 이는 많은 시간과 노력을 필요로 할 수 있습니다.
3.3. 대안 2: Ubuntu 18.04 가상 머신(VM) 사용
가상 머신(VirtualBox, VMware 등)을 사용하여 Ubuntu 18.04를 설치하고, 그 안에 프로젝트의 모든 요구사항을 설정하는 방법입니다. GPU 가상화 및 패스스루 설정이 복잡하고, 노트북 환경에서는 성능 저하가 클 수 있어 Docker보다 덜 권장됩니다.
단계별 해결책:
- VirtualBox 또는 VMware Workstation Player 설치.
- Ubuntu 18.04 ISO 이미지를 다운로드하여 가상 머신 생성.
- 가상 머신 내부에 Ubuntu 18.04 설치.
- 가상 머신에 NVIDIA 드라이버, CUDA 11.1, PyTorch 1.8.1 등 프로젝트 요구사항 설치.
- 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와 같은 도구를 활용하면 훨씬 효율적으로 해결할 수 있습니다. 이 글이 여러분의 개발 여정에 도움이 되기를 바랍니다!
![[에러 해결] snAPI: OSError: access violation Python 버전 호환성 원인과 해결 방법 [에러 해결] snAPI: OSError: access violation Python 버전 호환성 원인과 해결 방법](https://dev-error.com/wp-content/plugins/contextual-related-posts/default.png)