Kubernetes Set Up
Kubernetes Set Up
ICD-Coding
프로젝트를 쿠버네티스 환경에서 실행하기 위한 Deployment, Service, Job manifest 예시와 설정 방법을 정리하였습니다.
1. Deployment
GPU 자원을 활용하여 SSH 접속 가능한 컨테이너를 띄우기 위한 설정입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ssh-csh # 서비스 라벨, 자유롭게 변경 가능
name: ssh-csh-deployment # Deployment 이름, -deployment 형태 권장
spec:
replicas: 1 # Pod 개수
selector:
matchLabels:
app: ssh-csh # 위의 라벨과 동일해야 함
template:
metadata:
labels:
app: ssh-csh # 동일 label 유지
spec:
imagePullSecrets:
- name: harbor # 프라이빗 레지스트리 인증 시 필요
securityContext:
runAsUser: 0 # UID (root 대신 계정에 맞게 변경 권장)
runAsGroup: 0 # GID (계정 그룹에 맞게 변경)
fsGroup: 1007 # 파일 시스템 그룹 ID, 계정에 맞게 수정
affinity:
nodeAffinity: # 특정 노드에 스케줄링 강제
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia.com/gpu.product
operator: In
values:
- NVIDIA-RTX-4000-Ada-Generation # 원하는 GPU 모델
restartPolicy: Always # Pod 재시작 정책
volumes:
- name: shmdir
emptyDir:
medium: Memory # 메모리 기반 공유 디렉토리
- name: pvc-volume
persistentVolumeClaim:
claimName: XXXX-nfs # PVC 이름, 환경에 맞게 수정
containers:
- name: gpu-container # 컨테이너 이름
image: registry.XXXX.ai/model-medical/icd-coding # 컨테이너 이미지
volumeMounts:
- mountPath: /dev/shm
name: shmdir
- mountPath: /home/ # 실제 NFS 경로 필요시 변경
name: pvc-volume
env:
- name: GIT_TOKEN
valueFrom:
secretKeyRef:
name: gitlab # Git 인증 시크릿
key: gitlab-token
- name: HOME
value: /workspace/
- name: PYTHONUSERBASE
value: /workspace/.local
command: ["/bin/sh", "-c"]
args:
- |
set -x
groupadd -g 1007 XXXX
useradd -m -d /workspace -s /bin/bash -u 1007 -g XXXX XXXX
usermod -aG sudo XXXX
echo "XXXX:password" | chpasswd
chown XXXX:XXXX /workspace
chown XXXX:XXXX /home/tabular/icd-coding
apt-get update
apt-get install -y --reinstall ca-certificates git openssh-server
pip install -U scikit-learn scipy
cd /workspace
runuser -u XXXX -- git clone -b binary-simple https://XXXX:$GIT_TOKEN@git.XXXX.ai/ai/sleep-apnea/ecgdualnet.git dualnet
service ssh start
sleep infinity
resources:
requests:
nvidia.com/gpu: 1 # 최소 GPU 요구
limits:
nvidia.com/gpu: 1 # 최대 GPU 사용 제한
livenessProbe:
exec:
command: ["nvidia-smi"] # GPU 상태 체크
initialDelaySeconds: 10
periodSeconds: 30
2. Service
외부에서 Pod에 SSH 접속할 수 있도록 노출하는 설정입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Service
metadata:
name: ssh-csh-service # 서비스 이름
labels:
app: ssh-csh # 라벨, Deployment와 동일해야 함
spec:
selector:
app: ssh-csh # Deployment와 동일해야 함
ports:
- protocol: TCP
name: ssh
port: 22 # 외부에 노출될 포트
targetPort: 22 # 컨테이너 내부 포트
type: LoadBalancer # 외부 접근 허용
3. Job
모델 학습/실험 실행을 위한 일회성 잡(Job) 설정입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
apiVersion: batch/v1
kind: Job
metadata:
name: XXXX-icdcoding-job # Job 이름
namespace: XXXX # 네임스페이스
spec:
ttlSecondsAfterFinished: 300 # 완료 후 300초 뒤 삭제
template:
spec:
restartPolicy: Never # 실패 시 재시작하지 않음
securityContext:
fsGroup: 1007 # 그룹 ID
runAsUser: 1007 # 사용자 UID
runAsGroup: 1007 # 사용자 GID
imagePullSecrets:
- name: harbor # 프라이빗 레지스트리 인증
volumes:
- name: shmdir
emptyDir:
medium: Memory
- name: pvc-volume
persistentVolumeClaim:
claimName: XXXX-nfs # PVC 이름
containers:
- name: gpu-container
image: registry.XXXX.ai/model-medical/icd-coding
command: ["/bin/sh", "-c"]
volumeMounts:
- mountPath: /dev/shm
name: shmdir
- mountPath: /home/
name: pvc-volume
env:
- name: WANDB_API_KEY
valueFrom:
secretKeyRef:
name: wandb
key: wandb-api-key
- name: HOME
value: /home/XXXX/tabular/icd-coding
args:
- |
set -x
export PATH=/opt/conda/envs/coding/bin:$PATH
cd "$HOME"
which python
python -c "import torch; print('torch module at', torch.__file__)"
python -c "import torch; print('cuda version:', torch.version.cuda, 'available:', torch.cuda.is_available())"
exec python main.py experiment=mimiciv_icd10/plm_icd gpu=0 load_model=/home/XXXX/tabular/icd-coding/experiments/ylgrf0rl trainer.epochs=0
resources:
requests:
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
nodeSelector:
role: train # 특정 role의 노드에만 스케줄링
backoffLimit: 3 # 재시도 횟수 제한
주요 변경 포인트
app
,name
,claimName
,namespace
→ 환경 맞게 수정 필요image
→ 실제 사용하는 레지스트리 경로로 변경UID
,GID
→ 계정에 맞게 조정mountPath
→ 실제 NFS 마운트 경로 확인 필요- SSH 기본 비밀번호(
password
) → 접속 후 반드시 변경
맺음말
위 manifest는 ICD-Coding 프로젝트를 GPU 클러스터 환경에서 안정적으로 실행하기 위해 설계되었습니다. Deployment는 SSH 접근용, Service는 외부 노출, Job은 학습 실행을 담당합니다. 실제 사용 시에는 계정 및 저장소 경로, 보안 설정(비밀번호·토큰 등)을 반드시 환경에 맞게 수정해야 합니다.
안정적인 연구 및 개발 환경 구축에 참고하시기 바랍니다. 🚀
This post is licensed under CC BY 4.0 by the author.