dev.Log
CUDA + PyTorch에서 pip vs conda 차이 본문
같은 PyTorch인데 왜 설치 방법에 따라 지옥이 갈릴까?
PyTorch를 CUDA 환경에서 설치할 때 대부분 한 번쯤 겪는다.
- pip install torch → 에러
- conda install pytorch → 갑자기 잘 됨
- 서버에선 또 안 됨
- Docker에선 다시 다름
이 글에서는 CUDA + PyTorch 환경에서 pip와 conda가 근본적으로 무엇이 다른지,
그리고 언제 무엇을 써야 하는지를 실전 기준으로 정리한다.
1. 핵심 결론 요약
구분pipconda
| CUDA 포함 여부 | ❌ (wheel에 포함) | ⭕ (패키지로 관리) |
| libc / libstdc++ | OS 의존 | conda가 제공 |
| 설치 안정성 | 환경 의존 | 매우 안정 |
| 운영 서버 | ⭕ | ❌ |
| 연구/실험 | △ | ⭕ |
| Docker 궁합 | ⭕ | △ |
한 줄 요약하면:
pip은 OS에 맞춰 얹는 방식,
conda는 CUDA 생태계를 통째로 들고 오는 방식
2. pip로 설치한 PyTorch + CUDA 구조
설치 예시
pip install torch torchvision torchaudio \ --index-url https://download.pytorch.org/whl/cu121
내부 구조
- PyTorch wheel 안에:
- CUDA runtime
- cuDNN
- cuBLAS
- NCCL (일부)
- 하지만 다음은 포함하지 않음
- glibc
- libstdc++
- NVIDIA driver
즉,
[OS glibc] ← 반드시 호환돼야 함 [GPU Driver] [PyTorch wheel (CUDA 포함)]
특징
- wheel은 특정 glibc 버전 이상을 전제로 빌드
- OS가 오래되면 바로 터짐
자주 나는 에러
GLIBC_2.28 not found GLIBCXX_3.4.26 not found
요약
- pip + CUDA PyTorch는 OS 의존성이 매우 강함
- 대신 가볍고 Docker에 적합
3. conda로 설치한 PyTorch + CUDA 구조
설치 예시
conda install pytorch pytorch-cuda=12.1 -c pytorch -c nvidia
내부 구조
- conda env 안에 포함:
- CUDA runtime
- cuDNN
- cuBLAS
- NCCL
- libc
- libstdc++
- OpenMP / MKL
구조는 사실상 이렇다.
[OS kernel] [GPU Driver] [conda env = mini OS]
특징
- OS glibc와 거의 독립
- 오래된 서버에서도 잘 동작
- 연구 환경에서 “설치 스트레스 0”
단점
- env 하나가 수백 MB ~ 수 GB
- LD_LIBRARY_PATH 오염
- 운영 서버에선 위험
4. 왜 conda는 “잘 되고”, pip는 “자주 깨질까?”
핵심 차이는 ABI 책임 범위다.
pip
- ABI 책임: OS
- PyTorch wheel은 “이 OS가 최신일 거라 가정”
conda
- ABI 책임: conda
- OS 위에 자체 ABI 계층을 깔아버림
그래서:
- 오래된 CentOS 7
- glibc 2.17
- libstdc++ 낮은 서버
→ pip는 실패
→ conda는 성공
5. 운영 서버에서 conda가 위험한 이유 (요약)
conda가 잘 되는 이유 = 운영에서 위험한 이유
- libc / libstdc++를 자체 제공
- LD_LIBRARY_PATH를 강제로 우선 적용
- 다른 C++ 서비스와 충돌
- systemd, cron, Jenkins와 궁합 나쁨
즉:
“conda는 서버 전체에 영향”
“pip는 해당 프로세스에만 영향”
6. Docker에서는 왜 pip가 더 선호될까?
Docker에서는 상황이 바뀐다.
이유
- OS 환경이 고정됨
- glibc 버전 예측 가능
- 이미지 자체가 격리
그래서:
- nvidia/cuda:12.x-runtime + pip torch
→ 가장 안정적인 운영 조합
반대로:
- Docker 안에서 conda
→ 이미지 커짐 + 복잡도 증가
7. 실전 선택 가이드
연구 / 실험
- 로컬 PC
- 연구 서버
- Jupyter
→ conda
운영 서버 (Bare-metal / VM)
- REST API
- STT / RAG 서비스
→ pip + venv
(또는 Docker로 감싸기)
운영 서버 (Docker / Kubernetes)
- GPU 추론
- LLM 서빙
→ CUDA runtime 이미지 + pip torch
학습 전용 서버
- 장시간 GPU 학습
- 여러 CUDA 버전 실험
→ conda or PyTorch 공식 Docker
8. 가장 안전한 조합 정리
환경추천
| 로컬 ML 실험 | conda |
| 서버 Python 서비스 | venv + pip |
| GPU 추론 (Docker) | CUDA runtime + pip |
| 대규모 학습 | PyTorch 공식 Docker |
| 운영 서버 + conda | ❌ |
결론
- pip이 불안한 게 아니라
OS와 CUDA ABI를 그대로 믿는 구조일 뿐이다. - conda가 편한 대신
운영 안정성을 대가로 삼는다.
연구에는 conda
운영에는 pip + Docker
이 경계만 지켜도
CUDA + PyTorch로 인한 장애는 크게 줄어든다.
'인공지능' 카테고리의 다른 글
| systemd에서 conda 서비스가 안 뜨는 이유 (0) | 2026.01.02 |
|---|---|
| ML Docker 이미지 크기 줄이는 법 (0) | 2026.01.02 |
| 운영 서버에서 conda 쓰면 실제로 터지는 사례들 (0) | 2026.01.02 |
| conda vs venv vs Docker (0) | 2026.01.02 |
| Whisper vs NeMo (EPD) (0) | 2025.12.30 |
Comments