AWS 기술 블로그

Amazon SageMaker에서 code-server 호스팅하기

이 글은 AWS Machine Learning Blog에 게시된 Host code-server on Amazon SageMaker by Sofian Hamiti, Eric Peña, and Giuseppe Angelo Porcelli의 한국어 번역 및 편집본입니다.

머신 러닝 팀들은 프로젝트를 진행할 때 유연성은 통합개발환경(IDE)을 선택하는 중요한 요소입니다. IDE를 활용하면 생산성 있는 개발자 경험을 확보하고, 빠르게 혁신할 수 있게 해 줍니다. 때로는 하나의 프로젝트에서 여러 개의 IDE를 사용하기도 합니다. Amazon SageMaker는 머신러닝 팀들에게 클라우드 기반의 완전관리형 개발환경인 Amazon SageMaker 스튜디오, SageMaker 노트북 인스턴스 또는 로컬머신을 활용하는 Local mode라는 선택지를 제공합니다.

SageMaker는 Jupyter와 RStudio를 원클릭으로 구성해 머신러닝 모델의 빌드, 트레이닝, 디버그, 배포 그리고 모디터링을 할 수 있게 해 줍니다. 이번 게시글에서는, SageMaker에서 code-server를 호스팅 하는 솔루션을 공유합니다.

code-server는 VS Code를 원격 머신에서 실행하고, 웹 브라우저에서 접속할 수 있는 환경을 제공합니다. 머신러닝 팀들은 이제 SageMaker의 code-server 호스팅을 활용하여, 확장 가능한 클라우드 컴퓨팅 위에서 로컬 개발환경과 유사한 개발환경으로 어디에서든 코드를 작성 할 수 있습니다. VS Code를 사용하면 AWS에 최적화된 TensorFlow와 PyTorch의 내장 Conda 환경을 사용하실 수 있고, 관리형 Git 리포지토리, Local Mode 및 SageMaker에서 제공하는 다른 기능들을 활용해 생산성을 높일 수 있습니다. IT 관리자는 클라우드에서 관리형의 안전한 IDE의 프로비저닝을 표준화하고 신속하게 처리하여 프로젝트에서 머신러닝 팀을 신속하게 온보딩하도록 도와줍니다.

솔루션 개요

이번 게시글에서는 스튜디오 환경(Option A)과 노트북 인스턴스(Option B)에 code-server를 설치하는 방법을 다룹니다. 각 옵션에 대해서 머신러닝 팀이 직접 그들의 환경에서 실행 할 수 있는 수동 설치방법과 IT 관리자가 AWS 커맨드라인 인터페이스(AWS CLI)를 통해 설정할 수 있는 자동설치 방법을 안내합니다.

아래 구성은 SageMaker에서 code-server를 호스팅하기 위한 아키텍처입니다.

본 솔루션을 통해 여러분의 환경에 code-server를 빠르게 설치하고 설정할 수 있습니다. 스튜디오와 SageMaker 노트북 인스턴스에서 구동하는 JupyterLab 3(추천)과 JupyterLab 1에서 모두 적용 가능합니다. 각 옵션별 다음 과정을 수행하는 쉘 스크립트가 만들어져 있습니다.

스튜디오 환경(Option A)의 쉘 스크립트는 다음을 수행합니다.

  • Jupyter 서버에 code-server를 user profile로 설치합니다. 상세내용은 Dive deep into Amazon SageMaker Studio Notebooks architecture를 참고하세요.
  • 스튜디오 Launcher 화면에 code-server 바로가기를 추가해 IDE에 빠르게 접속하게 해 줍니다.
  • 의존성 관리를 위해 독립된 Conda 환경을 만듭니다.
  • IDE에 Python 확장기능을 설치합니다.

노트북 인스턴스(Option B)의 쉘 스크립트는 다음을 수행합니다.

  • code-server를 설치합니다.
  • Jupyter 노트북 파일 메뉴와 JupyterLab Launcher 화면에 code-server 바로가기를 추가해 IDE에 빠르게 접속하게 해 줍니다.
  • 의존성 관리를 위해 독립된 Conda 환경을 만듭니다.
  • IDE에 Docker와 Python 확장기능을 설치합니다.

다음 섹션에서는 Option A 및 Option B에 대한 솔루션 설치방법을 다루겠습니다. 따라하시기 전에 스튜디오 또는 노트북 인스턴스에 대한 접근권한이 있는지 확인 하세요.

Option A: 스튜디오에 code-server를 호스팅하기

스튜디오에서 code-server를 호스팅하려면 아래 단계들을 따라하세요:

  1. Studio Launcher에서 System terminal을 클릭하세요.
  2. 다음 명령어를 System terminal에서 실행하여 code-server 솔루션을 설치합니다.
    curl -LO https://github.com/aws-samples/amazon-sagemaker-codeserver/releases/download/v0.1.5/amazon-sagemaker-codeserver-0.1.5.tar.gz
    tar -xvzf amazon-sagemaker-codeserver-0.1.5.tar.gz 
    
    cd amazon-sagemaker-codeserver/install-scripts/studio 
    
    chmod +x install-codeserver.sh 
    ./install-codeserver.sh 
    
    # Note: when installing on JL1, please prepend the nohup command to the install command above and run as follows: 
    # nohup ./install-codeserver.sh
  3. 브라우저를 새로고침 하시면 Studio Launcher에서 Code Server 아이콘을 보실 수 있습니다.
  4. Code Server를 클릭하면 브라우저의 새 탭에서 code-server로 접속하실 수 있습니다. Python 확장기능이 이미 설치되어있기 때문에 머신러닝 프로젝트에 바로 활용하실 수 있습니다.
  5. VS Code에서 프로젝트 폴더를 열고, 미리 탑재된 Conda 환경을 선택해 여러분의 Python 스크립트를 실행하실 수 있습니다.

스튜디오 도메인에서 code-server를 자동으로 설치하기

IT 관리자는 Lifecycle configuration을 사용해 스튜디오 사용자들에게 자동설치 옵션을 제공할 수 있습니다. 이는 스튜디오 도메인 아래의 모든 사용자 또는 특정 사용자들에게 적용할 수 있습니다.
자세한 내용은 Customize Amazon SageMaker Studio using Lifecycle Configurations에서 확인하실 수 있습니다.

이 게시글에서는 install-codeserver 스크립트를 사용해 lifecycle configuration을 생성하고, 이를 기존 스튜디오 도메인에 연결해 모든 사용자에게 code-server를 자동으로 설치합니다.

AWS CLI가 설치되어 있고 적절한 권한이 주어진 터미널에서 다음 명령어를 실행합니다.

curl -LO https://github.com/aws-samples/amazon-sagemaker-codeserver/releases/download/v0.1.5/amazon-sagemaker-codeserver-0.1.5.tar.gz
tar -xvzf amazon-sagemaker-codeserver-0.1.5.tar.gz

cd amazon-sagemaker-codeserver/install-scripts/studio

LCC_CONTENT=`openssl base64 -A -in install-codeserver.sh`

aws sagemaker create-studio-lifecycle-config \
    --studio-lifecycle-config-name install-codeserver-on-jupyterserver \
    --studio-lifecycle-config-content $LCC_CONTENT \
    --studio-lifecycle-config-app-type JupyterServer \
    --query 'StudioLifecycleConfigArn'
    
aws sagemaker update-domain \
    --region <your_region> \
    --domain-id <your_domain_id> \
    --default-user-settings \
    '{
    "JupyterServerAppSettings": {
    "DefaultResourceSpec": {
    "LifecycleConfigArn": "arn:aws:sagemaker:<your_region>:<your_account_id>:studio-lifecycle-config/install-codeserver-on-jupyterserver",
    "InstanceType": "system"
    },
    "LifecycleConfigArns": [
    "arn:aws:sagemaker:<your_region>:<your_account_id>:studio-lifecycle-config/install-codeserver-on-jupyterserver"
    ]
    }}'
# Make sure to replace <your_domain_id>, <your_region> and <your_account_id> in the previous commands with
# the Studio domain ID, the AWS region and AWS Account ID you are using respectively.

위 코드에서 <your_domain_id>, <your_region>, <your_account_id>을 여러분의 스튜디오 도메인 ID, AWS 리전, AWS 어카운트 ID로 변경하신 후 실행 해 주세요.

Jupyter Server가 재시작된 후에는 스튜디오 Launcher 화면에서 Code Server 버튼을 확인하실 수 있습니다.

Option B: SageMaker 노트북 인스턴스에서 code-server를 호스팅 하기

SageMaker 노트북 인스턴스에서 code-server를 호스팅하려면 아래 단계들을 따라하세요.

  1. 노트북 인스턴스의 Jupyter 또는 JupyterLab에서 터미널을 실행합니다. Jupyter를 사용하는 경우라면 New 메뉴에서 Terminal을 클릭합니다.
  2. code-server 솔루션 설치를 하려면, 터미널에서 다음 명령어를 실행합니다.
    curl -LO https://github.com/aws-samples/amazon-sagemaker-codeserver/releases/download/v0.1.5/amazon-sagemaker-codeserver-0.1.5.tar.gz
    tar -xvzf amazon-sagemaker-codeserver-0.1.5.tar.gz
    cd amazon-sagemaker-codeserver/install-scripts/notebook-instances
     
    chmod +x install-codeserver.sh
    chmod +x setup-codeserver.sh
    sudo ./install-codeserver.sh
    sudo ./setup-codeserver.sh

    code-server 및 extentions은 노트북 인스턴스에 설치됩니다. 그러나 인스턴스를 중지하거나 다시 시작하는 경우 다음 명령을 실행하여 code-server를 재구성해야 합니다.

    sudo ./setup-codeserver.sh

    The commands should take a few seconds to run. You can close the terminal tab when you see the following.
    이 명령이 실행되는데 몇 초가 걸립니다. 다음이 표시되면 터미널 탭을 닫을 수 있습니다.

  3. 이제 Jupyter 페이지를 새로고침 한 후 New 메뉴를 클릭하면 Code Server 옵션을 확인하실 수 있습니다.
  4. JupyterLab에서는 아래 화면처럼 Launcher에서 Code Server 버튼을 통해 code-server에 접속할 수 있습니다.

    Code Server를 클릭하면 브라우저의 새 탭에서 code-server로 접속하실 수 있습니다. Python과 Docker 확장기능이 이미 설치되어있기 때문에 머신러닝 프로젝트에 바로 활용하실 수 있습니다.

노트북 인스턴스에서 code-server를 자동으로 설치하기

IT 관리자는 Lifecycle configutation을 사용해 인스턴스 생성시에는 code-server를 자동으로 설치하고, 인스턴스가 시작 될 때 설정을 자동화할 수 있습니다.

여기서는 AWS CLI를 사용하여 노트북 인스턴스 및 lifecycle configuration을 생성합니다. on-create 구성은 install-codeserver를 실행하고 on-start는 setup-codeserver를 실행합니다.

AWS CLI가 설치되어 있고 적절한 권한이 주어진 터미널에서 다음 명령어를 실행합니다.

curl -LO https://github.com/aws-samples/amazon-sagemaker-codeserver/releases/download/v0.1.5/amazon-sagemaker-codeserver-0.1.5.tar.gz
tar -xvzf amazon-sagemaker-codeserver-0.1.5.tar.gz

cd amazon-sagemaker-codeserver/install-scripts/notebook-instances

aws sagemaker create-notebook-instance-lifecycle-config \
    --notebook-instance-lifecycle-config-name install-codeserver \
    --on-start Content=$((cat setup-codeserver.sh || echo "")| base64) \
    --on-create Content=$((cat install-codeserver.sh || echo "")| base64)

aws sagemaker create-notebook-instance \
    --notebook-instance-name <your_notebook_instance_name> \
    --instance-type <your_instance_type> \
    --role-arn <your_role_arn> \
    --lifecycle-config-name install-codeserver

# Make sure to replace <your_notebook_instance_name>, <your_instance_type>,
# and <your_role_arn> in the previous commands with the appropriate values.

위 코드에서 <your_notebook_instance_name>, <your_instance_type>, <your_role_arn>을 여러분의 설정 값으로 변경하신 후 실행해 주세요.
이제 노트북 인스턴스에 code-server 설치의 자동화 구성이 완료 되었습니다.

결론

SageMaker에서 호스팅되는 code-server를 통해 머신러닝 팀은 확장 가능한 클라우드 컴퓨팅에서 VS Code를 실행하여, 어디에서나 코드를 작성할 수 있고 머신러닝 프로젝트의 생산성을 높일 수 있습니다. IT 관리자는 클라우드에서 관리형의 안전한 IDE의 프로비저닝을 표준화하고 신속하게 처리하여 프로젝트에서 머신러닝 팀을 신속하게 온보딩하도록 도와줍니다.

이번 게시글에서는 스튜디오 및 노트북 인스턴스에 code-server를 빠르게 설치하는 데 사용할 수 있는 솔루션을 공유했습니다. 머신러닝팀이 자체적으로 실행할 수 있는 수동 설치 프로세스와 IT 관리자가 설정할 수 있는 자동 설치를 공유했습니다.

자세히 알아보려면 GitHub의 AWSome SageMaker를 방문하여 SageMaker 작업에 필요한 관련 최신 리소스를 확인 해 보세요.

Daeyeol Shim

Daeyeol Shim

심대열 AI/ML Expert 솔루션즈 아키텍트는 다양한 분야의 인공지능 경험을 바탕으로 고객이 AI/ML을 활용하여 비즈니스 성과를 달성할 수 있도록 고객과 함께 효율적인 아키텍처를 구성하고 도입하는 데 도움을 주는 역할을 수행하고 있습니다.