728x90
핵심 요약: Spinning Up 실험 실행 방법
Spinning Up은 강화학습 실험을 체계적으로 관리하고 쉽게 실행할 수 있는 다양한 기능을 제공합니다. 명령줄 실행, 스크립트 실행, ExperimentGrid를 사용하여 하이퍼파라미터 탐색을 지원합니다.
1. 명령줄에서 실행
- 기본 형식:
python -m spinup.run [알고리즘 이름] [플래그]
python -m spinup.run ppo --env Walker2d-v2 --exp_name walker
- 중요 매개변수:
- --env: Gym 환경 이름 지정 (예: Walker2d-v2).
- --exp_name: 실험 이름 (저장 디렉토리 이름에도 사용).
- --seed: 랜덤 시드 값 설정 (다수 값 제공 시 여러 실험 실행).
- --hid: 신경망의 히든 레이어 크기 (예: [32,32]).
- --act: 신경망의 활성화 함수 (예: torch.nn.Tanh).
- --data_dir: 결과 저장 폴더 설정.
- --datestamp: 날짜/시간을 디렉토리 이름에 포함.
- 여러 실험 실행: 다수 값을 설정하면 순차적으로 실행.
python -m spinup.run ppo --seed 0 10 20
여러 값을 설정하면 각 조합으로 개별 실험을 순차적으로 실행합니다.
명령줄에서 PPO 실행 예제
python -m spinup.run ppo --exp_name ppo_ant --env Ant-v2 --clip_ratio 0.1 0.2 \ --hid[h] [32,32] [64,32] --act torch.nn.Tanh --seed 0 10 20 --dt \ --data_dir path/to/data
설명
- 환경 설정: Ant-v2 Gym 환경에서 PPO 알고리즘 실행.
- 하이퍼파라미터 설정:
- clip_ratio: PPO에서 정책 클리핑 비율 (여러 값으로 실험 가능).
- hid: 신경망 히든 레이어 크기 (단축형 [h] 사용).
- act: 신경망 활성화 함수 (torch.nn.Tanh).
- 시드: 0, 10, 20을 사용해 난수 생성기 초기화 (결과 분산 확인).
- 결과 저장 디렉토리:
- --data_dir: 결과를 저장할 기본 디렉토리 설정 (path/to/data).
- --dt: 디렉토리 이름에 타임스탬프 추가.
실험 디렉토리 이름 구조
결과는 실험 이름(exp_name)과 여러 하이퍼파라미터 값 조합에 따라 디렉토리가 생성됩니다.
- 디렉토리 이름은 약칭을 사용해 간결하게 표현됩니다.
- 예: --hid[h] → 약칭 h 사용.
- 자동 약칭 생성: clip_ratio → cli.
저장 디렉토리 예시
- 설정:
- clip_ratio = 0.1
- hid = [32,32]
- seed = 10
- 생성 디렉토리:
path/to/data/YY-MM-DD_ppo_ant_cli0-1_h32-32/YY-MM-DD_HH-MM-SS-ppo_ant_cli0-1_h32-32_seed10
기본 동작
- 기본 프레임워크: PyTorch 버전이 기본 실행됨.
- TensorFlow 버전을 사용하려면 ppo를 ppo_tf1로 변경.
- 다중 실험 실행: 하이퍼파라미터에 여러 값을 설정하면 각각의 조합으로 개별 실험이 순차적으로 실행됩니다.
추가 요약
- 타임스탬프 플래그(--dt): 디렉토리 이름에 날짜/시간 추가 (또는 FORCE_DATESTAMP=True로 설정 가능).
- 하이퍼파라미터 단축 플래그: 사용자 정의 약칭 제공 가능 (--hid[h] 형태).
- 디렉토리 관리: 실험 결과는 디렉토리 계층 구조로 정리되며, 실험의 모든 설정이 포함됩니다.
명령줄에서 하이퍼파라미터 설정
Spinning Up에서는 모든 알고리즘의 하이퍼파라미터를 명령줄 플래그로 직접 제어할 수 있습니다.
1. 기본 사용 방법
- 형식:
python -m spinup.run [algo name] [--kwarg value]
- 예:
python -m spinup.run ppo --env Walker2d-v2 --exp_name walker --act torch.nn.ELU
- 위 명령어는 torch.nn.ELU를 활성화 함수로 설정합니다.
- TensorFlow 버전에서는 ppo_tf1 --act tf.nn.elu로 실행.
2. 하이퍼파라미터 확인
- 명령줄에서 지원되는 하이퍼파라미터를 확인하려면:
python -m spinup.run [algo name] --help
- 해당 알고리즘 함수의 docstring 출력.
3. 값을 함수나 객체로 설정
- 모든 값은 eval()을 통해 처리되므로, 명령줄에서 직접 함수나 객체를 설정할 수 있습니다.
- eval()은 Python 내장 함수로, 문자열로 표현된 코드를 실행하거나 값을 평가하여 그 결과를 반환합니다.
- 사용자가 명령줄에서 함수, 객체, 또는 리스트 같은 값을 입력하면, 이를 Python 객체로 변환.
- 예:
python -m spinup.run ppo --env Hopper-v2 --act torch.nn.ReLU
- torch.nn.ReLU를 활성화 함수로 사용.
4. 딕셔너리 값 처리
- 딕셔너리 값을 간편하게 설정 가능:
- 일반 형식:
--key dict(v1=value_1, v2=value_2)
- 간편 형식:
--key:v1 value_1 --key:v2 value_2
- 예:
python -m spinup.run ppo --custom_params:lr 0.001 --custom_params:batch_size 64--custom_params dict(lr=0.001, batch_size=64)
- 일반 형식:
추가 요약
- 모든 알고리즘 하이퍼파라미터는 명령줄 플래그로 제어 가능.
- 함수와 객체 값 지원: torch.nn.ReLU와 같은 객체를 명령줄에서 설정.
- 딕셔너리 값 단축 형식 지원: --key:value 형식 사용.
2. 스크립트를 통한 실행
- 알고리즘 함수는 spinup 패키지에서 직접 가져와 사용 가능.
- 기본 예시
from spinup import ppo_pytorch as ppo
import gym
env_fn = lambda: gym.make('LunarLander-v2')
ac_kwargs = dict(hidden_sizes=[64, 64], activation=torch.nn.ReLU)
logger_kwargs = dict(output_dir='path/to/output_dir', exp_name='example')
ppo(env_fn=env_fn, ac_kwargs=ac_kwargs, steps_per_epoch=5000, epochs=250, logger_kwargs=logger_kwargs)
설명
- env_fn: Gym 환경 생성 함수.
- ac_kwargs: 신경망 하이퍼파라미터 (예: 히든 레이어 크기와 활성화 함수).
- logger_kwargs: 실험 로그 설정 (결과 저장 경로, 실험 이름 등).
3. ExperimentGrid로 하이퍼파라미터 탐색
- 여러 하이퍼파라미터 조합으로 실험을 쉽게 설정 및 실행 가능.
- 예제:
from spinup.utils.run_utils import ExperimentGrid
from spinup import ppo_pytorch
import torch
eg = ExperimentGrid(name='ppo-experiment')
eg.add('env_name', 'CartPole-v0', shorthand='env')
eg.add('ac_kwargs:hidden_sizes', [(32,), (64, 64)], shorthand='hid')
eg.add('ac_kwargs:activation', [torch.nn.Tanh, torch.nn.ReLU], shorthand='act')
eg.run(ppo_pytorch, num_cpu=4)
매개변수 추가 방법
- eg.add(param_name, values, shorthand, in_name):
- param_name: 파라미터 이름.
- values: 값 목록.
- shorthand: 결과 디렉토리 이름에 반영될 약칭.
- in_name: 실험 이름에 강제로 포함 여부.
실험 실행
eg.run(thunk, **run_kwargs)
- thunk: 실행할 알고리즘 (예: ppo_pytorch).
- run_kwargs: 추가 실행 매개변수.
4. 저장 디렉토리 구조
4.1 기본 구조
data_dir/[outer_prefix]exp_name[suffix]/[inner_prefix]exp_name[suffix]_s[seed]
- data_dir: --data_dir에서 지정 (기본값은 DEFAULT_DATA_DIR).
- outer_prefix: --datestamp가 활성화되었을 때 날짜 접두사 (YY-MM-DD_).
- inner_prefix: 시간 접두사 (YY-MM-DD_HH-MM-SS-).
- suffix: 실험별 하이퍼파라미터 조합 요약.
4.2 접미사 생성 규칙
- 하이퍼파라미터 이름의 약칭과 값 조합으로 구성.
- 약칭은 자동 생성되거나 사용자가 대괄호로 직접 지정 가능.
예: --hid[h] [32,32]에서 h는 사용자가 지정한 약칭.
5. 추가 사항
- PyTorch/TensorFlow 선택:
- PyTorch: ppo_pytorch 실행.
- TensorFlow: ppo_tf1 실행.
- 명령줄 하이퍼파라미터 처리:
- 키워드 인수는 eval()을 통해 처리되므로, 함수나 객체를 직접 지정 가능.
- 딕셔너리 값을 키-값 형식으로 나눠 설정 가능.
이와 같은 실행 방식은 작은 규모의 강화학습 실험을 효율적으로 수행하고 하이퍼파라미터를 조정하며 결과를 체계적으로 관리하는 데 유용합니다.
728x90
'AI > 강화학습' 카테고리의 다른 글
6. [OPENAI] Plotting Results (0) | 2025.01.23 |
---|---|
5. [OPENAI] Experiment Outputs (1) | 2025.01.22 |
3. [OPENAI] Algorithms (0) | 2025.01.20 |
2. [OPENAI] Installation(Window) (0) | 2025.01.17 |
1. [OpenAI] Spinning Up in Deep RL Introduction (1) | 2025.01.16 |