컨테이너 별 CPU, 메모리 자원 할당 및 연산 세션 활용

주석

목표

  • GUI 환경에서 CPU, 메모리 자원 옵션을 동적으로 주고 연산 세션을 생성
  • GUI 상에서 해당 세션의 CPU, 메모리 할당량을 확인하고 요청한 양에 맞게 생성되는지 확인
  • GUI 상에서 Jupyter Notebook 앱을 띄워 컨테이너 환경에서 노트북 사용
  • cgroup을 통한 자원 조회 후 컨테이너 수준의 자원 제약 여부 확인

Backend.AI GUI Console에서 가장 많이 방문하게 될 페이지는 Sessions와 Storage 페이지입니다. Sessions 페이지에서는 컨테이너 기반의 연산 세션을 조회하거나 생성 및 사용할 수 있고, Storage 페이지에서는 데이터를 보관하는 저장 폴더를 생성할 수 있습니다. 여기서는 Sessions 페이지에서 컨테이너 기반의 연산 세션을 생성하고 각종 웹 애플리케이션을 활용하는 방법을 알아봅니다.

연산 세션 생성하기

사용자 계정으로 로그인 후 좌측 메뉴의 Sessions를 클릭하여 Sessions 페이지로 이동합니다.

../_images/sessions_page.png

새로운 연산 세션을 시작하려면 START 버튼을 클릭하세요. 다음과 같은 설정 창이 뜨는데, 사용하려는 언어 환경(Environments, Version)과 자원을 설정할 수 있습니다. 다음 그림과 같이 CPU, 메모리 자원을 설정하고 LAUNCH 버튼을 클릭합니다. 환경은 TensorFlow 2.2로 선택하였습니다.

../_images/session_launch_dialog.png

보다 상세한 설정이 필요한 경우, 다음 각 항목의 의미를 참조하세요.

  • Environment: TensorFlow, PyTorch, C++ 등과 같은 연산 세션의 기본 환경을 지정합니다. TensorFlow 환경을 선택하면 연산 세션이 TensorFlow 라이브러리를 자동으로 포함하게 됩니다. 다른 환경을 선택하면 그에 해당하는 환경이 기본으로 설치됩니다.
  • Version: 환경의 버전을 선택합니다. 예를 들어, TensorFlow 환경에는 1.15, 2.3 등과 같은 버전을 구분해서 선택할 수 있습니다.
  • Resource Group: 연산 세션을 생성할 리소스 그룹을 지정합니다. 리소스 그룹이 여러 개 있을 경우, 원하는 값을 선택할 수 있으나, 하나의 리소스 그룹만 있는 경우에는 변경할 수 업습니다.
  • Session name (optional): 생성할 연산 세션의 이름을 지정합니다. 지정하면 Session Info에 이 이름이 나타나므로 연산 세션의 구분이 용이합니다. 지정하지 않으면 임의의 이름을 사용합니다. 세션 이름은 알파벳 또는 숫자로만 4-64자 까지 설정 가능하며, 공백은 허용되지 않습니다.
  • Folder to mount: 연산 세션에 마운트 할 데이터 폴더를 지정합니다. 연산 세션이 삭제되면 기본적으로 모든 데이터가 함께 삭제되지만, 여기서 마운트 한 폴더에 저장된 데이터는 삭제되지 않습니다.
  • Resource allocation: 연산 세션에 할당할 자원을 사전 정의해 둔 템플릿입니다. 자주 사용하는 자원 설정을 미리 저장해두고 사용할 수 있습니다. 자원 템플릿은 관리자 전용 Hub에서 관리할 수 있습니다.
  • CPU: 연산 세션에 할당할 CPU 코어의 수. 최대값은 사용자에게 적용되는 자원 정책에 따라 달라집니다.
  • RAM: 연산 세션에 할당할 메모리의 용량 (GB). 최대값은 사용자에게 적용되는 자원 정책에 따라 달라집니다.
  • Shared Memory: 연산 세션에 할당할 공유 메모리의 용량 (GB). 최대 2 GB 까지만 설정할 수 있으며, RAM에 지정된 양보다 클 수 없습니다.
  • GPU: 연산 세션에 할당할 GPU 단위. 최대값은 사용자에게 적용되는 자원 정책에 따라 달라집니다.
  • Sessions: 지정된 설정으로 생성할 연산 세션의 수. 동일한 연산 세션을 한꺼번에 생성할 필요가 있을 때 지정할 수 있습니다.

이 때, Folder to mount 입력칸에 아무 마운트 폴더도 지정하지 않은 경우 저장 폴더가 마운트 되지 않았다는 경고 창이 뜰 수 있습니다. 일단은 경고를 무시하고 LAUNCH WITHOUT STORAGE FOLDER 버튼을 클릭하여 연산 세션을 생성합니다. RUNNING 탭에서 새로운 연산 세션이 생성되는 것을 확인합시다. FINISHED 탭에서는 종료된 연산 세션을, OTHERS 탭에서는 오류가 발생한 연산 세션을 조회할 수 있습니다.

../_images/session_created.png

각 세션 별 ID, 시작일, 사용시간, 자원 설정, 사용량 등의 정보를 확인할 수 있습니다. 특히 Configuration 열의 자원 할당량을 확인 하십시오. 연산 세션을 생성할 때 지정한 자원량이 출력되는 것을 확인할 수 있습니다.

주석

수퍼어드민의 경우 현재 클러스터에서 실행 중인 (또는 종료된) 모든 세션 정보를 확인할 수 있고, 일반 사용자의 경우에는 자신이 사용한 세션만 조회 가능합니다.

주석

간헐적인 네트워크 접속 불량 등의 문제로 세션 리스트가 정상적으로 표시되지 않는 경우가 발생할 수 있습니다. 이 때는 브라우저 페이지를 갱신해서 해결할 수 있습니다.

Jupyter Notebook 앱 활용 및 컨테이너 내부의 자원 할당량 확인

이미 실행 중인 연산 세션을 사용하고 관리하는 법에 관해 살펴보겠습니다. 세션 리스트의 Control 열을 보면 몇 가지 아이콘이 있습니다. 제일 첫 아이콘을 클릭하면 다음 그림과 같이 앱 런처가 뜨면서 해당 세션이 지원하는 몇 가지 앱 서비스가 뜨게 됩니다.

../_images/app_launch_dialog.png

Jupyter Notebook을 클릭해봅시다.

주석

Try preferred port: 웹 서비스가 뜰 때 Backend.AI가 사전에 생성해 둔 포트 풀(pool)에서 특정 포트를 하나 할당받게 됩니다. 사용자는 IP주소 또는 도메인 이름과 함께 해당 포트로 접속을 해야 서비스를 사용할 수 있습니다. 이 항목에 체크하고 포트 번호를 입력하면 입력한 포트 번호를 우선적으로 할당 시도하게 됩니다. 하지만, 항상 원하는 포트를 할당받는다는 보장은 없습니다. 포트 풀에 해당 포트가 아예 없을 수도 있고, 다른 서비스가 이미 해당 포트를 할당받아 사용하고 있을 수도 있습니다. 이런 경우에는 임의로 포트 번호를 할당합니다. 확실한 사용 목적이 없다면 이 항목을 체크해서 앱을 띄우지 마십시오.

../_images/jupyter_app.png

새로운 창이 뜨면서 Jupyter Notebook이 실행되는 것을 확인할 수 있습니다. 이 Notebook은 실행 중인 연산 세션 내부에서 생성된 것으로, 별다른 설정 없이 버튼 클릭만으로 손쉽게 사용할 수 있습니다. 또한, 연산 세션이 기본적으로 제공하는 언어 환경 및 라이브러리를 그대로 활용할 수 있어 별도의 패키지 설치 과정이 필요 없습니다. 자세한 Jupyter Notebook 사용법은 공식 문서 등을 참고하시기 바랍니다.

우측 상단의 NEW 버튼을 클릭한 후 Backend.AI 용 Notebook을 선택하면 새로운 코드를 입력할 수 있는 ipynb 창이 뜹니다.

../_images/backendai_notebook_menu.png

이 창에서 세션 환경에 맞는 코드를 입력하고 실행해볼 수 있습니다. 코드는 Backend.AI 서버를 구성하는 노드 중 연산 세션이 실제로 생성된 노드에서 실행이 되며, 로컬 머신에는 별도 환경을 구성할 필요가 없습니다. 다음과 같은 코드를 입력하고 실행 버튼을 클릭하거나 Ctrl-Enter 를 입력하여 코드를 실행해봅니다. /sys/fs/cgroup/ 하위에 있는 자원 할당량을 읽고 출력하는 파이썬 코드입니다.

../_images/notebook_code_execution.png

TensorFlow 2.2 환경에는 이미 파이썬이 설치되어 있으므로, 별다른 설정 없이 코드가 실행될 것입니다. 처음 연산 세션을 생성할 때 지정했던 코어와 메모리 량이 출력되는 것을 확인하십시오.

주석

메모리 양은 계산 방식의 차이에 따라 값이 다소 차이날 수 있습니다.

이처럼 연산 세션을 생성한 후 Jupyter Notebook 등과 같은 웹 앱을 사용할 수 있으며, Jupyter Notebook에서는 별도의 설치를 하지 않고 바로 자원 제약 상황을 확인하는 Python 코드를 실행할 수 있었습니다.

웹 터미널 활용

Jupyter Notebook 앱을 닫고 다시 연산 세션의 앱 런처 화면을 열면 Console 앱이 있는 것을 볼 수 있습니다. 클릭 해봅시다.

../_images/session_terminal.png

터미널 역시 새 창에서 뜨게 되며, 다음 그림처럼 연산 세션 내부에 접속해서 쉘 명령을 내릴 수 있습니다. 커맨드 사용에 익숙한 분이라면 손쉽게 여러 가지 리눅스 명령을 내릴 수가 있습니다. Jupyter Notebook에서 자동 생성된 Untitled.ipynb 파일이 ls 명령을 통해 조회되는 것을 볼 수 있습니다. 두 앱이 같은 컨테이너 환경에서 돌아가고 있다는 증거입니다.

이 외에도 연산 세션이 제공하는 서비스의 종류에 따라 TensorBoard, Jupyter Lab 등과 같은 웹 기반 서비스를 이용할 수 있습니다.

특정 세션을 삭제하기 위해서는 빨간색 전원 아이콘을 클릭한 뒤, OKAY 버튼을 클릭하면 됩니다

../_images/session_destroy_dialog.png

연산 세션 로그 조회

돌아가고 있는 연산 세션의 Control 열의 마지막 아이콘을 클릭하면 연산 세션의 로그를 조회할 수 있습니다.

../_images/session_log.png

연산 세션 삭제하기

돌아가고 있는 연산 세션의 Control 열에 있는 휴지통 아이콘을 클릭하면 연산 세션을 삭제할 수 있습니다. 다이얼로그에서 OKAY 버튼을 클릭하면 잠시 후 연산 세션이 삭제 됩니다.

../_images/destroy_dialog.png