컴퓨터의 구조는 그것의 계층에 따라 하드웨어 (Hadware), 운영 체제 (Operating System), 응용 프로그램 (Application) 으로 구분할 수 있다.
하드웨어는 다시 CPU, Memory, Device등으로 구분 가능하며 Operatiog System은 그 핵심 역할을 Kernel이 수행하고 Application과 하드웨어를 이어 준다.
아래와 같은 도식으로 위 구조를 나타낼 수 있다.

여러 컴퓨팅 작업을 진행하다보면 각종 Application의 종속성이 다를 때가 굉장히 많다. 예를 들어 어떤 프로그램은 Python은 Version 3.8을 요구하고 numpy는 1.21.5, gcc 11.4.0, ....., 등을 요구하기도 하고 다른 프로그램은 gcc 8.5.3, cmake 3.16.1을 요구하기도 한다.
보편적으로 각종 Application들은 (머신 러닝 모듈부터 python, gcc 등의 범용 프로그램에 이르기까지) 서로가 서로에게 종속성을 가지게 되는데 서로 Version이 맞지 않을 경우 보통 골치아픈게 아니다. 그리고 이런 Application들은 /usr/bin/ 등의 공용 설치 위치 (Window로 친다면 program file 혹은 다운로드 디렉토리 등)에 한번에 설치가 되는 경우가 많은데 일일히 설치 위치를 달리하고 때마다 환경 변수를 바꿔 주는 것은 쉽지 않다 (프로그램이 늘어날수록 너무나 어려운 작업이 될 것이다)
따라서 상황에 따라 (그리고 Machine Learning을 할 때도 마찬가지로) "격리된 환경"을 만들어 주는 것이 매우 중요하며 이를 위해 Vertual Machine 혹은 Container를 사용할 수 있다. 이 둘은 기존 Host System에 대해 독립적인 환경을 만들어 줌으로서 각종 Application들에 대한 종속 프로그램들의 관리를 쉽게 만들어 준다.
위 둘은 격리된 환경을 만들어 주는 것에 있어선 공통점을 가지지만 아래와 같은 차이가 있다.
컨테이너와 VM의 차이
출처 : https://cloud.google.com/learn/what-are-containers?hl=ko
기본 하드웨어에 대한 액세스 권한을 갖는 호스트 운영체제 위에서 Linux 또는 Windows 같은 게스트 운영 체제를 실행하는 VM의 개념은 많은 사용자가 이미 익숙할 것입니다. 컨테이너는 종종 가상 머신(VM)과 비교됩니다. 컨테이너는 가상 머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련해 줍니다. 그러나 아래에서 살펴보듯 VM과의 유사점은 여기까지입니다.
컨테이너를 사용하면 개발자와 IT 운영팀이 훨씬 작은 단위로 업무를 수행할 수 있으므로 그에 따른 이점이 훨씬 많습니다. 컨테이너는 VM보다 훨씬 더 경량입니다. 컨테이너는 OS 수준에서 가상화되고 VM은 하드웨어 수준에서 가상화됩니다. 컨테이너는 OS 커널을 공유하며 VM에 필요한 것보다 훨씬 적은 메모리를 사용합니다.
VM이 하드웨어 수준에서 가상화 된다는 말을 생각해 보면 이전 경험이 떠오른다. 예전 학부 수업 때 리눅스를 사용하기 위해 VM을 이용해서 Window 내에 CentOS를 설치한 적이 있었다. 그 때 VM를 구동할 때 메모리는 몇 GB로 할 것인지 저장 공간은 얼마나 배정할 것인지, C드라이브와 D 드라이브는 얼마나 나눌지 등을 정했어야 했다.
아마도 이런 것들이 VM이 하드웨어 자체를 쪼개서 격리하는 과정이 아닐까 싶다.
'Computing technics > Machine Learning' 카테고리의 다른 글
| Apptainer 예제 및 Host Computer에 대한 독립성 확인 (0) | 2024.07.08 |
|---|