Neptune ML에서 사용자 지정 모델 개발 - Amazon Neptune

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

Neptune ML에서 사용자 지정 모델 개발

사용자 지정 모델 개발을 시작하는 좋은 방법은 Neptune ML 도구 키트 예제에 따라 훈련 모듈을 구성하고 작성하는 것입니다. 또한 Neptune ML 도구 키트는 modelzoo에 모듈화된 그래프 ML 모델 구성 요소를 구현합니다. 이 구성 요소를 중첩하여 사용자 지정 모델을 생성하는 데 사용할 수 있습니다.

나아가 이 도구 키트는 모델 훈련 및 모델 변환 중에 필요한 아티팩트를 생성하는 데 도움이 되는 유틸리티 함수를 제공합니다. 사용자 지정 구현에서 이 Python 패키지를 가져올 수 있습니다. 도구 키트에서 제공되는 모든 함수 또는 모듈은 Neptune ML 훈련 환경에서도 사용할 수 있습니다.

Python 모듈에 추가 외부 종속성이 있는 경우 모듈 디렉터리에 requirements.txt 파일을 생성하여 이러한 추가 종속성을 포함할 수 있습니다. 그러면 훈련 스크립트가 실행되기 전에 requirements.txt 파일에 나열된 패키지가 설치됩니다.

사용자 지정 모델을 구현하는 Python 모듈에는 최소한 다음이 포함되어야 합니다.

  • 훈련 스크립트 진입점

  • 변환 스크립트 진입점

  • model-hpo-configuration.json 파일

Neptune ML에서 사용자 지정 모델 훈련 스크립트 개발

사용자 지정 모델 훈련 스크립트는 Neptune ML 도구 키트의 train.py 예제와 같은 실행 가능한 Python 스크립트여야 합니다. 하이퍼파라미터 이름과 값을 명령줄 인수로 받아들여야 합니다. 모델 훈련 중에는 model-hpo-configuration.json 파일에서 하이퍼파라미터 이름을 가져옵니다. 하이퍼파라미터 값은 하이퍼파라미터를 조정할 수 있는 경우 유효한 하이퍼파라미터 범위 내에 속하고, 조정할 수 없는 경우에는 기본 하이퍼파라미터 값을 사용합니다.

훈련 스크립트는 다음과 같은 구문을 사용하여 SageMaker 훈련 인스턴스에서 실행됩니다.

python3 (script entry point) --(1st parameter) (1st value) --(2nd parameter) (2nd value) (...)

모든 작업에 대해 Neptune ML AutoTrainer는 사용자가 지정하는 하이퍼파라미터 외에도 여러 가지 필수 파라미터를 훈련 스크립트로 전송합니다. 스크립트가 제대로 작동하려면 이러한 추가 파라미터를 처리할 수 있어야 합니다.

다음과 같은 추가 필수 파라미터는 작업에 따라 약간 다릅니다.

노드 분류 또는 노드 회귀용
  • task   –   Neptune ML에서 내부적으로 사용하는 작업 유형입니다. 이 값은 노드 분류의 경우 node_class이고, 노드 회귀의 경우 node_regression입니다.

  • model   –   Neptune ML에서 내부적으로 사용하는 모델 이름으로, 이 경우에는 custom입니다.

  • name   –   Neptune ML에서 내부적으로 사용하는 작업 이름으로, 이 경우에 노드 분류는 node_class-custom, 노드 회귀는 node_regression-custom입니다.

  • target_ntype   –   분류 또는 회귀용 노드 유형의 이름입니다.

  • property   –   분류 또는 회귀용 노드 속성의 이름입니다.

연결 예측용
  • task   –   Neptune ML에서 내부적으로 사용하는 작업 유형입니다. 연결 예측의 경우 이는 link_predict입니다.

  • model   –   Neptune ML에서 내부적으로 사용하는 모델 이름으로, 이 경우에는 custom입니다.

  • name   –   Neptune ML에서 내부적으로 사용하는 작업 이름으로, 이 경우에는 link_predict-custom입니다.

엣지 분류 또는 엣지 회귀용
  • task   –   Neptune ML에서 내부적으로 사용하는 작업 유형입니다. 이 값은 엣지 분류의 경우 edge_class이고, 엣지 회귀의 경우 edge_regression입니다.

  • model   –   Neptune ML에서 내부적으로 사용하는 모델 이름으로, 이 경우에는 custom입니다.

  • name   –   Neptune ML에서 내부적으로 사용하는 작업 이름으로, 이 경우에 엣지 분류는 edge_class-custom, 엣지 회귀는 edge_regression-custom입니다.

  • target_etype   –   분류 또는 회귀용 엣지 유형의 이름입니다.

  • property   –   분류 또는 회귀용 엣지 속성의 이름입니다.

스크립트는 모델 파라미터와 훈련 종료 시 필요한 기타 아티팩트를 저장해야 합니다.

Neptune ML 도구 키트 유틸리티 함수를 사용하여 처리된 그래프 데이터의 위치, 모델 파라미터를 저장해야 하는 위치, 훈련 인스턴스에서 사용할 수 있는 GPU 디바이스를 결정할 수 있습니다. 이러한 유틸리티 함수를 사용하는 방법에 대한 예제는 train.py 샘플 훈련 스크립트를 참조하세요.

Neptune ML에서 사용자 지정 모델 변환 스크립트 개발

모델을 재훈련하지 않고도 변화하는 그래프에서 모델 추론을 위해 Neptune ML 증분 워크플로우를 활용하려면 변환 스크립트가 필요합니다. 모델 배포에 필요한 모든 아티팩트가 훈련 스크립트에서 생성되더라도 모델을 다시 훈련하지 않고 업데이트된 모델을 생성하려면 여전히 변환 스크립트를 제공해야 합니다.

참고

실시간 유도 추론은 현재 사용자 지정 모델에 지원되지 않습니다.

사용자 지정 모델 변환 스크립트는 Neptune ML 도구 키트의 transform.py 예제 스크립트와 같은 실행 가능한 Python 스크립트여야 합니다. 이 스크립트는 명령줄 인수 없이 모델 훈련 중에 간접적으로 호출되므로, 스크립트에서 허용하는 모든 명령줄 인수에는 기본값이 있어야 합니다.

스크립트는 다음과 같은 구문을 사용하여 SageMaker 훈련 인스턴스에서 실행됩니다.

python3 (your transform script entry point)

변환 스크립트에는 다음과 같은 다양한 정보가 필요합니다.

  • 처리된 그래프 데이터의 위치.

  • 모델 파라미터가 저장되는 위치 및 새 모델 아티팩트가 저장되어야 하는 위치.

  • 인스턴스에서 사용할 수 있는 디바이스.

  • 최상의 모델을 생성한 하이퍼파라미터.

이러한 입력은 스크립트가 호출할 수 있는 Neptune ML 유틸리티 함수를 사용하여 얻습니다. 이를 수행하는 방법에 대한 예제는 도구 키트의 샘플 transform.py 스크립트를 참조하세요.

스크립트는 각 작업의 모델 배포에 필요한 노드 임베딩, 노드 ID 매핑 및 기타 아티팩트를 저장해야 합니다. 다양한 Neptune ML 작업에 필요한 모델 아티팩트에 대한 자세한 내용은 모델 아티팩트 설명서를 참조하세요.

Neptune ML의 사용자 지정 model-hpo-configuration.json 파일

model-hpo-configuration.json 파일은 사용자 지정 모델의 하이퍼파라미터를 정의합니다. 이 파일은 Neptune ML 내장 모델에 사용되는 model-hpo-configuration.json 파일과 동일한 형식이며, Neptune ML에서 자동 생성하여 처리된 데이터 위치에 업로드하는 버전보다 우선합니다.

모델에 새 하이퍼파라미터를 추가할 때는 하이퍼파라미터가 훈련 스크립트에 전달되도록 이 파일에 하이퍼파라미터 항목도 추가해야 합니다.

하이퍼파라미터를 조정 가능하게 하려면 하이퍼파라미터의 범위를 제공하고 tier-1, tier-2 또는 tier-3 파라미터로 설정해야 합니다. 구성된 총 훈련 작업 수가 해당 Tier의 하이퍼파라미터를 조정할 수 있는 경우 하이퍼파라미터가 조정됩니다. 조정할 수 없는 파라미터의 경우 기본값을 제공하고 하이퍼파라미터를 파일의 fixed-param 섹션에 추가해야 합니다. 이를 수행하는 방법에 대한 예제는 도구 키트의 샘플 샘플 model-hpo-configuration.json 파일을 참조하세요.

또한 SageMaker 하이퍼파라미터 최적화 작업에서 훈련된 후보 모델을 평가하는 데 사용할 지표 정의를 제공해야 합니다. 이렇게 하려면 다음과 같이 model-hpo-configuration.json 파일에 eval_metric JSON 객체를 추가합니다.

"eval_metric": { "tuning_objective": { "MetricName": "(metric_name)", "Type": "Maximize" }, "metric_definitions": [ { "Name": "(metric_name)", "Regex": "(metric regular expression)" } ] },

eval_metric 객체의 metric_definitions 배열에는 SageMaker가 훈련 인스턴스에서 추출하려는 각 지표에 대한 지표 정의 객체가 나열됩니다. 각 지표 정의 객체에는 지표 이름(예: '정확도', 'f1' 등)을 제공할 수 있는 Name 키가 있습니다. Regex 키를 사용하면 특정 지표가 훈련 로그에 출력되는 방식과 일치하는 정규 표현식 문자열을 제공할 수 있습니다. 지표를 정의하는 방법에 대한 자세한 내용은 SageMaker 하이퍼파라미터 조정 페이지를 참조하세요.

그런 다음 eval_metrictuning_objective 객체를 통해 하이퍼파라미터 최적화를 위한 목표 지표로서 역할을 할 평가 지표로 사용되어야 하는 metric_definitions의 지표를 지정할 수 있습니다. MetricName의 값은 metric_definitions의 정의 중 하나에 있는 Name의 값과 일치해야 합니다. Type의 값은 지표가 높을수록 좋다고 해석해야 하는지(예: '정확도'), 낮을수록 좋다고 해석해야 하는지(예: '평균 제곱 오차')에 따라 '최대화' 또는 '최소화'가 되어야 합니다.

SageMaker 하이퍼파라미터 조정 작업에서는 최상의 모델을 선택할 수 없기 때문에 model-hpo-configuration.json 파일의 이 섹션에 오류가 있으면 Neptune ML 모델 훈련 API 작업이 실패할 수 있습니다.

Neptune ML에서 사용자 지정 모델 구현의 로컬 테스트

Neptune ML 도구 키트 Conda 환경을 통해 로컬에서 코드를 실행하여 모델을 테스트하고 검증할 수 있습니다. Neptune 노트북 인스턴스에서 개발하는 경우 이 Conda 환경은 Neptune 노트북 인스턴스에 사전 설치됩니다. 다른 인스턴스에서 개발하는 경우 Neptune ML 도구 키트의 로컬 설정 지침을 따라야 합니다.

Conda 환경은 모델 훈련 API를 호출할 때 모델이 실행될 환경을 정확하게 재현합니다. 모든 예제 훈련 스크립트와 변환 스크립트를 사용하면 명령줄 --local 플래그를 전달함으로써 로컬 환경에서 스크립트를 실행하여 쉽게 디버깅할 수 있습니다. 이 방법을 사용하면 모델 구현을 대화형 방식으로 반복적으로 테스트할 수 있어 자체 모델을 개발할 때 유용합니다. Neptune ML 프로덕션 훈련 환경에서 모델을 훈련하는 동안에는 이 파라미터가 생략됩니다.