Skip to content

Commit

Permalink
add contents about estimator training job
Browse files Browse the repository at this point in the history
  • Loading branch information
camila-buzzni committed Jun 30, 2024
1 parent 2071e06 commit 7ede526
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 38 deletions.
7 changes: 5 additions & 2 deletions aws-sagemaker/2.experiment_training/keras_experiment.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,15 @@
"sagemaker_session = sagemaker.session.Session()\n",
"boto_session = boto3.Session()\n",
"\n",
"\n",
"role = sagemaker.get_execution_role()\n",
"# SageMaker사용시 log, model artifact 등의 저장을 위해 default로 지정되는 s3를 사용할 수도 있고,\n",
"# 아니면 직접 s3 세팅해서 이걸 사용하라고 지정해 줄 수도 있습니다.\n",
"# 실습에서는 default로 제공되는 s3를 사용해보겠습니다.\n",
"\n",
"# default bucket이 아니라 직접 만든 s3 bucket을 사용할 수도 있습니다.\n",
"# 만약 직접 생성한 s3 bucket을 사용할 경우 에러가 난다면 아래의 두 경우일 확률이 높습니다.\n",
"# 1. bucket이 없는 경우. 즉, bucket을 생성하지 않았는데 그 bucket을 사용하려고 하는 경우\n",
"# 2. bucket을 생성했지만, role에 해당 bucket에 대한 read, write 권한이 없는 경우\n",
"default_bucket = sagemaker_session.default_bucket()\n",
"\n",
"# sagemaker를 사용\n",
Expand All @@ -128,7 +132,6 @@
"metadata": {},
"outputs": [],
"source": [
"print(sagemaker_session)\n",
"print(sagemaker_session)\n",
"print(role)\n",
"print(default_bucket)\n",
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -1,13 +1,72 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "0c95cd2b",
"metadata": {},
"source": [
"# Model Training with SageMaker Estimator Training Job and track it using Experiments\n"
]
},
{
"cell_type": "markdown",
"id": "bb42e3cb",
"metadata": {},
"source": [
"## 개요\n",
"\n",
"- SageMaker Training에 SageMaker Experiments(실험)을 추가하여 여러 실험의 결과를 비교해 봅니다.\n",
" - [작업 실행 시 필요 라이브러리 import](#작업-실행-시-필요-라이브러리-import)\n",
" - [SageMaker 세션과 Role, 사용 버킷 정의](#SageMaker-세션과-Role,-사용-버킷-정의)\n",
" - [하이퍼파라미터 정의](#하이퍼파라미터-정의)\n",
" - [학습 실행 작업 정의](#학습-실행-작업-정의)\n",
" - 학습 코드 명\n",
" - 학습 코드 폴더 명\n",
" - 학습 코드가 사용한 Framework 종류, 버전 등\n",
" - 학습 인스턴스 타입과 개수\n",
" - SageMaker 세션\n",
" - 학습 작업 하이퍼파라미터 정의\n",
" - 학습 작업 산출물 관련 S3 버킷 설정 등\n",
" - [학습 데이터셋 지정](#학습-데이터셋-지정)\n",
" - 학습에 사용하는 데이터셋의 S3 URI 지정\n",
" - [SageMaker 실험 설정](#SageMaker-실험-설정)\n",
" - [학습 실행](#학습-실행)\n",
" - [데이터 세트 설명](#데이터-세트-설명)\n",
" - [실험 결과 보기](#실험-결과-보기)\n",
"\n",
"## Reference\n",
"\n",
"- https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-experiments/sagemaker_job_tracking/tensorflow_script_mode_training_job.ipynb\n",
"- https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator\n",
"- https://sagemaker.readthedocs.io/en/stable/experiments/sagemaker.experiments.html\n"
]
},
{
"cell_type": "markdown",
"id": "956ce4fb",
"metadata": {},
"source": [
"## 작업 실행 시 필요 라이브러리 import\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6eb7371c",
"metadata": {},
"outputs": [],
"source": [
"import sys"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e079c9e2-4410-4374-83ee-e3fe4f6ac650",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"# update boto3 and sagemaker to ensure latest SDK version\n",
"!{sys.executable} -m pip install --upgrade pip\n",
"!{sys.executable} -m pip install --upgrade boto3\n",
"!{sys.executable} -m pip install --upgrade sagemaker\n",
Expand All @@ -31,6 +90,14 @@
"from sagemaker.utils import unique_name_from_base"
]
},
{
"cell_type": "markdown",
"id": "8a6f814b",
"metadata": {},
"source": [
"## SageMaker 세션과 Role, 사용 버킷 정의\n"
]
},
{
"cell_type": "code",
"execution_count": null,
Expand All @@ -39,19 +106,23 @@
"outputs": [],
"source": [
"\n",
"sagemaker_session = Session() \n",
"boto_sess = boto3.Session()\n",
"sagemaker_session = sagemaker.session.Session()\n",
"boto_session = boto3.Session()\n",
"\n",
"role = get_execution_role()\n",
"default_bucket = sagemaker_session.default_bucket()\n",
"role = sagemaker.get_execution_role()\n",
"# SageMaker사용시 log, model artifact 등의 저장을 위해 default로 지정되는 s3를 사용할 수도 있고,\n",
"# 아니면 직접 s3 세팅해서 이걸 사용하라고 지정해 줄 수도 있습니다.\n",
"# 실습에서는 default로 제공되는 s3를 사용해보겠습니다.\n",
"\n",
"# default bucket이 아니라 직접 만든 s3 bucket을 사용할 수도 있음. \n",
"# 만약 직접 생성한 s3 bucket을 사용할 경우 에러가 난다면 아래의 두 경우일 확률이 높음\n",
"# default bucket이 아니라 직접 만든 s3 bucket을 사용할 수도 있습니다.\n",
"# 만약 직접 생성한 s3 bucket을 사용할 경우 에러가 난다면 아래의 두 경우일 확률이 높습니다.\n",
"# 1. bucket이 없는 경우. 즉, bucket을 생성하지 않았는데 그 bucket을 사용하려고 하는 경우\n",
"# 2. bucket을 생성했지만, role에 해당 bucket에 대한 read, write 권한이 없는 경우\n",
"default_bucket = sagemaker_session.default_bucket()\n",
"\n",
"sm = boto_sess.client(\"sagemaker\")\n",
"region = boto_sess.region_name\n"
"# sagemaker를 사용\n",
"sm = sagemaker_session.client(\"sagemaker\")\n",
"region = sagemaker_session.region_name"
]
},
{
Expand All @@ -62,28 +133,20 @@
"outputs": [],
"source": [
"print(sagemaker_session)\n",
"print(role)\n",
"print(default_bucket)\n",
"print(region)"
"print(sm)\n",
"print(region) # ex) us-east-2"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1cb1af6e-a834-48f3-a85d-b384850b3146",
"cell_type": "markdown",
"id": "8063c278",
"metadata": {},
"outputs": [],
"source": [
"role"
"## Experiment을 생성하고 training job을 실행하기\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1b5f090c-bfbf-48dd-902a-87fd9845a74c",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
Expand All @@ -104,7 +167,7 @@
"outputs": [],
"source": [
"\n",
"experiment_name = \"fc-tensorflow-estimator-experiment-practice\"\n",
"experiment_name = \"tensorflow-estimator-experiment-practice\"\n",
"\n",
"batch_size = 256\n",
"epochs = 5\n",
Expand All @@ -118,15 +181,15 @@
" run.log_parameter(\"epochs\", epochs)\n",
" run.log_parameter(\"dropout\", dropout)\n",
"\n",
" # Estimator를 사용하지 않는다면, 여기에 직접 model training 코드를 작성하겠지만\n",
" # Estimator를 사용하지 않는다면, 여기에 ../2.experiment_training/keras_experiment.ipynb의 def get_model(dropout=0.5): 처럼 model training 코드를 작성하겠지만\n",
" # 여기서는 Estimator의 from sagemaker.tensorflow.estimator import TensorFlow를 사용해서\n",
" # 추상화된 컨데이너를 사용하도록 코드를 작성한다. \n",
" est = TensorFlow( # TensorFlow Estimator\n",
" # 추상화된 컨데이너를 사용하도록 코드를 작성합니다.\n",
" est = TensorFlow( # TensorFlow Estimator. https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator\n",
" entry_point=\"./script/train.py\",\n",
" role=role,\n",
" model_dir=False,\n",
" # 주의: hyperparameters가 entry_point의 script에서 사용하는 인자와 일치해야 한다. \n",
" # Estimator가 \"./script/train.py\"이 hyperparameters를 인자로 자신의 script에 넣어주기 때문. \n",
" # 주의: hyperparameters가 entry_point의 script(\"./script/train.py\")에서 사용하는 인자와 일치해야 합니다.\n",
" # Estimator가 \"./script/train.py\" 에서 이 hyperparameters를 인자로 자신의 script에 넣어주기 때문입니다.\n",
" # def parse_args():\n",
" # parser = argparse.ArgumentParser()\n",
"\n",
Expand All @@ -135,16 +198,19 @@
" # parser.add_argument(\"--dropout\", type=float, default=0.01)\n",
"\n",
" # return parser.parse_known_args()\n",
" hyperparameters={\"epochs\": epochs, \"batch_size\": batch_size, \"dropout\": dropout},\n",
" framework_version=\"2.8\", # tensorflow framework version\n",
" py_version=\"py39\", # python version\n",
" hyperparameters={\"epochs\": epochs,\n",
" \"batch_size\": batch_size, \"dropout\": dropout},\n",
" framework_version=\"2.8\", # tensorflow framework version\n",
" py_version=\"py39\", # python version\n",
" instance_type=\"ml.m5.xlarge\",\n",
" instance_count=1,\n",
" keep_alive_period_in_seconds=3600,\n",
" environment={\"REGION\": region},\n",
" )\n",
"\n",
" est.fit() # .fit을 호출하면, AWS SageMaker는 자동으로 Estimator를 기반으로 필요한 인프라를 provisioning하고 training job이 생성되어 학습을 실행시킨다. \n"
" # Training Job 시작\n",
" # .fit을 호출하면, AWS SageMaker는 자동으로 Estimator를 기반으로 필요한 인프라를 provisioning하고 training job이 생성되어 학습을 실행시킨다.\n",
" est.fit()"
]
},
{
Expand Down Expand Up @@ -334,7 +400,7 @@
"metadata": {},
"outputs": [],
"source": [
"# 학습 완료시킨 Model을 생성시켜보자. \n",
"# 학습 완료시킨 Model을 생성시켜보자.\n",
"from sagemaker.tensorflow.model import TensorFlowModel"
]
},
Expand All @@ -345,7 +411,8 @@
"metadata": {},
"outputs": [],
"source": [
"model = TensorFlowModel(model_data=est.model_data, role=role, framework_version=\"2.8\")"
"model = TensorFlowModel(model_data=est.model_data,\n",
" role=role, framework_version=\"2.8\")"
]
},
{
Expand Down
2 changes: 1 addition & 1 deletion aws-sagemaker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
- Set Up
- Data Labeling, EDA, Feature Engineering
- Model Training with Experiments
- Model Training
- Model Training with SageMaker Estimator Training Job and track it using Experiments
- Hyper Parameter Tuning
- Model Bias Detection
- ML Pipeline
Expand Down

1 comment on commit 7ede526

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MODEL METRICS

Training variance explained: 33.0%
Test variance explained: 32.0%

Data viz

feature_importance
residuals

Please sign in to comment.