[Hands On] SageMaker Studio 활용하기

시작하기에 앞서 해당 게시글은 머신러닝에 대한 이야기 보다는 AWS 클라우드에서 SageMaker Studio를 활용하여 데이터 분석 작업을 쉽게 접근 하실 수 있는 방법에 대한 가이드를 제공합니다. 

<Amazon SageMaker Studio>

기계 학습을 위한 최초의 완전한 IDE(통합개발환경) 입니다.

  • 탄력적이고 공유가능한 Jupyter노트북을 제공하며  빠른 작업 시작이 가능합니다.
  • AutoPilot을 사용하여 인기있는 오픈소스 모델과 일반적인 사용 사례를 위한 솔루션이 포함된 기계 학습 시작 관리자가 포함되어 빠르게 ML모델을 구축 가능합니다.
  • Tensorflow, MXNet, PyToch, 노트북 실행을 위한 컴퓨팅 옵션 등의 기본 제공 이미지 세트 또는 사용자 지정 기본 제공 이미지 및 커널을 등록하여 사용 가능합니다.
  • 딥러닝 프레임워크를 지원하며 고성능을 위해 자동으로 구성 및 최적화 됩니다.
<Amazon SageMaker Studio 도메인>

Amazon SageMaker 도메인은 연결된 Amazon Elastic File System (Amazon EFS) 볼륨, 권한이 부여된 사용자 목록, 다양한 보안, 애플리케이션, 정책 및 Amazon Virtual Private Cloud (Amazon VPC) 로 구성됩니다.

<사전 준비>

1. 쉽게 시작하는 캐글 데이터 분석 책의 일부내용을 머신러닝 코드로  SageMaer Studio를 통해 실습하였습니다.

2. Kaggle에서 제공하는 주택가격 예측하기 데이터를 다운로드하여 분석하였습니다.

  • 데이터를 다운로드합니다.
<SageMaker Studio 사용방법>
1. S3 데이터 업로드
  • AWS Management Console > S3 메뉴 > 버킷만들기를 클릭합니다.
  • 버킷이름(예, s3-wyc-sagemaker) > AWS 리전(아시아 태평양(서울) ap-northeast-2 선택) > 버킷만들기를 클릭합니다.
  • 폴더 만들기(house_prices) > 하위 data, submit 폴더를 생성합니다.
  • data 폴더에 다운로드 받은 house-prices-advanced-regression-techniques.zip의 압축 해제 후 파일을 업로드합니다.
2. SageMaker Studio 도메인 생성 및 사용 설정
  •  Amazon Sagemaker > SageMaker Studio 열기를 클릭합니다.
  • SageMaker 도메인 > 빠른설정 > 사용자프로필(sagemaker-domain-da) > 기본 실행 역할 > 새 역할 생성을 클릭합니다.
  • IAM 역할 생성시 파일 업로드 된 특정 S3 버킷에 대한 접근 권한을 부여할 수 있습니다. 
  • VPC, Subnet을 선택합니다. dafault 값으로 선택하여 진행하겠습니다.
  • VPC를 통해 네트워크 액세스 및 인터넷 연결을 세부적으로 제어가능하도록 지원됩니다.
  • 저장 및 계속을 클릭하면 도메인 구성작업이 시작됩니다. 수 초 ~ 몇 분 소요됩니다. 
  • 도메인 생성이 완료 되면 사용자 추가에 프로파일이 생성되어져서 조회되어집니다. 앱 시작 버튼을 클릭합니다.
  • 사용자를 추가하여 해당 도메인을 공유하여 사용할 수 있습니다.
  • default JupyterServer 애플리케이션이 구동되어집니다.
  • 구동이 완료되면 Launcher 페이지가 열리며, Notebook을 선택하여 생성합니다.
  • 주피터 노트북 .ipynb 파일의 파일명을 변경합니다.(예시, kaggle_house_prices.ipynb)
  • 노트북 인스턴스 타입이 디폴트가 Data Science (2 vCPU+4 GiB ml.t3.medium) 으로 시작되며 변경 가능합니다.
<SageMaker Studio에서 ML 분석해보기>

책 내용을 요약하여  ML단계를 나열하자면 다음과 같습니다.

데이터 분석 → 목적변수 전처리 → 설명변수 전처리 → 설명변수 확인하여 특징 값 생성 → 하이퍼파라메터 최적화 → 최종 결과물 생성

  • 목적변수 : 예측하고 싶은 정보입니다.
  • 설명변수 : 예측에 사용하는 정보입니다.
  • 특징값 : 데이터의 여러 특징을 나타내는 정보, 설명 변수를 가공한 정보, 데이터의 특성을 알아야 하기 때문에 여러분야의 배경지식이 필요합니다.
  • 하이퍼파라메터 : 머신러닝에서 하이퍼파라미터는 최적의 훈련 모델을 구현하기 위해 모델에 설정하는 변수로 학습률(Learning Rate),  훈련 반복 횟수, 가중치 초기화 등을 결정할 수 있습니다. 또한 하이퍼파라미터 튜닝 기법을 적용하여 훈련 모델의 최적값들을 찾을 수 있습니다.

SageMaker Studio에서 테스트 해본 소스코드

ML 분석과정을 SageMaker Studio에서 수행하는 과정중에 참고할 만한 사항을 공유드립니다.

1. CSV 데이터를 S3로부터 읽기
  • SageMaker Studio 도메인 생성시 IAM Role에 해당 버킷에 대한 접근 권한을 부여해주고, 소스코드에서 boto3 라이브러리를 통해 S3에 접근합니다.
2. LightGBM 모듈 불러오기

예제소스에서 LightGBM 알고리즘을 사용하였는데,  해당 알고리즘에 대해 요약해보았습니다.

  • LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에 각광받는 모델입니다.
  • LightGBM은 XGBoost와 비교해 큰 예측 성능 차이를 보이지 않으면서 학습 시간을 상당히 단축시킨 모델입니다.
  • 공식 문서에 따르면 일반적으로 10,000 건 이하의 데이터 세트를 다루는 경우 과적합 문제가 발생하기 쉽다는 단점이 존재합니다.
  • LightGBM은 일반적인 균형 트리 분할 방식과 다른 리프 중심 트리 분할 방식 이용, 이 방법은 트리의 균형을 맞추지 않고 최대 손실 값을 가지는 리프 노드를 지속적으로 분할 하면서 트리가 깊어지고 비대칭적인 트리를 만듦니다. 하지만 결국 균형 트리 분할 방식보다 예측 오류 손실을 최소화 할 수 있습니다.
  • 테스트 시 해당 모듈이 SageMaker 인스턴스 이미지에 설치가 되어있지 않아, 오류가 발생하였습니다.
  • 노트북의 상단메뉴에 Launch Terminal in current SageMaker Image 아이콘을 클릭하면 현재 SageMaker 노트북의 인스턴스에 터미널로 접속된다. 
  • 터미널에서 LighGBM 모듈을 설치한 후 실행한다.
3. Optuna 패키지 불러오기

예제소스에서 사용하는 Optuna 라이브러리는 하이퍼파라미터 튜닝에 쓰고 있는 최신 Automl  기법입니다.

  • 빠르게 튜닝이 가능하다는 장점이 있습니다.
  • 하이퍼파라미터 튜닝 방식을 지정할수 있다. -> 직관적인 api인 튜닝된 lightgbm도 제공해줍니다.
  • 다른 라이브러리들에 비해 직관적인 장점이 있어 코딩하기 용이합니다.
 
  • 테스트 시 해당 모듈이 SageMaker 인스턴스 이미지에 설치가 되어있지 않아, 오류가 발생하였습니다. 
  • Optuna는 설치되어져야 하는 의존성을 가진 다른 모듈들이 존재하는 관계로 conda-forge 옵션을 주어 패키지를 설치합니다.
4. 결과 csv 파일 S3 업로드하기
  • 소스코드에서 boto3 라이브러리로 S3 버킷의 결과파일 경로에 csv 결과파일을 업로드합니다.
  • S3 메뉴 > S3 버킷의 결과 파일 경로를 확인합니다.
5. 결과 파일 Kaggle 제출하기
  • S3에 업로드된 결과파일을 다운로드 받아 submisson.csv 파일명으로 Kaggle에 결과파일을 제출해봅니다. 예측 결과를 평가하는 방법은 실제 값 로그와 예측 값 로그 사이의 RMSE(평균 제곱근 오차)이므로 Score가 낮을 수록 평가가 좋습니다.
<SageMaker Studio에서 공유하기>
1. github 연동하기

SageMaker Studio에서 github를 통해 작업한 노트북 소스를 다른 사용자와 공유하여 작업이 가능합니다.

  • github에 레퍼지토리를 새로만듭니다.
  • github에 소스 업로드시 필요한 Personel Access Tokens를 발급해 놓습니다. 발급당시에만 확인 가능함으로 추후를 위해 기록해둡니다. 아니면 삭제 후 재 발급해야 하는 번거로움이 있습니다.
  • 상단 사용자 프로파일 아이콘을 클릭하여 열린 메뉴에서 Settings로 진입합니다.
  • 진입 후 좌측 메뉴에서 Developer Settings 메뉴로 진입합니다.
  • 좌측에 보이는 Personel access tokens메뉴로 진입하여 Generate new token 버튼을 클릭합니다.
  • 권한을 주고자 하는 옵션들을 체크합니다.
  • Generate token 버튼을 클릭합니다.
  • 그 후 화면에 보여지는 토큰 값을 기록해 둡니다.
  • github clone 주소를 복사해 둡니다.
  • SageMake Studio에서 좌측 Git 아이콘을 클릭합니다.
  • Clone a Repository 버튼을 클릭합니다.
  • Clone a Repo 팝업에 복사해 둔 github clone 주소를 입력하고 clone 버튼을 실행합니다.
  • github 사용자명과 password에는 personel access token 값을 입력합니다.
  • 좌측 네비게이션에 github에 연결된 정보와 변경된 파일들이 보여집니다.
  • git 명령어를 수행할 터미널로 접속합니다. 
  • 터미널에서 git명령을 수행하여 작업한 소스를 생성한 레퍼지터리로 push합니다.
  • github에서 노트북 소스코드가 정상 업로드 된것을 확인합니다.
2. 미리 서명된 url을 통해 공유하기
  • 도메인에서 지정된 UserProfile에 대한 URL을 생성합니다.
  • 웹 브라우저에서 액세스하면 사용자는 Amazon SageMaker Studio에 자동으로 로그인되고 도메인의 Amazon Elastic File System(EFS) 볼륨과 연결된 모든 앱 및 파일에 대한 액세스 권한이 부여됩니다.
  • aws cli를 사전에 설치해 두어야 합니다.
  • 리턴값인 AuthorizedUrl로 웹브라우저에 접속하면 공유한 Amazon SageMaker Studio에 자동 접속 되어집니다.
Tip) SageMaker Notebook 이미지 선택시 Start Script 설정

SageMaker 이미지 선택시 Start-up script를 선택하는 메뉴가 있습니다. Start-up script에 위에서 lightgbm, optuna등 필요한 패키지를 설치하는 명령어를 넣어두면 편할텐데, 이 선택목록에 스크립트를 넣으려면 어떻게 해야할지 알아봤습니다.  

별도의 Console메뉴에서는 제공되지 않았고 aws cli를 이용해서 Studio Lifecycle을 구성해야되게 되어있습니다.

 명령어 실행시 스크립트 내용은 base64로 인코딩해서 전달해야합니다. 로컬환경이 윈도우 환경이고 openssl 명령어를 사용할건데, 윈도우 기본 명령에는 존재하지 않고, 찾아보니 로컬에 git이 설치되어있고, git 실행명령어 파일들 사이에 openssl이 존재하여 저는 그것을 사용하였습니다.

윈도우 쉘은 PowerShell을 사용하였습니다.

 

1. Start script를 로컬에 작성해 둡니다.
2. Studio Lifecycle을 구성합니다.
  • Git설치후 명령실행파일이 있는 경로로 이동합니다. (cd ‘C:\Program Files\Git\usr\bin’)
  • base64인코딩 결과로 변수설정을 해 놓습니다.($LCC_CONTENT=./openssl.exe base64 -A -in C:\install_package.sh)
  • Studio Lifecycle을 구성합니다.(aws sagemaker create-studio-lifecycle-config –studio-lifecycle-config-name <생성할 config명칭> –studio-lifecycle-config-content $LCC_CONTENT –studio-lifecycle-config-app-type KernelGateway)
  • 삭제하고 싶다면, (aws sagemaker delete-studio-lifecycle-config –studio-lifecycle-config-name  <생성된 config명칭> )
3. 사용자 프로파일에 생성된 Lifecycle을 연결해줍니다.
  • aws sagemaker update-user-profile (or create-user-profile) –domain-id <도메인id> –user-profile-name <사용자 프로파일명> –region <리전명> –user-settings ‘{\”KernelGatewayAppSettings\”:{\”LifecycleConfigArns\”:[“\”Lifecycle구성시 생성되어 반환된 arn\””]}}’
4. start script 선택 목록에 나타납니다.