본문으로 건너뛰기

[HPC 101] HPC에서 Python 쓰기: root 없이 Conda와 venv로 환경 만들기

Will Paik
작성자
Will Paik
대규모 GPU 클러스터를 최적화하는 HPC 엔지니어. 밤에는 방구석 미니 슈퍼컴퓨터를 조립하며(가끔은 태워 먹으며) 그 과정을 기록합니다.
HPC 101 - 이 글은 시리즈의 일부입니다.
파트 3: 이 글

잘 된 것처럼 보였습니다. 그런데 사실 숨겨진 문제가 생긴 겁니다.

HPC 101 시리즈에 돌아온 걸 환영합니다.

이전 포스트에서 데이터를 전송하는 방법을 배웠습니다. 이제 Python 코드를 실행할 준비가 됐죠. 로그인하고 pip install numpy를 입력하고 Enter를 눌렀습니다.

예전과 달리 ‘권한 없음’ 오류가 안 뜰 수도 있습니다. 대신 이런 메시지가 나옵니다.

[user123@compute-node-01 ~]$ pip install numpy
Defaulting to user installation because normal site-packages is not writeable
Collecting numpy
  Using cached numpy-2.3.5...
Installing collected packages: numpy
Successfully installed numpy-2.3.5

‘Successfully installed’라고 나왔으니 다 됐죠?

아니요. 방금 ‘사용자 설치’ 함정에 빠진 겁니다.

오늘은 왜 이 ‘자동’ 설치 방식이 HPC에서 위험한지, 그리고 가상 환경(Virtual Environment)으로 올바른 ‘개인 실험실’을 만드는 방법을 배울 겁니다.

1. 함정: ‘배낭’ 문제
#

시스템이 전역 라이브러리에 쓸 수 없다고 판단하면, 홈 폴더의 숨겨진 경로(보통 ~/.local/lib/python3.x/site-packages)에 조용히 패키지를 설치합니다.

비유를 들어보겠습니다.

  • 시스템 Python: 이건 레스토랑 주방 팬트리입니다. 기본 재료가 갖춰져 있고 손댈 수 없습니다.
  • 사용자 설치 (pip install): 이건 내 배낭입니다. 팬트리를 못 쓰니까 재료를 배낭에 막 넣는 겁니다.
  • 가상 환경: 이건 따로 마련한 도시락통입니다.

배낭(사용자 설치)이 나쁜 이유는 뭘까요?

격리 없음 (의존성 지옥): 프로젝트 A는 NumPy 1.20이 필요하고 프로젝트 B는 NumPy 2.0이 필요합니다. 배낭에 둘 다 넣으면 뒤엉켜요. 프로젝트 B를 고치려다 프로젝트 A가 망가지는 겁니다.

2. 해결책: 나만의 도시락통
#

파이썬 가상 환경

배낭에 다 쑤셔 넣는 대신 가상 환경(Virtual Environment)을 써야 합니다.

가상 환경은 내 개인 도시락통입니다.

  • 격리: ‘프로젝트 A 통’과 ‘프로젝트 B 통’을 따로 만듭니다. 서로 섞이지 않습니다.
  • 안전: 한 통에서 설치가 꼬여도 그냥 그 통만 버리면 됩니다. 다른 프로젝트는 안전합니다.

HPC에서 환경을 쓰는 건 ‘좋은 습관’ 수준이 아니에요. 살아남기 위한 유일한 방법입니다.

3. 도구 선택: Conda vs. Venv
#

환경을 만드는 주요 도구는 두 가지입니다. CondaVenv 중 뭘 써야 할까요?

Conda는:

플랫폼 무관 패키지 관리자로, Python 패키지뿐만 아니라 외부 라이브러리(C, C++, CUDA)까지 설치합니다.

장점으로는 Python 버전 관리(오늘은 3.8 환경, 내일은 3.12 환경), 바이너리 의존성 처리(GPU 지원 라이브러리 CUDA/cuDNN을 자동으로 처리)가 있습니다.

단점으로는 용량이 크고(venv보다 디스크를 많이 씁니다), 느린 경우가 있고(의존성 해결에 시간이 걸릴 수 있습니다), 셸 오염 문제가 있습니다(conda init을 잘못 쓰면 터미널이 망가질 수 있습니다. 2단계 참고).

주의: 최근 Anaconda 라이선스 변경으로 많은 HPC 센터가 Anaconda/Miniconda에서 Miniforge로 전환하고 있습니다. 기본값으로 무료 conda-forge 채널을 씁니다. 명령어와 워크플로는 동일합니다. 자세한 내용은 Anaconda 이용약관을 참고하세요.

추천: 과학 연구, 엔지니어링, AI/ML 프로젝트에 가장 좋은 선택입니다.

Venv는:

가벼운 가상 환경을 만드는 Python 내장 모듈입니다.

장점으로는 가볍고 빠름(Python 내장, 즉시 생성), 깔끔함(셸 설정 파일을 건드리지 않습니다)이 있습니다.

단점으로는 제한적(CUDA 드라이버 같은 Python 외부 도구 설치가 어렵습니다), Python 버전 종속(시스템 Python 버전에 묶입니다)이 있습니다.

추천: 단순한 Python 스크립트나 순수 소프트웨어 개발에 좋습니다.

4. 환경 만들어보기
#

실제로 해보겠습니다.

1단계: 환경 생성
#

# 1. 모듈 로드
$ module load miniconda3

# 2. 환경 생성
$ conda create --name myenv python=3.13

# 홈 디렉토리 공간 절약을 위해 연구실 그룹 디렉토리에 저장하기
$ conda create --prefix /projects/myLAB/myCondaEnv python=3.13
# 1. Python 모듈 로드
$ module load python/3.13.10

# 2. 환경 생성
$ python3 -m venv /projects/myLAB/myenv

# 홈 디렉토리 공간 절약을 위해 연구실 그룹 디렉토리에 저장하기
$ python3 -m venv /projects/myLAB/myVenv

2단계: 활성화 (올바른 방법)
#

경고: conda init을 실행하지 마세요

많은 튜토리얼에서 conda init을 실행하라고 합니다. HPC에서는 위험합니다. .bashrc 파일을 수정해서 로그인할 때마다 (base) 환경이 자동으로 활성화되게 만드는데, 이러면,

  • 시스템 모듈(OpenMPI, GCC)과 충돌이 생길 수 있습니다.
  • Open OnDemand 실패: Jupyter나 RStudio 세션이 시작 안 될 수 있습니다.

이미 실행했다면 자동 활성화를 끄세요.

$ conda config --set auto_activate_base false

대신 source activate <ENV> 또는 전체 경로를 쓰세요.

# "HPC 안전" 방법 (권장)
$ source activate /projects/myLAB/myCondaEnv

# 또는 모듈 시스템을 올바르게 쓰고 있다면:
$ conda activate /projects/myLAB/myCondaEnv
# activate 스크립트를 source로 실행
$ source /projects/myLAB/myVenv/bin/activate

3단계: 패키지 설치
#

# 바이너리 의존성(CUDA 등)을 더 잘 처리합니다
$ module load cuda/12.8
# CUDA 버전을 맞춰야 합니다
(myCondaEnv) $ conda install -c conda-forge cupy cuda-version=12.8
(myCondaEnv) $ conda install numpy pandas
# Conda와 Venv 모두에서 작동합니다
(myVenv) $ pip install matplotlib huggingface-hub

기본 원칙: 활성화된 환경 에서만 pip install을 실행합니다.

4단계: 비활성화
#

# Conda의 경우
$ conda deactivate

# Venv의 경우
$ deactivate

5. 유지 관리: 캐시 청소
#

언젠가 이런 오류를 보게 될 겁니다: Disk quota exceeded.

폴더를 확인해봤는데 별로 크지 않습니다. 공간은 어디로 간 걸까요? Conda와 pip 모두 다운로드한 파일을 숨겨진 캐시 폴더(~/.conda/pkgs 또는 ~/.cache/pip)에 저장합니다. 10GB 이상 쉽게 불어나요.

올바른 청소 방법:

# 사용하지 않는 패키지와 캐시 제거
$ conda clean --all

# pip 캐시 제거
$ pip cache purge

최후의 수단: 디스크가 100% 꽉 찼다면 위 명령어가 잠금 파일을 생성하지 못해 실패할 수 있습니다. 그럴 때는 직접 삭제합니다.

# 주의: rm -rf는 신중하게 사용하세요
# Conda의 경우
$ rm -rf ~/.conda/pkgs/*

# pip의 경우
$ rm -rf ~/.cache/pip/*

캐시를 삭제해도 설치된 환경은 망가지지 않습니다. 다운로드된 설치 파일만 삭제됩니다.

노트: 기본적으로 Conda는 다운로드한 패키지를 ~/.conda/pkgs에 저장합니다. 대부분의 HPC 클러스터는 홈 디렉터리 용량 제한(quota)이 있어서, 이 캐시가 생각보다 빠르게 공간을 차지할 수 있어요. 캐시 위치를 스크래치나 프로젝트 디렉터리로 바꾸려면:

[user@login ~]$ conda config --add pkgs_dirs /scratch/user123/pkgDir

또는 ~/.condarc 파일을 직접 수정해도 됩니다:

pkgs_dirs:
  - /scratch/user123/pkgDir

6. 요약 & 치트시트
#

HPC에서 환경을 쓰는 건 작업 공간을 깔끔하게 유지하고 ‘디스크 할당량 초과’ 오류를 예방하기 위해서입니다.

작업 Conda 명령어 Venv 명령어
생성 conda create --prefix <경로> python -m venv <경로>
활성화 source activate <경로> source <경로>/bin/activate
설치 conda install / pip install pip install
청소 conda clean --all pip cache purge

조언: 새로 시작한다면 AI/HPC 프로젝트에는 Miniforge가 가장 안전한 선택입니다. Conda 워크플로 그대로 쓰면서 conda-forge 패키지를 쓸 수 있고 라이선스 걱정도 없습니다. 클러스터가 이미 Miniconda나 Anaconda를 제공한다면 그것도 괜찮습니다. 그리고 제발, 로그인을 깔끔하게 유지하기 위해 conda init은 피하세요.

즐거운 컴퓨팅 되세요!

HPC 101 - 이 글은 시리즈의 일부입니다.
파트 3: 이 글