클러스터 접속 권한이 생겼습니다. 터미널도 열려 있습니다. 이제 뭘 해야 할까요?
방금 클러스터 접속 권한을 받았습니다. 호스트명, 사용자 이름, 그리고 빈 터미널이 있습니다. 이 글에서는 첫 번째 실제 작업까지 도달합니다. SSH로 접속하고, 모듈 시스템으로 소프트웨어를 로드하고, Slurm으로 실제 컴퓨트 노드에서 무언가를 실행하는 과정입니다.
1. HPC란 무엇인가요? #
HPC(고성능 컴퓨팅, High-Performance Computing)는 슈퍼컴퓨터나 컴퓨터 클러스터를 사용해서 복잡한 계산 문제를 해결합니다. 일반 워크스테이션이 일상적인 작업을 처리하는 반면, HPC는 공학, 과학에서 금융, 심리학까지 다양한 분야에서 사용되는 대규모 계산을 위해 설계됩니다. AI와 머신 러닝의 시대에 급격히 성장하는 기술이기도 합니다.
한국에서는 KISTI의 누리온(Nurion)/뉴론(Neuron), NIPA AI 컴퓨팅 센터, 또는 소속 대학의 연구 클러스터 등에서 HPC 자원을 접할 수 있습니다.
전 세계의 연구 기관과 기업이 새로운 제품 개발이나 집중적인 시뮬레이션 실행에 HPC를 사용합니다. 세계에서 가장 빠른 HPC 시스템 중 하나인 El Capitan은 Lawrence Livermore National Laboratory에 있습니다.

HPC를 쓰는 이유 #
일반 데스크탑 PC로는 처리할 수 없는 고성능 계산이 필요한 문제를 해결하기 위해 HPC를 씁니다. 몇 가지 예시입니다.
- AI/ML: 여러 GPU를 사용해서 대규모 모델 학습
- 제약: 새로운 의약품 개발을 위한 분자 동역학 시뮬레이션
- 물리/화학: 양자 화학 계산이나 단백질 폴딩 시뮬레이션
- 기상학: 정확한 날씨 예보를 위한 대규모 데이터 처리
2. HPC 클러스터에 SSH 접속하기 #
계산하기 전에 클러스터에 연결해야 합니다.
SSH란 무엇인가요? #
SSH(Secure Shell)는 컴퓨터 간 보안 연결을 가능하게 하는 네트워크 프로토콜입니다. 원격 접속, 명령 실행, 파일 전송에 사용합니다. 너무 기술적으로 들려도 걱정하지 마세요. 간단히 말해서 내 PC와 HPC 클러스터를 연결하는 보안 터널입니다.
접속해봅니다! #
-
터미널 창을 엽니다.
-
다음 명령어를 입력합니다.
$ ssh <YOUR_ID>@<CLUSTER_HOST_NAME>
# 예시: $ ssh [email protected]($ 기호는 커맨드라인 프롬프트입니다. 타이핑하지 않아도 됩니다.)
-
보안 프롬프트: 처음 연결하면 “Are you sure you want to continue connecting?” 메시지가 나옵니다.
yes를 입력하고 Enter를 누르세요. -
패스워드 입력:
패스워드를 입력합니다.
참고: 입력할 때 별표(
****)나 커서 움직임이 보이지 않습니다. Linux의 표준 보안 기능입니다. 패스워드를 입력하고 Enter를 누르면 됩니다.
- 성공:
아래와 같은 화면이 보이면 로그인에 성공한 겁니다!
[user123@login-01 ~]$3. 모듈 사용법 #
HPC에서는 sudo apt-get이나 sudo dnf로 소프트웨어를 설치할 수 없습니다. 대신 모듈 시스템(Module System)을 사용합니다.
모듈 시스템이란 무엇인가요? #
대부분의 HPC 클러스터는 Environment Modules나 Lmod 같은 모듈 시스템으로 소프트웨어를 관리합니다. 개인 컴퓨터와 달리 HPC 클러스터는 모듈로 소프트웨어를 관리해서 다음을 지원합니다.
- 충돌 없음: 서로 다른 사용자가 동시에 서로 다른 소프트웨어 버전을 사용할 수 있습니다
- 재현성: 연구 환경을 일관성 있게 유지할 수 있습니다
- 자동 로딩: 모듈을 로드하면 (예: OpenMPI) 필요한 의존성(예: GCC 컴파일러)이 자동으로 로드됩니다
주요 명령어 #
모듈 명령어 치트시트입니다.
# 시스템의 사용 가능한 모든 모듈 보기
$ module avail
# 특정 모듈 로드
$ module load <NAME>/<VERSION>
# 예시: module load openmpi/4.1.8
# 현재 로드된 모듈 목록 보기
$ module list
# 모듈 언로드
$ module unload <NAME>
# 모든 모듈 언로드
$ module purge권장 사항 #
.bashrc피하기:.bashrc파일에module load명령어를 넣지 마세요. 충돌과 로그인 문제가 생길 수 있습니다.- 먼저 가용성 확인:
module avail로 정확한 이름과 버전을 확인합니다.- 구체적으로 지정: 항상 버전 번호를 지정합니다 (예:
module load openmpi/4.1.8). 지정하지 않으면 기본 버전이 로드되는데, 나중에 변경될 수 있습니다.
4. Slurm으로 첫 번째 작업 제출하기 #
이제 작업을 제출할 준비가 됐습니다.
작업 스케줄러(Job Scheduler)란? #
HPC 환경에서는 로그인 노드(Login Node)에서 직접 무거운 계산을 실행하지 않습니다. 대신 Slurm, PBS, SGE, LSF 같은 스케줄러(Scheduler)에 ‘작업(Job)‘을 제출합니다. 스케줄러가 리소스를 관리하고 사용 가능한 컴퓨트 노드(Compute Node)에 작업을 배정해줍니다.
참고: 이 튜토리얼은 현대 HPC 시스템에서 가장 널리 쓰이는 스케줄러인 Slurm에 초점을 맞춥니다. PBS/Torque 예시도 참고용으로 제공하지만, 명령어와 옵션이 다를 수 있습니다. 스케줄러별 문법은 항상 소속 클러스터의 문서를 확인하세요.
- 인터랙티브 작업: 개발, 디버깅, GUI가 필요한 작업에 유용합니다. 컴퓨트 노드에서 셸을 받습니다.
- 배치 작업: 오래 걸리는 작업에 유용합니다. 스크립트를 제출하면 시스템이 리소스가 사용 가능할 때 실행합니다.
호텔 비유 #
초보자들이 로그인 직후 바로 무거운 작업을 실행하는 실수를 곧잘 합니다. 하지만 그러면 안 됩니다.
HPC 클러스터를 호텔로 생각해봅시다.
- 로그인 노드 = 호텔 로비: 체크인하는 곳입니다. 공용 공간입니다. 로비에 텐트 치고 자지는 않잖아요?
- 컴퓨트 노드 = 객실: 실제로 일(잠)할 수 있는 개인 공간입니다.
- 스케줄러 = 프런트 데스크: 프런트 데스크 직원(스케줄러)에게 방(리소스)을 요청하면 배정해줍니다.
Slurm 같은 작업 스케줄러를 사용해서 리소스를 요청합니다.
인터랙티브 작업 제출해보기 #
실시간으로 코드를 테스트하거나 디버깅할 때 사용합니다.
- 세션 요청 (방 받기):
[user123@login-01]$ srun --pty bash
srun: job 12345 queued and waiting for resources
srun: job 12345 has been allocated resources
[user123@compute-01]$
# 참고: 클러스터에 따라 파티션 지정이 필요할 수 있습니다:
# $ srun -p interactive --pty bash호스트명이 login-01에서 compute-01로 바뀌었습니다. 이제 “객실"에 있는 겁니다.
- 작업이 끝나면
exit를 입력해서 로그인 노드(로비)로 돌아갑니다.
[user123@compute-01 ~]$ exit
[user123@login-01 ~]$배치 작업 제출해보기 #
오래 걸리는 시뮬레이션을 위한 방식입니다. “배치 스크립트”(예약 요청서)를 작성하고 제출합니다.
- 스크립트 만들기 (예:
job_script.sh).vim이나nano같은 텍스트 에디터를 사용합니다.
#!/bin/bash
# Bash 스크립트임을 시스템에 알려줘요
#SBATCH --account=myAcct # 계정 이름
#SBATCH --partition=myPart # 파티션 이름
#SBATCH --job-name=first_job # 작업 이름
#SBATCH --output=result.out # 표준 출력 로그
#SBATCH --error=result.err # 표준 오류 로그
#SBATCH --nodes=1 # 노드 수
#SBATCH --ntasks=1 # 태스크(프로세스) 수
#SBATCH --time=00:10:00 # 시간 제한 (HH:MM:SS)
#SBATCH --mem-per-cpu=4G # CPU당 메모리
# 필요한 모듈 로드
module load python/3.12.12
# 명령어 실행
echo "Hello, HPC World!"
python3 --version#!/bin/bash
# Bash 스크립트임을 시스템에 알려줘요
#PBS -A myAcct # 계정 이름
#PBS -q myQueue # 큐 이름
#PBS -N first_job # 작업 이름
#PBS -o result.out # 표준 출력 로그
#PBS -e result.err # 표준 오류 로그
#PBS -l nodes=1:ppn=1 # 노드와 노드당 프로세서 수
#PBS -l walltime=00:10:00 # 시간 제한 (HH:MM:SS)
#PBS -l pmem=4gb # CPU당 메모리
# 필요한 모듈 로드
module load python/3.12.12
# 작업 제출 디렉토리 변경
cd $PBS_O_WORKDIR
# 명령어 실행
echo "Hello, HPC World!"
python3 --version- 주의사항:
- 요구 사항에 맞게 스크립트를 수정해야 합니다
(중요: “myAcct"와 “myPart"는 시스템 관리자가 제공한 실제 계정과 파티션 이름으로 바꿉니다) - #SBATCH: Slurm 스케줄러가 읽는 지시문입니다
(#SBATCH는 “# SBATCH"가 아닌 하나의 단어입니다) - 실제 작업 내용은 Slurm 지시문 아래에 위치합니다
- 작업이 완료되면 자동으로 종료됩니다
- 요구 사항에 맞게 스크립트를 수정해야 합니다
- 작업 제출:
$ sbatch job_script.sh
Submitted batch job 12345$ qsub job_script.sh
12345.headnode(이 작업 ID (12345)를 기억해두고 문의 시 이 번호를 참조합니다!)
- 상태 확인:
$ squeue --me
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
12345 myPart first_job user123 R 0:02 1 compute-01$ qstat -u user123
Job ID Name User Time Use S Queue
-------- -------- -------- -------- - -----
12345 first_job user123 0:02 R myQueue- 작업 상태 열 (Slurm):
| 컬럼 | 설명 |
|---|---|
| JOBID | 작업에 할당된 ID |
| PARTITION | 파티션 이름 |
| NAME | 작업 이름 |
| USER | 사용자 이름 |
| ST | 작업 상태: R=실행중, PD=대기중, F=실패, S=일시중지, CG=완료중 |
| TIME | 작업 시작 후 경과 시간 |
| NODES | 요청한 노드 수 |
작업을 취소하려면 scancel <JOBID>를 사용합니다.
$ scancel 12345$ qdel 12345- 결과 확인: 작업이 완료되면 (
squeue에서 사라지면) 출력 파일을 확인합니다.
# 성공 로그
$ cat result.out
Hello, HPC World!
Python 3.12.12
# 오류 로그 (문제가 있을 때)
$ cat result.err요약
- SSH: 클러스터에 접속하는 보안 터널
- 모듈: 소프트웨어 로드
- 로그인 노드 (로비): 체크인만 하는 곳
- 컴퓨트 노드 (객실): 실제 작업을 실행하는 곳. 스케줄러가 배정해줍니다
- 작업 제출: 배치 스크립트에는
sbatch, 인터랙티브 작업에는srun
축하합니다! 로그인하고, 환경을 설정하고, 첫 번째 작업을 실행했습니다. 다음 글에서는 짐(데이터)을 이 새 호텔 방으로 옮기는 방법을 배워보겠습니다.
도움이 필요하면:
- 클러스터 문서에서 Slurm 구성 확인
man sbatch로 모든 사용 가능한 옵션 확인- 대부분의 클러스터에는
help채널이나 지원 이메일이 있습니다
즐거운 컴퓨팅 되세요!