나의 7월 3주차의 실망과 절망과 화와 열받음을 한 번에 담아 표현한 사진이다.
한 3,4일 간 CVPR 2025 Main으로 accept된 DocumentRAG 방법론인 VDocRAG 을 서버에 불러와서 기업 RAG과제를 하던 중 환경 설정에 이마가 뜨거워지도록 에러를 때려잡았던 날이 있었다. 진짜 버리고 싶을 정도였고,, 그리고 가장 이 삽질과 사태의 문제는 저 VDocRAG 논문의 저자들이 github에 CUDA를 제대로 명시하지 않은게 컸다.
오죽하면 3일차에 고생고생하다가 ㅋㅋㅋㅋㅋㅋㅋ
저자들 github Issue에 CUDA가 당최 몇 버전을 쓰냐는 질문도 내가 직접 했을 정도다... 물론 CVPR 2025 된거 축하해요~ 라는 선플도 썼다 ㅋㅋ
결론적으로는 CUDA 버전을 내가 직접 다른 패키지와 python 버전들을 보면서 하나하나 역 추적 했는데 그 과정에서 앞으로 무슨 설치를 하든 확실한 Route가 생겼고 정리해두려고 한다.
💡 무조건 CUDA 버전을 맞추는 Docker 세팅을 먼저 하고, NVCC -V 찍었을 때 확실히 CUDA 버전이 정확히 찍히는지 확인하고, 그 다음에 Venv 가상환경에서 python을 up-down해서 맞추고, 그 다음에 torch, flash-attn, faiss, transformer 등을 설치해야 한다.
내 모든 환경은 일단 docker에서 했고, 대부분의 연구자들이 docker환경일 거다.
이 과정이 제일 중요하다.
CUDA 버전과 연결된 package가 워낙 많다보니 잘 찾고 결정해서 설치해야하는데, 일반적으로 많은 git hub들은 CUDA 버전까지 명시해준다..
하지만 내가 사용하려는 Document RAG 모델은 CUDA 버전 명시가 없어서... 난 requirements.txt 파일의 다른 패키지 버전을 보고 CUDA를 역 추적했다.
이런거 만 봐도 알겠지만.... CUDA 신중하게 잘 골라야 한다.
나의 경우는 requirements.txt가 다음과 같았다.
deepspeed==0.14.5
accelerate==0.34.0
datasets==2.20.0
flash-attn==2.6.3
huggingface-hub==0.30.1
numpy==1.26.4
peft==0.11.1
pillow==10.4.0
torch==2.4.0
torchvision==0.19.0
tqdm==4.66.4
transformers==4.40.2
wandb==0.17.7
pyserini==0.44.0
faiss-gpu==1.7.2
✅ 일단 flash-attn은 torch, python에 의존성이 ㅈㄴ 강하고
✅ faiss-gpu는 python 버전이 너무 높으면 안된다는 github issue 들이 많고(python <=3.10 권장)
✅ 그리고 내가 쓰는 GPU서버의 Driver에서 CUDA stable 권장 버전은 12.3 임
이 것들 고려해서 삽질하다보니,,
CUDA 12.1이 내 환경에 맞다는 걸 이 사이트에서 따져보게 되었다. 그럼 12.1 CUDA가 설정된 docker 컨테이너를 파주면 된다.
CUDA 버전도 맞으면서 python 버전도 맞고 torch 버전까지 다 맞는 도커를 찾을 수도 있겠지만 생각보다 docker hub에 가면 괜찮은것도 있고, 실제로 pull해서 docker run하면 제대로 안되는 것도 많다. 그래서 CUDA 버전 정도만 일단 딱 맞는지 보고 그걸 까는걸 추천한다. python이나 torch는 버전이 맞으니까라는 생각으로 CUDA가 안 맞는게 굳이 그 도커이미지를 받아서 CUDA toolkit 버전을 추가로 올리려고 하는 행위는 하지 않는게 좋다. 내가 2일 정도 그 짓을 하다가 시간 다 보냈는데 CUDA를 toolkit만 따로 올리고 하는 걸 이 포스팅 보고 했는데 분명 CUDA toolkit를 올렸는데 flash-attn 설치를 하는데 온갖 CUDA관련 오류가 다 뜬다. 그냥 CUDA는 재조정이 답이 없다...
그러니 CUDA 버전을 확실히 Docker Image로 맞추자!!!
Docker Hub 에서 CUDA 버전을 검색해서 찾으면 된다. 여기서 팁은 CUDA 12.1이면 검색어로 cuda121
이렇게 검색해야한다. 그 여러 도커 이미지를 pull, 그리고 이상해서 remove를 하다가 괜찮은 거 하나 발견했다.
이 도커 이미지 괜찮은거 같다.
뱌로 docker pull isseyice/boltz-cuda121-torch231
해서 도커 이미지 다운을 했다. 이게 bash, python, cuda 등등 제대로 세팅이 된 친구들을 크기도 좀 크고 설치가 좀 걸리는게 당연하다. 아래 그림처러 설치가 쫘라락 된다.
도커 이미지가 다운 되면, 아래처러 docker 컨테이너를 rag_becky로 하나 만들어주었다. 저 이미지로 컨테이너 만든거다.
제대로 만들어지면 이렇게 컨테이너가 이미지가 보일거다.
헤딩 컨테이너를 실행해서 새창에서 열어본다.
그리고 CUDA 버전이 내가 그렇게 바라던 12.1 이 맞는지 아래처럼 확인해보면, 정확히 12.1 의 CUDA가 깔끔하게 세팅된게 확인된다.
주로 요즘에 CUDA를 맞춰서 도커 이미지를 받으면 적절한 python 이 이미 들어가 있다. 그래서 내가 설치한 친구는 python이 몇인가 찍어보니 3.11.17 이었다...
웬만하면 그냥 넘어갈거 같은데,,, RAG 모델들의 많은 모델들이 faiss-gpu 라이브러리를 쓴다. 이 라이브러리가 python 3.10이 이하가 권장이고 3.11부터 error reporting이 많았다... 그래서 가상환경을 만들면서 이 python버전을 좀 잡아주고자 하였다.
다행이도 내가 다운 받은 도커 이미지에 conda가 설치되어있어서 가상환경을 쉽게 conda 명령어로 만들 수 있었다. 위에처럼 myenv 라는 가상환경을 만들었고, 바로 뒤에 파이썬 버전을 3.10으로 확실히 잡아주었다.
그러면 가상환경이 파지면서 온갖 관련 라이브러리가 설치되고, 위 화면처럼 마지막에 가상환경을 activate하라는 명령어가 보이면 제대로 가상환경이 파진거다.
그럼 가상환경을 activate 해보겠다.
제대로 활성화가되사 (base)
가 (myenv)
로 바뀐게 보일거다. 내 가상환경으로 들어왔다는 거다. 그리고 그 안에서 조정해준 python 버전을 다시 찍어보면
이렇게 가상환경으로 설정한 python 3.10 버전이 맞게 깔렸다.
지금까지 일단 상황은 여기까지 온거다.
✅ CUDA 12.1
✅ Python 3.10
❌ Torch 등 라이브러리
pip list
로 설치된 라이브러리를 보면 뭐가 없다... 걍 이건 기둥만 있는데,, 여기에 이제 여러 패키지를 설치해줘야 한다.
우선적으로 만든 가상환경에 적절한 torch를 설치해야한다. torch의 경우 내가 가져오려는 논문 저자들이 requirement.txt에서 torch==2.4.0 torchvision==0.19.0
라고 명시를 했기에 pytorch 공식 홈에서 torch install 코드를 찾으면 된다.
저 공식홈에서 conda안에서 설치하는 코드를 해주면 되고, 내 CUDA0-12.1
과 torch-2.4.0
에 해당하는 명령어를 찾아서 bash 터미널에 실행하면 된다.
그 결과 Torch와 torch 관련 라이브러리가 한참 설치된다.
원하는 버전이 정확히 설치되었다.
이제 거의 다왔다 여기까지 온거다.
✅ CUDA 12.1
✅ Python 3.10
✅ Torch 2.4.0
❌ Project 요구 추가 패키지 설치 (flash-attn, transformer 등 등 )
CUDA, Python, Torch 정도 맞춰 놨으면 기타 파일은 무리 없이 쭉 install 될거다.
내 프로젝트 디렉토리로 와서 git에서 반든 프로젝트 파일에 있는 requirements를 설치해줄건데, pip install -r requirements.txt
해서 쫙 설치해주면 된다.
4-5일정도 여러 삽질하느라 힘들었는데 내가 이 세팅을 내 로컬, 연구실 서버 다 해봤지만, 이 route가 가장 베스트다.