자체 교육 스크립트를 사용하고 Amazon SageMaker PlatoBlockchain Data Intelligence의 하이퍼파라미터 최적화를 사용하여 최상의 모델을 자동으로 선택합니다. 수직 검색. 일체 포함.

자체 교육 스크립트를 사용하고 Amazon SageMaker에서 하이퍼파라미터 최적화를 사용하여 최상의 모델을 자동으로 선택합니다.

기계 학습(ML) 파이프라인의 성공은 사용된 모델의 품질뿐만 아니라 이 모델을 훈련하고 반복하는 능력에 달려 있습니다. ML 모델을 개선하는 주요 방법 중 하나는 더 나은 조정 가능한 매개변수를 선택하는 것입니다. 하이퍼 파라미터. 이를 하이퍼파라미터 최적화(HPO)라고 합니다. 그러나 이 튜닝을 수동으로 수행하는 것은 검색 공간의 크기로 인해 종종 번거로울 수 있으며 때로는 수천 번의 교육 반복이 필요합니다.

이 게시물은 방법을 보여줍니다 아마존 세이지 메이커 스크립트 모드를 사용하여 고유한 모델 알고리즘을 가져올 수 있을 뿐만 아니라 내장된 HPO 알고리즘도 사용할 수 있습니다. 선택한 평가 메트릭을 쉽게 출력하는 방법을 배웁니다. 아마존 클라우드 워치, 이 메트릭을 추출하여 자동 HPO 알고리즘을 안내할 수 있습니다. 그런 다음 여러 교육 작업 및 관련 컴퓨팅 리소스를 오케스트레이션하는 HPO 조정 작업을 생성할 수 있습니다. 완료되면 평가 지표에 따라 최상의 학습 작업을 볼 수 있습니다.

솔루션 개요

다음 단계를 거칩니다.

  1. SageMaker 스크립트 모드를 사용하여 AWS 관리 컨테이너 위에 자체 모델을 가져옵니다.
  2. 훈련 스크립트를 리팩터링하여 평가 메트릭을 출력합니다.
  3. CloudWatch Logs에서 지표를 찾습니다.
  4. CloudWatch에서 지표를 추출합니다.
  5. HPO를 사용하여 이 평가 메트릭을 조정하여 최상의 모델을 선택하십시오.
  6. HPO를 모니터링하고 최상의 교육 작업을 찾습니다.

사전 조건

이 연습에서는 다음과 같은 전제 조건이 있어야합니다.

AWS 관리형 컨테이너에서 사용자 지정 알고리즘 사용

인용하다 Amazon SageMaker 스크립트 모드로 자체 모델 가져오기 AWS 관리형 컨테이너를 사용하여 사용자 지정 모델을 SageMaker로 가져오는 방법을 자세히 살펴보십시오.

우리는을 사용하여 MNIST 데이터세트 이 예의 경우. MNIST는 필기 숫자 분류에 널리 사용되는 데이터 세트로, 70,000개의 레이블이 지정된 28×28 픽셀 회색조 이미지의 필기 숫자로 구성됩니다. 데이터 세트는 60,000개의 훈련 이미지와 10,000개의 테스트 이미지로 분할되며 10개의 클래스(각 숫자당 하나씩)를 포함합니다.

  1. 노트북 인스턴스를 열고 다음 명령을 실행하여 mnist.py 파일 :
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    데이터를 가져와 저장하기 전에 SageMaker 세션을 생성해 보겠습니다. 훈련 및 모델 데이터에 사용할 S3 버킷과 접두사도 지정해야 합니다. 이는 노트북 인스턴스, 교육 및 호스팅과 동일한 리전 내에 있어야 합니다. 다음 코드는 기본 버킷 이미 존재하는 경우, 그렇지 않은 경우 새로 생성합니다. 또한 데이터에 대한 교육 및 호스팅 액세스 권한을 부여하려면 IAM 역할 ARN을 포함해야 합니다. 우리는 사용 get_execution_role() 노트북 인스턴스에 대해 생성한 IAM 역할을 가져옵니다.

  2. 다음 코드를 사용하여 세션을 만듭니다.
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. 이제 데이터를 가져와 로컬 폴더에 저장하겠습니다. /data, Amazon S3에 업로드합니다.
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    이제 PyTorch 훈련 작업을 설정하기 위한 추정기를 만들 수 있습니다. 여기서는 실제 교육 코드에 초점을 맞추지 않습니다(mnist.py) 아주 자세하게. 이 훈련 스크립트를 쉽게 호출하여 훈련 작업을 초기화하는 방법을 살펴보겠습니다.

  4. 다음 코드에는 사용자 지정 학습 코드가 포함된 mnist.py라는 진입점 스크립트가 포함되어 있습니다.
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. 이 교육 작업이 올바르게 구성되었는지 확인하기 위해 작업 교육 코드를 사용하여 Amazon S3에 업로드한 데이터에 맞춰 교육 작업을 시작할 수 있습니다. SageMaker는 로컬 파일 시스템에서 데이터를 사용할 수 있도록 보장하므로 교육 스크립트는 디스크에서 데이터를 읽을 수 있습니다.
    estimator.fit({"training": inputs})

그러나 우리는 단일 학습 작업을 생성하지 않습니다. 하이퍼파라미터 튜닝 작업을 통해 SageMaker의 자동 모델 튜닝 기능을 사용합니다. 모델 튜닝은 실제 모델 알고리즘과 완전히 무관합니다. 조정할 수 있는 모든 하이퍼파라미터에 대한 자세한 내용은 다음을 참조하십시오. SageMaker로 자동 모델 튜닝 수행.

최적화하려는 각 하이퍼파라미터에 대해 다음을 정의해야 합니다.

  • 이름
  • 유형(매개변수는 정수, 연속형 또는 범주형일 수 있음)
  • 탐구할 가치의 범위
  • 배율 유형(선형, 대수, 역대수 또는 자동) 이를 통해 특정 매개변수 범위를 탐색하는 방법을 제어할 수 있습니다.

또한 최적화하려는 지표를 정의해야 합니다. 훈련 로그에 표시되고 정규식을 전달하여 추출할 수 있는 한 모든 숫자 값이 될 수 있습니다.

mnist.py의 181행을 보면 로거에 인쇄하는 방법을 볼 수 있습니다.

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

실제로 방금 실행한 훈련 작업의 로그에서 이 출력을 볼 수 있습니다. 로그 그룹을 열어 /aws/sagemaker/TrainingJobs CloudWatch 콘솔에서 다음으로 시작하는 로그 이벤트가 있어야 합니다. pytorch-training- 타임스탬프와 생성된 이름이 뒤따릅니다.

다음 스크린샷은 찾고 있는 로그를 강조 표시합니다.

이제 하이퍼파라미터 튜닝 작업을 시작하겠습니다.

  1. 언급한 바와 같이 먼저 다음과 같이 객체 아래에 하이퍼파라미터에 대한 일부 정보를 정의해야 합니다.
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    여기서 우리는 두 개의 하이퍼파라미터를 정의했습니다. 학습률(lr)은 0.001~0.1 범위의 연속 매개변수(따라서 연속 값)입니다. 배치 크기(batch-size)는 앞의 불연속 값이 있는 범주형 매개변수입니다.

    다음으로 조정하려는 목표 지표와 그 정의를 지정합니다. 여기에는 이전에 본 교육 작업의 CloudWatch 로그에서 해당 지표를 추출하는 데 필요한 정규식(regex)이 포함됩니다. 또한 설명적인 이름을 평균 테스트 손실로 지정하고 목표 유형을 최소화로 지정하므로 하이퍼파라미터 튜닝은 최상의 하이퍼파라미터 설정을 검색할 때 목표 메트릭을 최소화하려고 합니다.

  2. 다음 코드를 사용하여 측정항목을 지정합니다.
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    이제 우리는 우리의 HyperparameterTuner 물체. 목표 메트릭 이름, 유형 및 정의 외에도 다음을 전달합니다. hyperparameter_ranges 우리가 이전에 만든 객체와 추정기. 또한 병렬로 실행해야 하는 수와 함께 실행하려는 총 작업 수를 지정합니다. 최대 작업 수를 9로 선택했지만 일반적으로 최적의 성능을 위해 훨씬 더 높은 수(예: 50)를 선택합니다.

  3. 만들기 HyperparameterTuner 다음 코드로 개체 :
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

튜닝 작업을 시작하기 전에 하이퍼파라미터의 조합이 어떻게 결정되는지 주목할 가치가 있습니다. 좋은 결과를 얻으려면 탐색할 올바른 범위를 선택해야 합니다. 기본적으로 베이지안 검색 전략이 사용되며 자세한 내용은 하이퍼파라미터 튜닝 작동 방식.

베이지안 최적화에서 하이퍼파라미터 튜닝은 되돌아옴 문제. 이 회귀 문제를 해결하기 위해 어떤 하이퍼파라미터 조합이 최상의 결과를 얻을 수 있는지 추측하고 훈련 작업을 실행하여 이러한 값을 테스트합니다. 회귀를 사용하여 테스트할 다음 하이퍼 매개변수 값 세트를 선택합니다. 여기에서 검색 전략이 만들어내는 명확한 익스플로잇/탐색 절충안이 있습니다. 성능을 점진적으로 향상시키기 위해 최상의 이전 교육 작업을 생성한 조합에 가까운 하이퍼파라미터 값을 선택할 수 있습니다. 또는 아직 잘 이해되지 않은 새로운 범위의 값을 시도하고 탐색하기 위해 더 멀리 있는 값을 선택할 수도 있습니다.

그러나 다른 검색 전략을 지정할 수 있습니다. 다음 전략은 SageMaker에서 지원됩니다.

  • 그리드 검색 – 지정된 하이퍼파라미터 범위 중에서 가능한 모든 조합을 시도합니다.
  • 무작위 검색 – 지정된 값 범위 중에서 임의의 조합을 시도합니다. 이전 교육 작업의 결과에 의존하지 않으므로 튜닝 성능에 영향을 주지 않고 최대 동시 교육 작업 수를 실행할 수 있습니다.
  • 하이퍼밴드 검색 – 훈련 작업의 중간 결과와 최종 결과를 모두 사용하여 에포크를 잘 활용되는 하이퍼파라미터 구성에 재할당하고 성능이 떨어지는 항목을 자동으로 중지합니다.

에 설명된 대로 고유한 알고리즘 가져오기를 탐색할 수도 있습니다. Amazon SageMaker에서 고유 한 하이퍼 파라미터 최적화 알고리즘 가져 오기.

  1. 그런 다음 튜너 개체 자체(추정기가 아님)에 대한 교육을 시작하여 다음을 호출합니다. .fit() 훈련 및 테스트 데이터 세트에 S3 경로를 전달합니다.
    tuner.fit({"training": inputs})

그런 다음 SageMaker 콘솔에서 튜닝 작업의 진행 상황을 추적할 수 있습니다. 초매개변수 조정 작업 페이지. 조정 작업은 각 개별 교육 실행 및 관련 컴퓨팅을 오케스트레이션하여 필요한 기본 컴퓨팅 리소스를 가동합니다.

그러면 관련 목표 지표 값과 함께 완료되었거나 진행 중인 모든 개별 교육 작업을 쉽게 볼 수 있습니다. 다음 스크린샷에서 첫 번째 훈련 작업 배치가 완료된 것을 볼 수 있습니다. 여기에는 지정된 기준에 따라 총 XNUMX개가 포함됩니다. max_parallel_jobs 값 3. 완료되면 평균 테스트 손실을 최소화하는 최상의 교육 작업을 찾을 수 있습니다. 최고의 훈련 직업 탭.

학습 작업 목록의 스크린샷

정리

향후 요금이 발생하지 않도록 하려면 초기화한 리소스를 삭제하세요. 이들은 S3 버킷, IAM 역할 및 SageMaker 노트북 인스턴스입니다.

결론

이 게시물에서는 자체 모델을 SageMaker로 가져온 다음 자동화된 하이퍼파라미터 최적화를 사용하여 최상의 교육 작업을 선택하는 방법에 대해 논의했습니다. 인기 있는 MNIST 데이터 세트를 사용하여 HPO 작업이 최적화해야 하는 사용자 정의 목표 지표를 지정하는 방법을 살펴보았습니다. CloudWatch에서 이 객관적 지표를 추출하고 다양한 하이퍼파라미터 값을 지정하면 HPO 작업을 쉽게 시작하고 모니터링할 수 있습니다.

자세한 정보가 필요하거나 고객이 HPO를 사용하는 방법을 보려면 다음을 참조하십시오. Amazon SageMaker 자동 모델 조정. 지금 SageMaker에서 자동화된 하이퍼파라미터 최적화를 위해 자체 모델을 조정하십시오.


저자,

자체 교육 스크립트를 사용하고 Amazon SageMaker PlatoBlockchain Data Intelligence의 하이퍼파라미터 최적화를 사용하여 최상의 모델을 자동으로 선택합니다. 수직 검색. 일체 포함.샘 프라이스 Amazon Web Services의 AI/ML 및 데이터 분석 전문 서비스 컨설턴트입니다. 그는 어려운 문제를 해결하기 위해 의료 및 생명 과학 분야의 공공 부문 고객과 긴밀히 협력합니다. 일하지 않을 때는 기타와 테니스를 치고 자신이 좋아하는 인디 밴드를 보는 것을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습