## DeepOps
DeepOps는 NVIDIA가 개발한 오픈 소스 프로젝트로, 다양한 인프라와 클러스터에서 딥 러닝 워크로드를 쉽게 배포하고 관리할 수 있도록 설계된 도구 모음입니다. 이 프로젝트는 Kubernetes 및 Slurm과 같은 인기 있는 클러스터 관리 도구를 사용하여 딥 러닝 환경을 자동화하고 표준화하는 데 중점을 둡니다.
#### DeepOps Installation ####
git clone https://github.com/NVIDIA/deepops.git
* Ansible 설치 (python3.8 이상 설치되어 있어야함)
sudo apt update
sudo apt install ansible
ansible --version # 설치 확인
~/deepops/scripts/setup.sh
=> 이슈 : ansible 버전이 너무 높으면 (1차 테스트 2.13.x) setup이 잘 실행되지 않음
pip uninstall ansible ansible-base ansible-core # 기존 ansible 버전 삭제
pip install ansible==2.9.27
mkdir -p config
vi config/inventory
* 인벤토리 파일 내용 작성
(env) uclick@slurm-master2:/MW_TEST/jhhan_deepops/deepops$ cat config/inventory # 구성 예시
[slurm-master]
slurm-master2 ansible_host=192.168.20.83
[slurm-node]
slurm-worker1 ansible_host=192.168.20.82
[slurm-cluster:children]
slurm-master
slurm-node
* 서버간 동기화 (아래 내용은 필수 내용은 아님)
mkdir ~/config/group_vars
vi group_vars/all.yml
chrony_timezone: "Asia/Seoul"
chrony_config_server:
- 1.kr.pool.ntp.org
- 1.asia.pool.ntp.org
- 2.asia.pool.ntp.org
- time.google.com
docker_install: no
maas_single_node_install: false
install_dcgm: false
deepops_disable_cloud_init: false
standalone_container_registry_cache_enable: false
# Enroot와 Pyxis 설치 옵션 활성화 => slurm 설치 시 enroot와 pyxis 같이 설치되게 하기 위한 옵션
slurm_install_enroot: true
slurm_install_pyxis: true
* slurm-cluster.yml # 모든 값 default
vi ~/config/group_vars/slurm-cluster.yml
slurm_configure_etc_hosts: no
slurm_cluster_install_cuda: no
slurm_cluster_install_nvidia_driver: no
slurm_enable_nfs_server: false
slurm_enable_nfs_client_nodes: false
slurm_install_hpcsdk: false
hpcsdk_install_as_modules: false
ood_install_linuxhost_adapter: no
slurm_install_nhc: yes
slurm_enable_container_registry: false
slurm_enable_monitoring: false
slurm_enable_rsyslog_server: false
slurm_enable_rsyslog_client: false
====================================
Ansible 인벤토리 파일과 그룹 변수 파일 (`group_vars`) 파일의 역할과 사용 방법을 이해하면 이러한 설정이 각각 어디에 위치해야 하는지 명확해질 수 있습니다.
### 인벤토리 파일 vs 그룹 변수 파일
1. **인벤토리 파일 (`inventory`)**:
- 인벤토리 파일은 Ansible이 관리할 호스트들을 정의합니다.
- 호스트 그룹과 개별 호스트를 나열하여, 어떤 호스트에 어떤 작업을 수행할지 지정합니다.
- 보통 호스트의 주소, SSH 연결 정보, 그리고 호스트별 변수 등을 포함합니다.
2. **그룹 변수 파일 (`group_vars/*.yml`)**:
- 그룹 변수 파일은 특정 호스트 그룹에 대한 설정을 정의합니다.
- 모든 호스트에 공통으로 적용되는 설정을 정의하거나, 특정 그룹에 속한 호스트에만 적용되는 설정을 정의합니다.
- 일반적으로 `group_vars/all.yml` 파일에는 모든 호스트에 공통으로 적용되는 설정이, `group_vars/<group_name>.yml` 파일에는 특정 그룹에 적용되는 설정이 위치합니다.
### 설정 파일에 따라 설정을 위치시키는 이유
1. **`inventory` 파일에 설정하는 경우**:
- `inventory` 파일에는 특정 호스트 또는 호스트 그룹에 대한 개별 설정을 직접 포함할 수 있습니다.
- 주로 호스트 연결 정보, 호스트별 특수 설정 등이 포함됩니다.
2. **`group_vars` 파일에 설정하는 경우**:
- `group_vars` 파일에는 호스트 그룹에 공통으로 적용되는 설정이 포함됩니다.
- 설정의 가독성과 관리의 용이성을 높이기 위해 사용됩니다.
### 왜 특정 설정을 `inventory`에 넣는지
인벤토리 파일에 변수를 직접 포함하는 경우는 드뭅니다. 보통은 `group_vars` 파일을 사용하여 설정을 정의하는 것이 좋습니다. 위 예제에서 특정 설정을 `inventory`에 넣는다면, 호스트별로 설정을 세분화하거나 테스트 목적으로 사용할 수 있습니다. 그러나 일반적인 설정은 `group_vars` 파일에 위치시키는 것이 가독성과 관리 측면에서 더 나은 방법입니다.
### 요약
- **인벤토리 파일 (`config/inventory`)**: 호스트와 호스트 그룹을 정의하고, 필요한 경우 호스트별 변수를 포함.
- **그룹 변수 파일 (`config/group_vars/slurm-cluster.yml`)**: 호스트 그룹에 공통으로 적용되는 설정을 정의.
====================================
# 설정 확인
${DeepOps_PATH}/ansible.cfg에서 다음과 같은 내용 확인
inventory = ./config/inventory
위에서 설정한 ./config/inventory 설정을 잘 읽고 있는지에 대해 다음과 같은 명령어로 확인 (아래 명령어는 deepops 디렉토리에서 실행해야함)
ansible all -m raw -a "hostname"
ansible -i ./deepops/config/inventory all -m raw -a "hostname" # 만약 위 명령어가 안된다면 해당 명령어로 실시해본 이후에 다시 위 내용과 설정 비교
====================================
# 아래와 같이 worker node로의 통신이 되지 않을 때 해결법
(env) uclick@slurm-master2:/MW_TEST/jhhan_deepops/deepops$ ansible all -m raw -a "hostname"
...(생략)...
changed: [slurm-master2]
fatal: [slurm-worker1]: UNREACHABLE! => changed=false
msg: |-
Failed to connect to the host via ssh: Warning: Permanently added '192.168.20.82' (ECDSA) to the list of known hosts.
uclick@192.168.20.82: Permission denied (publickey,password).
unreachable: true
...(생략)...
=> OS 비밀번호가 존재하기 때문에 SSH 접속 실패하고 있음
* 해결법
master node의 ~/.ssh 경로에 id_rsa 파일 있는지 확인 (없으면 ssh-keygen -t rsa -b 2048 으로 생성)
worker node의 ~/.ssh 경로에 autorized_keys 생성 (master node에서 ssh-copy-id ${OS_USER}@${OS_IP} 명령어로 생성)
ssh ${OS_USER}@${OS_IP} 명령어로 비밀번호 없이 worker 노드에 SSH 접속 되는지 확인
====================================
#### DeepOps에서의 slurm 설치 ####
ansible-playbook -l slurm-cluster playbooks/slurm-cluster.yml
=> slurm-cluster가 ./config/inventory에 잘 설정되어있는지 확인 후 실행
#### DeepOps에서의 slurm 설치 확인 ####
'Nvidia > AI' 카테고리의 다른 글
SuperPOD 및 BCM 기본 (0) | 2024.06.14 |
---|---|
slurm ~ enroot/pyxis (0) | 2024.05.20 |
slurm Admin (0) | 2024.05.20 |
slurm 설치 (0) | 2024.05.20 |
Nvidia Nemo를 이용하여 gemma-7b 모델 사용하기 (0) | 2024.04.25 |