23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요, 도선입니다.
저는 SK텔레콤에서 Cloud Radar의 AI/ML 서비스를 개발 및 운영하고 있습니다.
Cloud FinOps 플랫폼인 Cloud Radar는 SKT의 Cloud 고객에게 제공하는 CMP(Cloud Management Platform) 솔루션의 이름 입니다.
지난 시간에는 Cloud 비용 최적화를 위한 전반적인 사항에 대해서 이야기 했었는데요,
([Cloud FinOps] 당신의 Cloud 비용은 안녕하신가요???)
이번 시간에는 구체적인 내용 중 하나인 AutoStop에 대해서 알아보겠습니다.
그 중에서도 AWS SageMaker의 Notebook Instance 를 자동 종료하여 불필요한 비용을 줄이는 방법에 대해서 알아보겠습니다.
AI/ML 모델을 만들고 운영하기 위해서 AWS에서는 Sagemaker라는 서비스를 제공하고 있습니다.
그래서 Sagemaker에는 모델의 개발과 운영에 도움이 되는 많은 기능들이 통합되어 있는데요.
예를 들면, ML 통합 개발 환경인 Studio, No Code 기반의 모델 개발을 위한 Canvas, R 모델 개발을 위한 RStudio, Jupyter Notebook 개발 환경을 제공하는 Notebook 등이 있습니다.
저 같은 경우에는 Noetbook 서비스를 주로 사용하고 있습니다.
물론 기본 로직은 로컬에서 만들기도 하지만 결국 AWS 상에 올라가 있는 다른 서비스 및 데이터들을 사용하기 위해서는 SageMaker Notebook 에서 실행 시키면서 작업 하는 것이 필요합니다.
여기서 비용을 효율화 할 수 있는 포인트가 발생합니다 SageMaker 서비스가 다른 서비스 보다 단가가 높기 때문에 특히 신경을 써주면 좋습니다.
물론 절대적으로 비교할 수는 없겠지만 EC2 t4g.2xlarge의 경우 시간당 0.3328 달러인데 노트북 인스턴스 ml.t3.2xlarge는 0.499 달러로 34%이상 비싸네요.
이처럼 비용이 비싸기 때문에 최대한 사용 시간에만 인스턴스를 실행 시키려 합니다.
즉, 출근해서 작업 전에 인스턴스를 실행 시키고 퇴근 전에는 종료 시키는 작업을 하는데요.
깜빡해서 퇴근전에 종료 하는 것을 잊을 수도 있고, 근무 중에 다른 업무로 실제로는 사용하지 않으면서 인스턴스는 실행 상태이기 때문에 비용이 발생하는 경우가 있게 됩니다.
이와 같은 비효율을 막기위해서, 사용하지 않는 시간에 자동으로 인스턴스를 종료하여 비용을 절감하는 방법이 Auto Stop 입니다.
다시 말하면 Notebook Instance를 사용하지 않을 때는 자동으로 종료하도록 만드는 것이 바로 Notebook-Instance Auto Stop 입니다.
이를 코드로 구현하기 위해서는 두가지의 기능이 필요한데요.
첫번째는 노트북이 사용중인지 아닌지 확인하고 미사용중으로 판단되면 노트북 인스턴스를 Stop 시키는 기능이 필요합니다.
그리고 두번째로는 첫번째 기능을 정해진 주기마다 실행하는 것이 필요합니다.
이러한 기능 구현 코드를 AWS 예제 github에서도 아래와 같이 제공 되고 있습니다.
autostop.py가 첫번째로 이야기한 사용 여부를 확인 및 종료하는 기능이고, on-start.sh이 autostop.py를 주기적으로 실행시키는 두번째 기능 입니다.
Auto stop을 나의 노트북 인스턴스에 적용 시키는 방법은 간단합니다.
노트북 인스턴스를 실행(Start) 시킨 다음에 터미널을 열고 on-start.sh을 가져와서 실행 시키면 됩니다.
가져오는 코드는 아래와 같습니다.
sh-4.2$ wget https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples/raw/master/scripts/auto-stop-idle/on-start.sh실행을 위해 모드를 바꾸어주고 "ROOT"로 실행 시킵니다.
sh-4.2$ chmod +x on-start.sh
sh-4.2$ sudo ./on-start.sh 정상적으로 실행되었는지 확인을 위해서 root의 crontab list를 확인해 보면 아래와 같은 리스트가 나옵니다.
sh-4.2$ sudo crontab -l
*/5 * * * * /home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python /home/ec2-user/SageMaker/autostop.py --time 3600 --ignore-connections >> /var/log/jupyter.logcron job이 잘 등록되었고 실행중임을 알 수 있습니다.
그런데 이런 작업을 노트북 인스턴스를 실행 시킬때 마다 해줘야 한다면 너무 불편한 일이겠죠?!
빠르신 분들을 이미 아셨겠지만, 이처럼 노트북 인스턴스를 실행시키거나 종료할 때 필요한 스크립트를 미리 등록해서 관리/적용 할 수 있습니다.
이것이 바로 Lifecycle configurations(수명 주기 구성) 입니다. 아래 이미지에서와 같이 노트북 뿐만 아니라 JupyterLab, Studio 등에서 활용할 수 있도록 만들 수 있습니다.
SageMaker Lifecycle configurations 메뉴로 들어가서 생성을 크릭하면 아래와 같은 화면이 나옵니다.
여기에서 이름을 입력하고 Scripts에 Start notebook 탭의 내용으로 on-start.sh의 내용을 입력해주면 됩니다.
이것은 다시 말하면, 노트북 인스턴스가 시작 할 때 실행시킬 내용을 정의하는 것 입니다.
이렇게 등록된 Lifecycle configurations의 이름을 아래와 같이 노트북을 생성 할 때 Additional configuration에서 리스트 중 선택해주면 연결이 완료 됩니다.
이번 시간에는 AWS Sagemaker Notebook Instance를 특정시간 동안 사용하지 않는 경우 자동으로 인스턴스를 종료하는 Auto Stop과 그 상세 구현 방법에 대해서 알아보았습니다.
위에서 말씀드렸던 git repo를 보면 Auto Stop 뿐만아니라 다양한 Lifecycle configurations의 예시를 제공하고 있으니 참고하시면 좋을 것 같습니다.
여러분의 클라우드 비용을 최적화하는데 조금이라도 도움이 되셨기를 바랍니다.
참고로 Cloud Radar에서는 직접적이고 빠르게 비용 효과를 확인할 수 있는 자원최적화와 약정최적화 관련된 다양한 서비스를 제공 및 고도화하고 있습니다.
감사합니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.