연산 세션 실행하기

Sessions 탭에서는 연산 세션을 조회하는 것뿐만 아니라 새로운 세션을 시작하거나 실행 중인 세션을 사용 및 관리할 수도 있습니다.

새로운 세션 시작하기

새로운 연산 세션을 시작하려면 START 버튼을 누르세요. 다음과 같은 설정 창이 뜨는데, 사용하려는 언어 환경(Environments, Version)과 자원 설정(원하는 CPU, RAM, GPU 등 할당량)을 지정하고 LAUNCH 버튼을 누릅니다.

Session launch dialog with various settings

주석

만약 GPU 자원이 FGPU로 표시되어 있다면, 이는 서버가 GPU 자원을 가상화된 형태로 제공하고 있다는 것을 의미합니다. Backend.AI는 하나의 물리 GPU를 여러 개로 분할해서 여러 사용자가 나누어 사용할 수 있는 가상화 기술을 지원하고 있습니다. 따라서, GPU 연산 소요가 크지 않은 작업을 수행하고자 할 경우에는 GPU의 일부만 할당하여 연산 세션을 생성할 수 있습니다. 1 FGPU가 실제로 할당하는 GPU 자원의 양은 관리자 설정에 따라 시스템 별로 다양할 수 있습니다. 예를 들어, 관리자가 하나의 GPU를 다섯 조각으로 분할 설정한 경우, 5 FGPU가 1 물리 GPU, 또는 1 FGPU가 0.2 물리 GPU를 뜻합니다. 이 때 1 FGPU를 설정하여 연산 세션을 생성하면, 그 세션에서는 0.2 물리 GPU에 해당하는 SM(streaming multiprocessor)과 GPU 메모리를 활용할 수 있습니다.

이 때, “Folder to mount”에 아무 마운트 폴더도 지정하지 않은 경우 다음과 같은 알람 다이얼로그가 뜰 수 있습니다. 연산 세션을 삭제하면 기본적으로 세션 내의 모든 데이터도 같이 삭제되므로 저장 폴더를 하나 이상 마운트 하는 것을 권장한다는 내용입니다. 마운트 폴더를 지정한 후 그 폴더에 데이터를 보관하면 연산 세션이 삭제되더라도 데이터를 계속 보존할 수 있습니다. 저장 폴더에 보존된 데이터는 다른 세션을 생성할 때 다시 마운트 하여 데이터를 재사용할 수도 있습니다. 알람을 무시하고 연산 세션을 생성해도 상관없습니다. 하지만, 세션 내에서 데이터를 보관해야 할 필요가 있는 작업을 하는 경우라면 꼭 폴더를 마운트 하는 것이 좋습니다. 폴더를 마운트 하여 연산 세션을 실행하는 법에 관해서는 관련 내용 을 참고 하십시오.

Notification dialog when no storage folder is mounted to the session

Running 탭에서 새로운 연산 세션이 생성되는 것을 확인합시다.

New session is created

이미 실행 중인 세션을 사용하고 관리하기

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

App launch dialog

시험 삼아 Jupyter Notebook을 눌러봅시다.

Jupyter app is launched

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

Notebook의 파일 탐색기에서 id_container 파일은 private SSH key를 담고 있습니다. 필요할 경우 다운로드 하여 컨테이너로의 SSH/SFTP 접속에 이용할 수 있습니다.

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

Backend.AI notebook on Jupyter menu

이 창에서 세션 환경에 맞는 코드를 입력하고 실행해볼 수 있습니다. 코드는 Backend.AI 서버를 구성하는 노드 중 연산 세션이 실제로 생성된 노드에서 실행이 되며, 로컬 머신에는 별도 환경을 구성할 필요가 없습니다.

Code execution on Jupyter Notebook

창을 닫으면 Notebook 파일 탐색기에 방금 작업한 Untitled.ipynb 파일이 생성되어 있는 것을 확인할 수 있습니다. 여기 생성된 파일은 세션을 삭제할 경우 같이 삭제되는 것에 주의 하십시오. 생성된 파일을 세션이 사라지더라도 보존하는 방법은 폴더 섹션에서 설명합니다.

Untitled.ipynb file is created in the Jupyter

다시 세션 리스트 페이지로 돌아옵니다. 이번에는 터미널을 띄워보도록 하겠습니다. 플레이 버튼 우측의 터미널 아이콘을 누르면 해당 컨테이너의 터미널을 사용할 수 있습니다. 터미널 역시 새 창에서 뜨게 되며, 다음 그림처럼 연산 세션 내부에 접속해서 커맨드 명령을 내릴 수 있습니다. 커맨드 사용에 익숙한 분이라면 손쉽게 여러 가지 리눅스 명령을 내릴 수가 있습니다.

Backend.AI session terminal

만약 여기서 파일을 만들면 앞서 띄운 Jupyter Notebook에서 즉시 그 파일을 확인할 수 있습니다. 반대로, Jupyter Notebook에서 편집한 파일의 변경 사항도 터미널에서 바로 확인할 수 있습니다. 같은 연산 세션을 사용하고 있기 때문입니다.

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

특정 세션을 삭제하기 위해서는 빨간색 휴지통 아이콘을 누르면 됩니다. 연산 세션 내부 폴더의 데이터는 연산 세션이 종료되는 순간 같이 삭제되므로, 계속 유지해야 하는 데이터라면 마운트 한 폴더에 옮기거나 처음부터 폴더에 업로드하는 것을 권합니다.

웹 터미널 고급 사용법

위에서 사용 해보았던 웹 기반 터미널은 내부적으로 tmux 라는 유틸리티를 사용하고 있습니다. tmux는 하나의 쉘 내에서 여러 개의 창을 띄워 다중 작업 할 수 있도록 지원하는 terminal multiplexer로, 쉘이 닫히더라도 작업하던 내용을 보존할 수 있는 등 다양한 장점을 가지고 있습니다. 보다 강력한 터미널 기능을 활용하고 싶다면 tmux 공식 문서 및 기타 인터넷 상의 다양한 사용 예제를 참고하십시오.

여기서는 몇 가지 간단하지만 유용한 기능을 소개하겠습니다.

터미널 내용 복사하기

tmux는 다양한 장점을 가지고 있지만 처음 접하는 사용자라면 다소 혼란스러운 부분도 있습니다. 특히, tmux는 자체 클립보드 버퍼를 가지고 있어 터미널의 내용을 복사할 경우 기본적으로 tmux 내에서만 붙여넣을 수 있다는 부분에서 어려움을 겪을 수 있습니다. 여기에 웹 기반 터미널에서는 사용자 시스템의 클립보드를 tmux에 노출시키기 어렵다는 한계가 더해져서, tmux 쉘을 사용하고 있는 상태에서는 마우스 드래그를 통해 터미널 내용을 복사한 후 사용자 컴퓨터의 다른 프로그램에 붙여넣을 수가 없습니다. 소위 말하는 Ctrl-C / Ctrl-V 가 작동하지 않는 것입니다.

만약 터미널 내용을 사용자 시스템의 클립보드로 복사하여 붙여넣기를 할 필요가 있을 때는 잠시 tmux의 마우스 지원 설정을 끌 수 있습니다. 먼저 Ctrl-B 키를 눌러 tmux의 제어 모드로 진입합니다. 그 후 :set -g mouse off 를 입력하고 엔터키를 누릅니다 (처음 콜론까지 입력해야 합니다). 입력하는 내용은 tmux 하단의 상태바에서 확인할 수 있습니다. 그 후 터미널에서 마우스로 원하는 텍스트를 드래그 하고 Ctrl-C 또는 Cmd-C 키를 누르면 사용자 컴퓨터의 클립보드에 해당 내용이 복사 됩니다.

마우스 지원을 끈 상태에서는 마우스 휠로 스크롤하여 터미널의 이전 페이지 내용을 확인할 수 없습니다. 이 때는 다시 마우스 지원을 켜면 됩니다. Ctrl-B 를 누른 후 이번에는 :set -g mouse on 을 입력해봅시다. 이제 마우스 휠을 스크롤하여 이전 페이지의 내용을 볼 수 있게 되었습니다.

이와 같이 Ctrl-B:set -g mouse off 또는 :set -g mouse on 을 기억하면 조금 더 편리하게 웹 터미널을 활용할 수 있습니다.

주석

Ctrl-B 키는 tmux의 기본 제어 모드 키입니다. 만약 홈 디렉토리의 .tmux.conf 를 수정하여 다른 제어 키를 설정한 경우에는, Ctrl-B 대신 설정된 키 조합을 눌러야 합니다.

키보드를 이용해 터미널 이전 내용 확인하기

터미널 내용 복사도 하면서 터미널의 이전 내용도 확인하고 싶은 경우에도 방법이 있습니다. 바로 키보드를 이용해서 이전 내용을 확인하는 것입니다. 이번에도 Ctrl-B 를 먼저 클릭 해준 뒤 Page UpPage Down 키를 눌러 봅시다. 키보드 만으로 터미널의 이전 내용을 탐색할 수 있다는 것을 확인할 수 있습니다. 탐색 모드에서 빠져 나오려면 q 키를 눌러주면 됩니다. 이 방법을 이용하면 마우스 지원을 끈 상태에서도 터미널 이전 내용 확인이 가능합니다.

여러 개의 쉘 띄우기

tmux의 가장 큰 장점은 하나의 터미널 창에서 여러 개의 쉘을 띄우고 사용할 수 있다는 점입니다. 백문이 불여일견이니 Ctrl-B 키를 누른 후 c 키를 이어서 눌러봅시다. 기존 창의 내용이 사라지고 새로운 쉘 환경이 뜬 것을 확인할 수 있습니다. 그러면 기존 창은 사라진 것일까요? 그렇지 않습니다. Ctrl-B 누른 후 w 키를 눌러 봅시다. 다음과 같이 현재 tmux 상에서 열려 있는 쉘 리스트가 조회되는 것을 볼 수 있습니다. 여기서 0: 으로 시작하는 쉘이 처음 보던 쉘 환경이고, 1: 로시작하는 쉘은 방금 새로 생성한 쉘입니다. 위/아래 방향 키를 이용해서 쉘 사이를 이동할 수 있습니다. 0: 번 쉘에 커서를 가져다 두고 엔터 키를 눌러 선택 해보겠습니다.

tmux's multiple session management

처음 보았던 쉘 환경이 나타나는 것을 볼 수 있습니다. 이와 같은 방식으로 웹 터미널 내에서 여러 개의 쉘 환경을 띄워 두고 사용할 수 있습니다. 현재 쉘을 종료하려면 exit 명령을 입력하거나 Ctrl-B x 키를 누른 후 y 를 입력하면 됩니다.

정리하면 다음과 같습니다:

  • Ctrl-B c: 새로운 tmux 쉘 생성
  • Ctrl-B w: tmux 쉘 조회 및 이동/선택
  • exit 또는 Ctrl-B x: 현재 tmux 쉘 종료

위 명령을 조합하여 여러 개의 쉘에서 동시에 다양한 작업을 수행할 수 있습니다.