교육 스크립트를 조정하세요. PyTorch - 아마존 SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

교육 스크립트를 조정하세요. PyTorch

모델 출력 텐서 수집을 시작하고 훈련 문제를 디버깅하려면 학습 스크립트를 다음과 같이 수정하세요 PyTorch .

1.12.0의 경우 PyTorch

PyTorch 트레이닝 스크립트를 가져오면 트레이닝 스크립트에 코드 라인 몇 개를 추가해 학습 작업을 실행하고 모델 출력 텐서를 추출할 수 있습니다. sagemaker-debugger 클라이언트 라이브러리의 후크 API를 사용해야 합니다. 코드 예제를 사용하여 단계를 세분화하는 다음 지침을 살펴보세요.

  1. 후크를 생성합니다.

    (권장) 다음과 같은 교육 작업용 SageMaker

    import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)

    추정기에서 DebuggerHookConfig TensorBoardConfig, 또는 규칙을 2단계: Python을 사용하여 SageMaker 교육 작업 시작 및 디버깅 SDK 사용하여 훈련 작업을 시작하면 함수가 선택한 JSON 구성 파일이 훈련 인스턴스에 SageMaker 추가됩니다. get_hook 참고로, 예측기에 구성 API를 포함하지 않으면 후크가 찾을 수 있는 구성 파일이 없어지고 함수가 None를 반환한다는 점에 유의하세요.

    (선택 사항) 외부 교육 작업용 SageMaker

    SageMaker Notebook 인스턴스, Amazon EC2 인스턴스 또는 자체 로컬 디바이스에서 직접 로컬 모드에서 교육 작업을 실행하는 경우 smd.Hook 클래스를 사용하여 후크를 생성하십시오. 하지만 이 접근 방식은 텐서 컬렉션만 저장할 수 있으며 시각화에 TensorBoard 사용할 수 있습니다. SageMaker 디버거의 내장 규칙은 로컬 모드에서는 작동하지 않습니다. 규칙을 사용하려면 SageMaker ML 교육 인스턴스가 필요하고 S3가 원격 인스턴스의 출력을 실시간으로 저장해야 하기 때문입니다. 이 경우 smd.get_hook API가 None를 반환합니다.

    로컬 모드에서 텐서를 저장하는 수동 후크를 만들려면 로직과 함께 다음 코드 스니펫을 사용하여 smd.get_hook API가 None을 반환하는지 확인하고 smd.Hook 클래스를 사용하여 수동 후크를 생성하세요. 참고로 사용자는 로컬 머신의 모든 출력 디렉터리를 지정할 수 있습니다.

    import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True) if hook is None: hook=smd.Hook( out_dir='/path/to/your/local/output/', export_tensorboard=True )
  2. 후크의 클래스 메서드로 모델을 래핑하세요.

    hook.register_module() 메서드는 모델을 가져와 각 레이어를 반복하면서 2단계: Python을 사용하여 SageMaker 교육 작업 시작 및 디버깅 SDK에서 구성을 통해 제공할 정규 표현식과 일치하는 텐서를 찾습니다. 이 후크 메서드를 통해 컬렉션 가능한 텐서는 가중치, 편향, 활성화, 그라데이션, 입력 및 출력입니다.

    hook.register_module(model)
    작은 정보

    대규모 딥러닝 모델에서 전체 출력 텐서를 컬렉션하면 해당 컬렉션의 전체 크기가 기하급수적으로 증가하여 병목 현상이 발생할 수 있습니다. 특정 텐서를 저장하려는 경우 hook.save_tensor() 메서드를 사용할 수도 있습니다. 이 메서드를 사용하면 특정 텐서의 변수를 선택하고 원하는 이름의 사용자 지정 컬렉션에 저장할 수 있습니다. 이 단계에 대한 자세한 내용은 7단계를 참조하세요.

  3. 후크의 클래스 메서드를 사용하여 손실 함수를 왜곡하세요.

    hook.register_loss 메서드는 손실 함수를 래핑하는 것입니다. 2단계: Python을 사용하여 SageMaker 교육 작업 시작 및 디버깅 SDK에서 구성 중에 설정하는 save_interval마다 손실 값을 추출하여 "losses" 컬렉션에 저장합니다.

    hook.register_loss(loss_function)
  4. 훈련 블록에 hook.set_mode(ModeKeys.TRAIN)을 추가합니다. 이는 텐서 컬렉션이 훈련 단계에서 추출되었음을 나타냅니다.

    def train(): ... hook.set_mode(ModeKeys.TRAIN)
  5. 검증 블록에 hook.set_mode(ModeKeys.EVAL)를 추가합니다. 이는 텐서 컬렉션이 검증 단계에서 추출되었음을 나타냅니다.

    def validation(): ... hook.set_mode(ModeKeys.EVAL)
  6. 사용자 지정 스칼라를 저장하는 데 hook.save_scalar()를 사용합니다. 사용자는 모델에 없는 스칼라 값을 저장할 수 있습니다. 예를 들어, 평가 중에 계산된 정확도 값을 기록하려면 정확도를 계산하는 줄 아래에 다음 코드 줄을 추가하세요.

    hook.save_scalar("accuracy", accuracy)

    참고로 사용자 지정 스칼라 컬렉션의 이름을 지정하려면 문자열을 첫 번째 인수로 제공해야 합니다. 이 이름은 스칼라 값을 시각화하는 데 사용되는 이름으로 TensorBoard, 원하는 모든 문자열일 수 있습니다.

  7. 사용자 지정 텐서를 저장하는 데 hook.save_tensor()를 사용합니다. hook.save_scalar()와 마찬가지로 사용자는 텐서를 추가로 저장하여 고유한 텐서 컬렉션을 정의할 수 있습니다. 예를 들어, 사용자는 모델에 전달된 입력 이미지 데이터를 추출하고 다음 코드 라인을 추가하여 사용자 지정 텐서로 저장할 수 있습니다. 여기서 "images"는 사용자 지정 텐서의 예제 이름이고, image_inputs는 입력 이미지 데이터의 예제 변수입니다.

    hook.save_tensor("images", image_inputs)

    참고로 사용자 지정 텐서의 이름을 지정하려면 첫 번째 인수에 문자열을 제공해야 합니다. hook.save_tensor()는 사용자 지정 텐서를 저장할 텐서 컬렉션을 지정하는 세 번째 인수 collections_to_write가 있습니다. 기본값은 collections_to_write="default"입니다. 세 번째 인수를 명시적으로 지정하지 않으면 사용자 지정 텐서가 "default" 텐서 컬렉션에 저장됩니다.

훈련 스크립트 조정을 완료한 후 2단계: Python을 사용하여 SageMaker 교육 작업 시작 및 디버깅 SDK 섹션으로 넘어갑니다.