모범 사례: Hyperopt를 사용하여 하이퍼 매개 변수 튜닝

모범 사례

  • 베이지언 방법은 그리드 검색 및 랜덤 검색보다 훨씬 더 효율적일 수 있습니다. 따라서 Hyperopt TPE(Tree of Parzen Estimators) 알고리즘을 사용하면 더 많은 하이퍼 매개 변수와 더 큰 범위를 탐색할 수 있습니다. 도메인 지식을 사용하여 검색 도메인을 제한하면 튜닝을 최적화하고 더 나은 결과를 얻을 수 있습니다.
  • hp.choice()를 사용할 때 Hyperopt는 선택 목록의 인덱스를 반환합니다. 따라서 MLflow에 기록된 매개 변수도 인덱스입니다. hyperopt.space_eval()을 사용하여 매개 변수 값을 검색합니다.
  • 학습 시간이 긴 모델의 경우 작은 데이터 세트와 많은 하이퍼 매개 변수로 실험을 시작합니다. MLflow를 사용하여 최고 성능의 모델을 식별하고 수정할 수 있는 하이퍼 매개 변수를 결정합니다. 이러한 방식으로 대규모 조정을 준비할 때 매개 변수 공간을 줄일 수 있습니다.
  • 조건부 차원 및 하이퍼 매개 변수에 대한 Hyperopt 지원을 활용합니다. 예를 들어, 여러 종류의 경사하강법을 평가할 때 하이퍼 매개 변수 공간을 공통 하이퍼 매개 변수로만 제한하는 대신 Hyperopt에 조건부 하이퍼 매개 변수(이미 하위 집합에만 적합한 항목)를 포함하도록 할 수 있습니다. 조건부 매개 변수 사용에 대한 자세한 내용은 검색 공간 정의를 참조하세요.
  • SparkTrials를 사용할 때 CPU 전용 클러스터와 GPU 지원 클러스터에 대해 적절하게 병렬 처리를 구성합니다. Azure Databricks에서 CPU 및 GPU 클러스터는 작업자 노드당 서로 다른 수의 실행기 스레드를 사용합니다. CPU 클러스터는 노드당 여러 실행기 스레드를 사용합니다. GPU 클러스터는 노드당 하나의 실행기 스레드만 사용하여 동일한 GPU를 사용하려는 여러 Spark 작업 간의 충돌을 방지합니다. 이는 일반적으로 GPU용으로 작성된 라이브러리에 최적이지만 GPU 클러스터에서 최대 병렬 처리가 감소한다는 것을 의미하므로 GPU 인스턴스 유형을 선택할 때 각 시도에서 사용할 수 있는 GPU 수를 알고 있어야 합니다. 자세한 내용은 GPU 지원 클러스터를 참조하세요.
  • 자동 크기 조정 클러스터에서 SparkTrials를 사용하지 마세요. Hyperopt는 실행이 시작될 때 병렬도 값을 선택합니다. 클러스터가 나중에 자동 크기 조정되는 경우 Hyperopt는 새 클러스터 크기를 활용할 수 없습니다.

문제 해결

  • 보고된 NaN(숫자가 아님) 손실은 일반적으로 fmin()에 전달된 목적 함수가 NaN을 반환했음을 의미합니다. 이는 다른 실행에 영향을 미치지 않으며 무시해도 됩니다. 이러한 결과를 방지하려면 하이퍼 매개 변수 공간을 조정하거나 목적 함수를 수정해 보세요.
  • Hyperopt는 확률적 검색 알고리즘을 사용하기 때문에 손실은 일반적으로 각 실행에서 단조롭게 감소하지 않습니다. 그러나 이러한 메서드는 다른 메서드보다 더 빨리 최상의 하이퍼 매개 변수를 찾는 경우가 많습니다.
  • Hyperopt와 Spark는 모두 짧은 시험 실행(수십 초 미만)의 시험 기간을 지배할 수 있는 오버헤드를 발생시킵니다. 관찰한 속도 향상은 작거나 0일 수 있습니다.

Notebook 예제: 다양한 크기의 데이터 세트에 대한 모범 사례

SparkTrials 는 Spark 작업자 노드에서 시도를 실행합니다. 이 Notebook에서는 사용할 SparkTrials때 크기가 다른 데이터 세트를 작업자 노드로 이동하는 방법에 대한 지침을 제공합니다.

다양한 크기의 Notebook 데이터 세트 처리

전자 필기장 가져오기