왜 HPC/GPU 운영에 Ansible이 중요한가
HPC/GPU 클러스터는 수십~수백 대의 노드와 다양한 하드웨어(GPU 모델, 메모리 크기, 네트워크 구성)를 포함합니다.
이 환경에서 GPU 드라이버, CUDA 라이브러리, Slurm 설정, 모니터링 에이전트 등을 모든 노드에 일관되게 적용하는 것은 필수입니다.
수동 작업은 시간이 오래 걸리고, 설정 불일치(Configuration Drift)로 장애 가능성이 높아집니다.
Ansible은 Agentless(에이전트 불필요) 방식의 자동화 도구로, SSH 연결만으로 모든 노드에 작업을 일괄 적용할 수 있습니다.
HPC 환경에서 Ansible을 쓰면 다음과 같은 장점이 있습니다.
- 재현 가능성: 동일 Playbook 실행 시 항상 동일 결과 보장
- 확장성: 노드 수가 증가해도 동일 구조로 적용 가능
- 가독성: YAML 기반이라 코드 리뷰 및 협업이 용이
- 유연성: 특정 그룹/노드만 선택적으로 배포 가능
1. Inventory – 대상 노드 정의
Inventory는 Ansible이 작업을 적용할 호스트 목록을 정의하는 파일입니다.
HPC에서는 일반적으로 노드를 파티션/역할별로 그룹화합니다.
# inventory.ini
[controller]
ctrl01 ansible_host=192.168.0.10 gpu_type=A100 gpu_mem=80G
[compute]
node[01:04] ansible_host=192.168.0.[11:14] gpu_type=V100 gpu_mem=32G
[all:vars]
ansible_user=hpcadmin
ansible_ssh_private_key_file=~/.ssh/id_rsa
💡 팁: GPU 모델·메모리 용량을 변수로 정의하면, 조건문(when)으로 특정 하드웨어에만 설치를 적용할 수 있습니다.
또한 동적 인벤토리를 사용하면 클라우드 API(AWS, Azure)나 CMDB에서 실시간으로 노드 목록을 불러와 스케일 아웃 환경에 대응할 수 있습니다.
2. Playbook – 작업 시나리오 정의
Playbook은 여러 작업(Task)을 순차적으로 실행하는 시나리오 파일입니다.
HPC 환경에서는 GPU 드라이버 설치, CUDA 배포, Slurm 설정, 모니터링 에이전트 설치 등에 사용됩니다.
# gpu_setup.yaml
- hosts: compute
become: yes
tasks:
- name: NVIDIA Driver 설치
apt:
name: nvidia-driver-535
state: present
- name: CUDA Toolkit 설치
apt:
name: cuda-toolkit-12-2
state: present
고급 기능 예시
- name: GPU 드라이버 설치 (A100 전용)
apt:
name: nvidia-driver-535
state: present
when: gpu_type == "A100"
notify:
- Restart Slurm
- 조건문(when): 특정 하드웨어에서만 실행
- 핸들러(handlers): 변경 시 Slurm 자동 재시작
3. Roles – 구조화된 배포
Roles는 Playbook을 역할 단위로 구조화하여 유지보수를 쉽게 합니다.
roles/
gpu_driver/
tasks/
main.yaml
templates/
nvidia.conf.j2
vars/
main.yaml
slurm/
tasks/
main.yaml
- tasks/: 실행할 작업 목록
- templates/: Jinja2 템플릿 파일 (변수 적용 가능)
- vars/, defaults/: 환경별 변수 설정
- files/: 정적 파일 배포
4. 실행 흐름
- Inventory로 대상 노드/그룹 정의
- Playbook 작성 (작업 시나리오)
- Roles로 구조화 (복잡한 경우)
- ansible-playbook 명령 실행
- 결과 보고서 확인 (OK/Changed/Failed)
- 실패 시 롤백 또는 재시도
# compute 그룹에 GPU 드라이버 설치
ansible-playbook -i inventory.ini gpu_setup.yaml -f 20
- -f 20: 20개 노드 병렬 실행
5. HPC 환경 적용 사례
| 영역 | 예시 |
| GPU 드라이버 설치 | NVIDIA Driver, CUDA Toolkit 배포 |
| Slurm 구성 | slurm.conf, GRES(Device) 설정 |
| 모니터링 배포 | DCGM Exporter, Node Exporter |
| 보안 설정 | SSH Key, 방화벽 규칙 배포 |
| 긴급 패치 | 커널 업데이트, 재부팅 |
6. 실무 팁
- Dry-run 모드 (--check)로 변경 사항만 검토
- Diff 모드 (--diff)로 변경 전후 비교
- Serial 적용 (--serial)로 일부 노드만 순차 적용하여 장애 확산 방지
- Tags 사용 → 특정 작업만 실행
ansible-playbook -i inventory.ini gpu_setup.yaml --tags "cuda"
- **변수 파일(vars/)**로 dev/prod 환경 분리
- **템플릿(.j2)**으로 GPU·Slurm 설정 파일 자동 생성
7. 장애 대응 시나리오
- GPU 드라이버 긴급 롤백: 업데이트 후 프레임워크 충돌 발생 시 Playbook으로 구버전 재설치
- Slurm 파티션별 CUDA 버전 차등 배포: AI 파티션(CUDA 12.2), CFD 파티션(CUDA 11.8)
- 장애 노드 초기화: OS 패치, GPU 드라이버 재설치, Slurm 재등록까지 일괄 처리
8. 보안·모니터링 연계
- ansible-vault로 API Key, Storage Access Key 암호화
- 배포 후 GPU Health Check 스크립트 자동 실행
- 실행 결과를 Prometheus Pushgateway로 전송 → Grafana 대시보드에서 성공/실패율 시각화
정리하며
Ansible은 HPC/GPU 클러스터 운영 자동화의 기반입니다.
Inventory로 노드 그룹을 정의하고, Playbook과 Roles로 구조화하면
GPU 드라이버 설치, Slurm 설정, 모니터링 배포까지 일관되고 안전하게 수행할 수 있습니다.
다음 26편에서는 Ansible로 GPU Driver·CUDA 자동 배포하기를 다루며,
실제 운영 환경에서 쓸 수 있는 완성형 Playbook 코드와 최적화 기법을 공개하겠습니다.