연산 세션에 폴더 마운트

Backend.AI는 스토리지 폴더 연산 세션 생성 시 마운트 할 수 있는 기능을 제공합니다.연산 세션을 시작하면 사용자는 /home/work/ 폴더에 접근 권한을 가지게 되는데, /home/work/ 및 그 하위에 생성된 일반 폴더와 파일은 연산 세션이 삭제되면 함께 사라집니다. 이는 연산 세션이 컨테이너에 기반하여 동적으로 생성/삭제 되기 때문으로, 컨테이너 내부의 데이터를 컨테이너 수명 주기와 상관없이 보존하기 위해서는 별도의 호스트 폴더를 컨테이너에 마운트 한 뒤, 마운트 된 폴더 안에 파일을 생성해야 합니다.

'세션' 페이지에서 '시작' 버튼을 누르면 새로운 세션을 생성할 수 있습니다. '세션 타입', '실행 환경 & 자원 할당' 단계를 작성한 후, '데이터 & 폴더' 단계로 이동하면 사용자가 마운트할 수 있는 폴더의 리스트를 확인할 수 있습니다. 해당 리스트에서 마운트하고자 하는 폴더를 선택하여 추가할 수 있으며, 여러 개의 폴더를 선택하면 다수의 폴더를 마운트 할 수 있습니다. 해당 문서에서는 user1-ml-testuser2-vfolder 두 개의 폴더를 마운트한 후 세션을 생성하는 법에 대해 설명합니다.

자동 마운트 폴더를 이용하여 연산 세션 환경 구성하기

참고

해당 프로젝트 내의 데이터와 폴더 정보를 살펴보면 사용 모드, 해당 폴더가 속해 있는 스토리지 호스트, 권한 등의 정보를 확인할 수 있습니다. 참고로, '데이터 & 폴더' 단계에서는 현재 사용자가 마운트 가능한 데이터 폴더만 출력됩니다. 다른 프로젝트에 속한 폴더는 해당 메뉴를 통해 조회할 수 없습니다.

참고

'데이터 & 폴더' 단계에서 폴더 이름을 클릭하면, '폴더' 정보를 한 눈에 확인할 수 있습니다. 해당 메뉴에서는 생성되어 있는 폴더를 확인하고, 새로운 폴더를 생성하고, 파일을 업로드할 수 있습니다. 자세한 설명은 폴더 내용 조회하기 를 참조하세요.

여기에 더해, '+' 버튼을 클릭하여 새로운 폴더를 생성할 수도 있습니다. 세션 런처에서 새로운 폴더를 생성하는 자세한 방법을 확인하시려면, Storage 폴더 생성 을 참조하세요.

세션 페이지에서 세션 이름을 클릭하여 세부 정보를 확인할 수 있습니다. 세부 정보 모달에서, '터미널 앱 실행하기 (우측 상단 두번째 버튼)' 버튼을 클릭하여 터미널 앱을 실행할 수 있습니다. 또는 세션 생성 시 나타나는 알림 모달을 활용할 수 있습니다. 터미널에서 ls 명령을 내리면 user1-ml-test 폴더와 user2-vfolder 폴더가 홈 디렉토리 하위에 마운트되는 것을 확인할 수 있습니다.

Execute terminal app Mounted folders in terminal

참고

선택한 폴더는 기본적으로 연산 세션 내의 /home/work/ 하위에 폴더의 이름으로 마운트 됩니다. 예를 들어, 폴더의 이름이 test 일 경우, /home/work/test 에 마운트 됩니다. 만약, 연산 세션 내 마운트 경로를 변경하고 싶다면 '경로 & 대체 이름' 입력 필드에 절대 경로를 입력합니다. 만약, test 폴더의 마운트 경로를 /workspace 로 입력한 경우에는 test 폴더가 연산 세션 내 /workspace 경로에 마운트 됩니다. 상대 경로를 입력하면 /home/work/ 아래에 마운트 됩니다.

Backend.AI에서는 연산 세션을 삭제해도 폴더 안의 파일을 보존할 수 있는 옵션을 제공합니다. 아래 예제를 통해 관련된 내용을 확인할 수 있습니다.

우선, user2-vfolder 하위에 test_file 파일을 생성합니다. 해당 파일의 내용은 《file inside user2-vfolder》로 채우겠습니다.

Mounted folders in terminal

user2-vfolder 를 대상으로 ls 명령을 실행해보면 파일이 생성된 것을 확인할 수 있습니다. 참고로, cat 명령을 사용하면 파일 내용을 확인할 수 있습니다.

이제 세션을 삭제한 후 Data & Storage 페이지로 이동합니다. user2-vfolder 폴더를 찾아 클릭하여 파일 탐색기를 열고 test_file 파일이 존재하는 것을 확인합니다. '작업' 탭의 파일 다운로드 버튼을 클릭하여 파일을 로컬 머신에 내려받은 후, 내용이 "file inside user2-vfolder" 임을 확인합니다.

Download icon in the folder explorer

연산 세션을 생성할 때 폴더를 마운트한 후, 마운트 된 폴더에서 파일 작업을 수행하면 연산 세션이 종료된 이후에도 데이터를 보존할 수 있습니다.

자동 마운트 폴더를 이용하여 연산 세션 환경 구성하기

연산 세션에 사전 설치되어 있지 않은 새 프로그램이나 라이브러리를 필요로 하는 경우, 연산 세션의 수명 주기와 관계 없는 Storage 폴더 특성과 자동 마운트 폴더 를 이용해서 패키지를 설치하고, 연산 세션의 종류에 상관없이 일정한 환경을 구성할 수 있습니다.

pip를 통한 파이썬 패키지 설치

.local 이라는 이름의 폴더를 생성하면 파이썬 사용자 패키지를 해당 폴더에 설치하고 공유할 수 있습니다. pip로 패키지를 설치하면 사용자 홈 폴더 하위에 있는 .local 폴더에 패키지를 설치하기 때문입니다. (자동 마운트 폴더는 사용자 홈폴더 하위에 마운트 됩니다.) 따라서, 연산 환경과 상관없이tqdm 이라는 파이썬 패키지의 설치 상태를 항상 유지하려면 터미널에서 다음과 같은 명령을 내릴 수 있습니다.

pip install tqdm

이후, 연산 세션을 새로 생성하게 되면 tqdm 패키지가 설키된 .local 폴더가 자동으로 마운트 되므로, tqdm 패키지를 다시 설치하지 않고 사용할 수 있습니다.

경고

여러 파이썬 버전이나 다른 파이썬 버전을 사용하는 세션을 사용할 경우 패키지들의 호환성 문제가 있을 수 있습니다. 이를 해결하기 위해, .bashrc 편집기능을 통해 PYTHONPATH 를 분기하는 방식의 적용이 가능합니다. 해당 방법을 사용하면, PYTHONPATH 환경 변수에 지정된 경로에 사용자 pip 패키지를 설치할 수 있습니다.

Homebrew를 통해 패키지 설치

Ubuntu의 apt 나 CentOS의 yum 같은 패키지 매니저는 일반적으로 root 권한을 필요로 합니다. Backend.AI의 연산 세션은 보안을 위해 sudo 권한 및 root 접근이 기본적으로 막혀 있기 때문에 (설정에 따라 접근이 허용될 수도 있습니다), 패키지 설치를 위해 sudo 접근이 필요하지 않은 Homebrew on Linux 사용을 권장하고 있습니다.

Homebrew는 다음과 같이 구성할 수 있습니다.

  • Data & Storage 페이지에서 .linuxbrew 폴더 생성

  • 연산 세션을 생성(.linuxbrew 폴더가 자동으로 /home/linuxbrew/.linuxbrew 위치에 마운트)

  • 연산 세션 내에서 Homebrew 설치(아직 설치하지 않은 경우)

    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  • Homebrew 패키지는 다음과 같이 설치할 수 있습니다.

    $ brew install hello
    $ hello
    Hello, world!
    

brew 는 패키지를 /home/linuxbrew/.linuxbrew 디렉토리 하위에 설치하는데, .linuxbrew 라는 데이터 폴더가 있다면 연산 세션 생성 시 자동으로 그 위치에 마운트합니다. 따라서, .linuxbrew 라는 자동 마운트 폴더를 생성해두면 연산 세션을 삭제하고 새로운 연산 세션을 생성하더라도 기존에 설치했던 Homebrew 패키지를 다시 사용할 수 있습니다.