CHOPT : Automated Hyperparameter Optimization Framework for Cloud-Based Machine Learning Platforms


(Curtis Kim) #1

Essence

  • 네이버, UNIST 공동 연구

Contribution

  • Hyperparameter Optimization 방식은 새로 제안하지 않음
  • 기존 hyperOpt 프레임워크에 비해 사용성을 개선함
  • 기존 hyperOpt 프레임워크와는 달리 Resource Management가 추가됨 - Stop&Go
  • Interactive한 방식, Visualization 등을 추가하는 사용성 연구를 진행함

Key Ideas

Previous Hyperparameter Optimization

아래와 같은 대표적인 알고리즘들을 소개하였고, 직접 구현하여 적용하기 어려운 점을 단점으로 꼽았다.

  • Population-Based Training(PBT)
    • fixed computation budget
    • optimize a population of models
  • Hyperband
    • 성능 좋다고 함(random search, bayesian 대비)
    • small - medium budget에서 잘 작동한다고 함
    • 단, configuration에 따라 성능 결정되고, 자원이 많으면 random search 대비 낫지 않다고 함
  • BOHB
    • Hyperband + Bayesian Optimization

Previous Hyperparameter Framework

  • Tune
  • Orion : version control of experiments
  • #google Vizier : closed project

CHOPT

System Architecture

  • Efficient resource management
  • Minimum configuration and code modification
  • Web-based analytic visual tool

Agent가 CHOPT Session을 관리하며 현재 성능 등을 모니터링한다. 정해진 룰에 따라 새로운 세션을 생성하기도하고, 동작 중인 세션을 멈추거나 종료시키는 일을 한다. Agent 중 1개는 Master Agent로 전체 리소스를 관리하는 역할을 하는데, 특히 Hyperparameter optimization이 아닌 일반 세션과의 밸런스도 고려한다.

Stop & GO

pool은 크게 3가지로, live, stop, dead로 나뉘어진다. live인 경우는 현재 트레이닝이 동작 중인 경우로, 성능에 따라 stop이나 dead로 옮겨갈 수 있는데, stop인 경우는 나중에 재개할 수 있다.

이 때, 일반 세션과 CHOPT 세션 간의 밸런스는 Master Agent가 전체 클러스터 사용량을 통해 결정한다.

  • Under-utilized : CHOPT세션에 더 많은 리소스를 할당하여 세션이 더 빠르게 끝날 수 있도록 지원
  • Over-utilized : CHOPT세션에서 자원을 다시 반환받음(live->stop)

stop으로 관리되는 세션들은 자원이 생기면 실행되는 우선권을 가진다. 이렇게 함으로써 Early Stopping 하는 경우에 퍼포먼스가 떨어지는 경우를 막을 수 있다고 한다.

Configuration & Optimization

하이퍼파라미터의 경우 python dictionary format으로, 다양한 방식을 지원하며 CHOPT Session의 성능 등을 측정하는 방식도 작성하게 되어 있다.

종료 방식은

  • time
  • max_session_number
  • performance_threshold

이며, 여러 조건이 제공되면 그 중 하나만 만족하면 종료된다.

최적화를 위해 제공되는 알고리즘은

  • random search \w or \wo early stopping
  • PBT
  • hyperband

이다.

Analytic Environment

유저가 중간에 개입할 수 있기 때문에, 전체적인 플로우는 아래와 같게 된다.

Results

대표적인 데이터셋에서, 기존에 알려진 모델을 재현 후, 하이퍼파라미터 최적화를 통해 성능을 더 올린 것을 보여주었다.

위 결과는 하이퍼파라미터 제한이 없어, 성능은 올라가더라도 파라미터 수가 많이 올라간 경우인 점을 감안해서 보아야 한다.

위와 같이 파라미터 수에 제한을 두면 성능 차이는 더욱 줄어든다.

적절한 Early Stopping 파라미터를 두면 굉장히 적은 시간으로 좋은 성능을 낼 수 있다고 한다. 여기서 Step은 Early Stopping을 위해 evaluation하는 간격을 의미한다.

B부터가 CHOPT 세션이 시작된 시간인데, 가용 자원을 끌어다가 최적화를 하고 있고, D 영역에서 일반 세션이 많아질 때 자원을 반납하는 모습을 볼 수 있다. (E에서는 최적화가 끝나서 그래프가 내려왔다고 함)

개인적으로는 하이퍼파라미터를 동일하게 취급해 최적화하는 것보다는 영역 별로(data augmentation parameter, optimization parameter, network parameter, …) 나누어 각 영역별 접근 방식을 달리하는 것이 효과적이고 나은 성능이 될 것으로 생각한다. 예를 들어 data augmentation은 autoAugmentation 같은 방식을 제공하거나, network은 NAS, optitmization 파트는 learn2optimize 등 할 수 있는 좋은 방식이 존재하고, 지금처럼 하이퍼파라미터라는 이름으로 한번에 묶어버리면 search 영역을 효율적으로 탐색하기 어려울 것 같다는 생각이 든다.

또 새로운 기법을 만들었다기보다는, 시스템화를 잘 한 사례로 학술적인 가치를 찾기는 어려웠던 것 같다. 다만, 이러한 프레임워크를 구현함으로써 이후에 더 좋은 방식을 개발하고 시도하는 데에 좋은 출발점을 만들었다고 생각되고, Hyperparameter Optimization Framework라는 프로젝트 하나를 잘 마무리해서 결과로 마무리짓는 과정까지가 기업에서 보여준 훌륭한 모습이 드러난 논문이라고 생각한다.