JEon.E
일단 ML 엔지니어 생존일지
JEon.E
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • 논문 스터디 (8)
      • 논문 구현 (0)
      • Code-LLM (0)
      • ML attack (6)
      • Fuzzing (2)
    • 동향 및 조사 (3)
    • Stack Overflow (6)
    • Setting Tips (14)
    • ML 엔지니어링 (1)
      • AI Math (0)
      • Pytorch (1)
    • 알고리즘 (132)
      • 이론 (8)
      • 문제풀이 (105)
      • 삼성 기출 문제풀이 (18)
    • Hack (0)
      • 해킹 맛보기 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 플로이드-워샬
  • greedy
  • dp
  • 강화학습
  • 시뮬레이션
  • Graph
  • dfs
  • Adversarial Defense
  • 그래프
  • 다시
  • 구현
  • Fuzzing 동향
  • BOJ
  • 네이버 부스트캠프
  • 크루스칼
  • BFS
  • 프로그래머스
  • 백트래킹
  • NLP black-box attack
  • keras

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JEon.E
Setting Tips

command line으로 sweep 실행하기

command line으로 sweep 실행하기
Setting Tips

command line으로 sweep 실행하기

2022. 11. 16. 18:19
sweep… .. 이녀석은.. 하이퍼 파라미터를 조정하는데 있어 최고의 도구다. 그동안 직접 손으로 돌렸다는 사실이 한탄스러울 정도. 다들 꼭 한번씩 쓰고 필자처럼 광명을 찾길 바라며…

기존 wandb sweep을 사용하는 튜토리얼은 jupyter notebook 기반으로 구성되어 있다. [튜토리얼 링크]

 

Organizing_Hyperparameter_Sweeps_in_PyTorch_with_W&B.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

[그림 1] wandb sweep 공식 튜토리얼에 작성되어있는 command line으로 이용하는 방법.. 하지만 필자는 yaml을 사용하기가 귀찮다.

하지만… 필자는 jupyter notebook은 왠지 손맛(?)이 느껴지지 않아서 그런지 command line으로 스크립트를 실행하고 싶었는데.. 위의 튜토리얼에서는 command line에서 실행할 경우 yaml로 config 파일을 만들어 실행하라고 표기되어있다. 필자는.. yaml 을 읽어오는 코드까지 작성할 필요는 느끼지 못하였기에.. yaml 파일을 만들지 않고도 sweep을 실행하는 방법을 소개하고자 한다. 뭐.. 모르겠다면 위의 튜토리얼 링크에서 상냥하게 소개해주고 있으니 다시 한번 살펴보시고.

 

먼저 sweep은 wandb에 속해있는 기능이므로 wandb를 먼저 설치해주어야 한다. 기존에 작성하였던 wandb 사용하기 글을 따라 설치하고 코드를 몇줄 작성해주자.

wandb가 작동한다면 두 번째로 해야할 것은 sweep configuration 작성. 본 글에서는 가장 간단하게 실행하는 방법만을 소개하고자 코드 안에 config를 dict 타입으로 넣어버렸다. sweep을 실행할 코드에 다음과 같은 dict를 만들어 넣어주면 끝.

이 때, parameters안에 들어있는 ‘epochs’와 ‘seed’는 a.epochs와 같이 config의 속성을 의미하니 맞추어 넣어주면 될 것 같다. method에는 모든 경우의 수를 모두 사용하여보는 grid search와 무작위를 의미하는 random, 확률적으로 하이퍼파라미터를 조합하는 bayes 방법이 있다. 취향껏 설치해주자. 필자는.. random이나 bayesian 을 주로 사용하긴 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sweep_configuration = {
    'method': 'random',
    'metric': {'goal': 'minimize', 'name': 'loss'},
    'parameters': 
    {
        'epochs': {'value': 3},
        'seed': {'value': 3241},
        'lr': {
            'distribution': 'uniform',
            'min': 1e-6,
            'max': 1e-3
          },
        'batch_size': {'values': 64, 128, 256},
 
    }
}
Colored by Color Scripter
cs

그러고 나면 남은 것은 sweep을 실행하면 바로 확인 할 수 있다. 필자는 sweep 함수를 따로 만들어주었다.

1
2
3
4
def sweep():
    import wandb
    sweep_id = wandb.sweep(sweep=sweep_configuration, project="demo")
    wandb.agent(sweep_id, train_sweep, count=10)
cs

앞서 작성한 sweep_configuration을 인자로 넣어 sweep_id를 생성하였으며 이를 wandb.agent를 통해 실행한다. 이때, agent는 각 경우의 수에 따라 실행하는 객체를 agent라고 하고 각 경우의 수를 만들어 실행시키는 것을 sweep controller라고 하는 듯 하다. 직관적으로 sweep이 작동하는 방식은 [그림 2]를 통해 이해하도록 하자.

[그림 2] sweep이 작동하는 방식

이 agent를 통해 train 함수를 실행시키는 것으로 sweep 실행이 가능하다. 이 때, 주의할 점은 wandb.agent의 첫번째 인자인 sweep_id가 train함수의 config인자로 들어가게 된다는 것이다. 대충.. train 함수를 구성할 때는 다음과 같이 config 인자 하나만 갖도록 구성하면 사용 가능하다.

 

 

1
2
3
4
5
6
7
8
def train_sweep(config=None):
    import wandb
    with wandb.init(config=config):
        config = wandb.config
        data_iter = DataLoader(dataset, batch_size=config.batch_size, shuffle=True, validation_split=0.1, num_workers=8, pin_memory=True)
        model = Model(config)
        trainer = Trainer(config, model..)
                trainer.train()
Colored by Color Scripter
cs

 

또한 wandb.agent(sweep_id, train_sweep, count=10) 의 count는 몇번 실행할지를 의미한다. 해당 코드는 10개의 하이퍼파라미터 조합만을 테스트한다는 뜻. 잘 조정하여 테스트해보길 바란다.

 

그렇게 sweep을 실행이 끝나게 되면 이렇게..[그림 3]과 [그림 4]와 같이 실험한 여러 조합이 어떤 성능을 지니는지 시각화해서 표현을 해주며 어떤 파라미터가 목표에 영향을 주는지까지 분석해준다. … …. 처음 필자가 시도해보고…. 와.. 정말 놀랐다. 이렇게 좋은 툴이 있다니.. 신세계였다..

[그림 3] sweep의 시각화 성능 표현
[그림 4] 해당 하이퍼파라미터에 얼마나 관련성이 있는지 까지 알려준다. wow..

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Setting Tips' 카테고리의 다른 글

update-alternatives  (0) 2023.04.05
psutil 사용해서 특정 cpu에 python 스크립트 할당하기  (0) 2023.03.28
wandb 사용하기  (0) 2022.11.16
맥 터미널 내 code 명령어로 vs code 여는 방법  (0) 2022.09.26
그래픽카드 변경으로 인한 pytorch, CUDA 버전 비매칭 이슈 해결하기  (0) 2022.05.22
    'Setting Tips' 카테고리의 다른 글
    • update-alternatives
    • psutil 사용해서 특정 cpu에 python 스크립트 할당하기
    • wandb 사용하기
    • 맥 터미널 내 code 명령어로 vs code 여는 방법
    JEon.E
    JEon.E
    ML Security Engineer로 살아남기 도전중
    일단 ML 엔지니어 생존일지ML Security Engineer로 살아남기 도전중

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.