기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SageMaker Debugger는 Amazon SageMaker AI에 가져오는 모든 딥 러닝 모델에 사용할 수 있습니다. AWS CLI, SageMaker AI Estimator
API 및 Debugger APIs를 사용하면 Docker 기본 이미지를 사용하여 컨테이너를 빌드하고 사용자 지정하여 모델을 훈련할 수 있습니다. 디버거를 사용자 지정 컨테이너와 함께 사용하려면 디버거 후크 콜백을 구현하고 훈련 작업에서 텐서를 검색하도록 훈련 스크립트를 최소한으로 변경해야 합니다. 다음 섹션에서는 사용자 지정 훈련 컨테이너에서 Debugger를 사용하는 방법을 안내합니다.
디버거로 사용자 지정 컨테이너를 구축하려면 다음과 같은 리소스가 필요합니다.
선택한 Docker 기본 이미지
디버거 후크가 등록된 훈련 스크립트 - 훈련 스크립트에 디버거 후크를 등록하는 방법에 대한 추가 정보는 훈련 스크립트에 디버거 후크 등록하기을 참조하세요.
디버거를 사용자 지정 훈련 컨테이너와 함께 사용하는 종합 예제를 보려면 다음 예제 노트북을 참조하세요.
작은 정보
디버거 가이드가 포함된 이 사용자 지정 컨테이너는 사용자 지정 훈련 컨테이너를 구축하고 Amazon ECR에 푸시하는 방법을 자세히 안내하는 자체 훈련 컨테이너 가져오기 설명서가 확장된 것입니다.
사용자 지정 훈련 컨테이너 제작 준비
docker 컨테이너를 구축하려면 파일의 기본 구조가 다음과 같아야 합니다.
├── debugger_custom_container_test_notebook.ipynb # a notebook to run python snippet codes
└── debugger_custom_container_test_folder # this is a docker folder
├── your-training-script.py # your training script with Debugger hook
└── Dockerfile # a Dockerfile to build your own container
훈련 스크립트에 디버거 후크 등록하기
모델 훈련을 디버깅하려면 훈련 스크립트에 디버거 후크를 추가해야 합니다.
참고
이 단계는 모델 훈련을 디버깅하기 위한 모델 파라미터(출력 텐서)를 수집하는 데 필요합니다. 모니터링 및 프로파일링만 하려는 경우 사용자는 이 후크 등록 단계를 건너뛰고 추정기를 구성할 때 debugger_hook_config
파라미터를 제외하면 됩니다.
다음 예제 코드는 Keras ResNet50 모델을 사용하는 훈련 스크립트의 구조와 디버거 후크를 디버깅을 위한 Keras 콜백으로 전달하는 방법을 보여줍니다. 전체 훈련 스크립트를 찾으려면 TensorFlow training script with SageMaker Debugger hook
# An example of training script (your-training-script.py)
import tensorflow.compat.v2 as tf
from tensorflow.keras.applications.resnet50 import ResNet50
import smdebug.tensorflow as smd
def train(batch_size, epoch, model, hook):
...
model.fit(X_train, Y_train,
batch_size=batch_size,
epochs=epoch,
validation_data=(X_valid, Y_valid),
shuffle=True,
# smdebug modification: Pass the Debugger hook in the main() as a Keras callback
callbacks=[hook
])
def main():
parser=argparse.ArgumentParser(description="Train resnet50 cifar10")
# hyperparameter settings
parser.add_argument(...)
args = parser.parse_args()
model=ResNet50(weights=None, input_shape=(32,32,3), classes=10)
# Add the following line to register the Debugger hook for Keras.
hook=smd.KerasHook.create_from_json_file()
# Start the training.
train(args.batch_size, args.epoch, model, hook)
if __name__ == "__main__":
main()
지원되는 프레임워크 및 알고리즘에 디버거 후크를 등록하는 방법에 대한 추가 정보는 SMDebug 클라이언트 라이브러리의 다음 링크를 참조하세요.
다음 예제 노트북의 훈련 스크립트에서 사용자는 훈련 스크립트에 디버거 후크를 추가하고 출력 텐서를 자세히 수집하는 방법에 대한 추가 예제를 찾을 수 있습니다.
TensorFlow 2.1 프레임워크가 있는 스크립트 모드의 디버거
딥 러닝 컨테이너와 스크립트 모드에서의 디버거 사용에 대한 차이를 확인하려면, 이 노트북을 열고 이전 디버거를 딥 러닝 컨테이너 TensorFlow v2.1 노트북 예제
에 나란히 놓습니다. 스크립트 모드에서는 예측기를 설정하는 스크립트에서 후크 구성 부분이 제거됩니다. 대신, 디버거 후크 기능이 스크립트 모드의 TensorFlow Keras ResNet 훈련 스크립트
인 훈련 스크립트로 병합됩니다. 훈련 스크립트는 TensorFlow Resnet50 알고리즘과 통신하기 위해 필요한 TensorFlow Keras 환경에 smdebug
라이브러리를 가져옵니다. 또한train
함수 안에callbacks=[hook]
인수를 추가하고(49행) SageMaker Python SDK를 통해 제공되는 수동 후크 구성(89행)을 추가하여smdebug
후크 기능을 수동으로 구현합니다.이 스크립트 모드 예제는 TF 2.1 예제에서 스크립트를 변경하지 않고 직접 비교하기 위해 TF 2.1 프레임워크에서 훈련 작업을 실행합니다. 스크립트 모드에서 Debugger를 설정하면 AWS Deep Learning Containers에서 다루지 않는 프레임워크 버전을 유연하게 선택할 수 있다는 이점이 있습니다.
스크립트 모드의 PyTorch 컨테이너에서 Amazon SageMaker Debugger 사용하기
이 노트북은 PyTorch v1.3.1 프레임워크의 스크립트 모드에서 디버거를 활성화합니다. PyTorch v1.3.1은 SageMaker AI 컨테이너에서 지원되며이 예제에서는 훈련 스크립트를 수정하는 방법에 대한 세부 정보를 보여줍니다.
SageMaker AI PyTorch 예측기는 기본적으로 이미 스크립트 모드입니다. 노트북에서는
script_mode
를 활성화할 라인이 예측기 구성에 포함되어 있지 않습니다.이 노트북은 원래 pytorch 훈련 스크립트
를 디버거가 활성화된 수정 버전으로 변경하는 자세한 단계를 보여줍니다. 또한, 이 예제에서는 사용자가 디버거 내장 규칙을 사용하여 그라디언트 소멸 문제와 같은 훈련 문제를 감지하고, 디버거 평가판 기능을 사용하여 저장된 텐서를 호출하고 분석하는 방법을 보여 줍니다.
Dockerfile 생성 및 구성
SageMaker AI JupyterLab을 열고이 예제debugger_custom_container_test_folder
에서는 훈련 스크립트 및를 저장할 새 폴더를 생성합니다Dockerfile
. 다음 코드 예제는 필수 Docker 구축 명령이 포함된 Dockerfile
입니다. 다음 코드를 Dockerfile
텍스트 파일에 붙여 넣고 저장합니다. 훈련 스크립트를 동일한 폴더에 업로드합니다.
# Specify a docker base image
FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3
RUN /usr/bin/python3 -m pip install --upgrade pip
RUN pip install --upgrade protobuf
# Install required packages to enable the SageMaker Python SDK and the smdebug library
RUN pip install sagemaker-training
RUN pip install smdebug
CMD ["bin/bash"]
사전 구축된 AWS 딥 러닝 컨테이너 이미지를 사용하려면 사용 가능한 AWS 딥 러닝 컨테이너 이미지를 참조하세요
사용자 지정 훈련 컨테이너를 구축하여 Amazon ECR에 푸시하기
테스트 노트북 debugger_custom_container_test_notebook.ipynb
을 만들고 노트북 셀에서 다음 코드를 실행합니다. 그러면 debugger_byoc_test_docker
디렉터리에 액세스하고, 지정된 algorithm_name
으로 Docker를 빌드하고, Docker 컨테이너를 Amazon ECR로 푸시합니다.
import boto3
account_id = boto3.client('sts').get_caller_identity().get('Account')
ecr_repository = 'sagemaker-debugger-mnist-byoc-tf2'
tag = ':latest'
region = boto3.session.Session().region_name
uri_suffix = 'amazonaws.com'
if region in ['cn-north-1', 'cn-northwest-1']:
uri_suffix = 'amazonaws.com.cn'
byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag)
!docker build -t $ecr_repository docker
!$(aws ecr get-login --region $region --registry-ids $account_id --no-include-email)
!aws ecr create-repository --repository-name $ecr_repository
!docker tag {ecr_repository + tag} $byoc_image_uri
!docker push $byoc_image_uri
작은 정보
AWS 딥 러닝 컨테이너 기본 이미지 중 하나를 사용하는 경우 다음 코드를 실행하여 Amazon ECR에 로그인하고 딥 러닝 컨테이너 이미지 리포지토리에 액세스합니다.
! aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com
사용자 지정 훈련 컨테이너를 사용하여 훈련 작업 실행 및 디버깅하기
Docker 컨테이너를 빌드하고 Amazon ECR에 푸시한 후 훈련 스크립트와 Debugger별 파라미터를 사용하여 SageMaker AI 예측기를 구성합니다. estimator.fit()
을 실행하면 디버거가 출력 텐서를 수집하고 모니터링하며 훈련 문제를 감지합니다. 저장된 텐서를 사용하면 사용자는 smdebug
핵심 기능 및 도구를 사용하여 훈련 작업을 추가로 분석할 수 있습니다. Amazon CloudWatch Events를 사용하여 Debugger 규칙 모니터링 프로세스의 워크플로를 구성하면 디버거 규칙에서 훈련 문제가 발견될 때마다 훈련 중지 작업 프로세스를 자동화 AWS Lambda할 수 있습니다.
import sagemaker
from sagemaker.estimator import Estimator
from sagemaker.debugger import Rule, DebuggerHookConfig, CollectionConfig, rule_configs
profiler_config
=ProfilerConfig(...)
debugger_hook_config
=DebuggerHookConfig(...)
rules
=[
Rule.sagemaker(rule_configs.built_in_rule())
,
ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]
estimator=Estimator(
image_uri=byoc_image_uri,
entry_point="./debugger_custom_container_test_folder/your-training-script.py"
role=sagemaker.get_execution_role(),
base_job_name='debugger-custom-container-test',
instance_count=1,
instance_type='ml.p3.2xlarge',
# Debugger-specific parameters
profiler_config=profiler_config
,
debugger_hook_config=debugger_hook_config
,
rules=rules
)
# start training
estimator.fit()