반응형
앞선 글에서 RLlib을 이용하면 Config 기반으로 알고리즘과 파라미터를 손쉽게 변경할 수 있음을 확인했습니다. 이번 글에서는 이산적 행동 공간 환경(Discrete Action Space)에서 DQN과 그 변형(Double DQN, Dueling DQN, Prioritized Replay 등)을 RLlib으로 실행하는 방법을 자세히 살펴보고, 다양한 환경(예: CartPole, Atari)을 적용하는 예제를 소개하겠습니다.이산 행동 알고리즘과 RLlibDQN은 이산적 행동 공간을 전제로 개발된 알고리즘으로, RLlib에서 DQNTrainer를 통해 바로 사용할 수 있습니다. 지난 글에서 DQN에 Double/Dueling 옵션을 추가하는 방법을 봤는데, 여기서는 좀 더 다양한 설정(우선순위 리플레이..
이전 글에서 우리는 RLlib을 이용해 단 몇 줄의 코드로 DQN을 CartPole 환경에서 돌려보았습니다. 그러나 실제로 다양한 환경, 알고리즘, 파라미터 조합을 시도하려면 RLlib이 어떻게 설정을 관리하고, 어떤 구조로 동작하는지 이해하는 것이 중요합니다. 이번 글에서는 RLlib의 핵심 개념인 Config, Trainer, Policy, Rollout Worker 등에 대해 자세히 살펴보고, Config 설정과 Trainer 활용법에 대해 좀 더 다양한 예제를 다루겠습니다.RLlib 핵심 개념 자세히 알아보기RLlib은 크게 다음과 같은 구성요소로 이뤄져 있습니다.Trainer:알고리즘 실행의 중심 클래스입니다. 예를 들어, DQNTrainer, PPOTrainer, SACTrainer 등 알고리..
강화학습(RL)을 다루다 보면, 다양한 알고리즘(DQN, PPO, SAC 등)을 일일이 직접 구현하고, 하이퍼파라미터를 조정하며, 환경을 실행하는 과정이 만만치 않다는 걸 실감하게 됩니다. 이전 시리즈에서는 PyTorch로 직접 RL 알고리즘을 구현해봤지만, 실제 실험 단계에선 이런 구현 부담을 덜어주는 라이브러리가 큰 도움이 됩니다.Ray RLlib는 그런 니즈에 부합하는 강력한 분산 강화학습 프레임워크입니다. RLlib은 다음과 같은 장점을 갖습니다.다양한 알고리즘 내장: DQN, PPO, SAC, A3C/A2C, IMPALA 등 대표적인 알고리즘을 기본 지원간단한 Config 기반 설정: 하이퍼파라미터, 환경 설정, 알고리즘 변형을 Config 딕셔너리로 쉽게 제어분산/병렬 학습 지원: Ray의 멀..
이 시리즈를 따라오느라 수고 많으셨습니다! 여기까지 오신 독자라면, 이제 PyTorch와 다양한 강화학습 알고리즘(DQN 계열, REINFORCE, A2C, PPO, SAC)에 대한 전반적인 감각을 갖추게 되었을 것입니다. 다시 한 번 지금까지 다룬 내용을 간략히 정리해봅시다.지금까지 다룬 내용 정리개념 및 기본 환경 구축 (1편):PyTorch, OpenAI Gym 환경 설정 및 강화학습 기본 개념 소개DQN과 변형들 (2~6편):DQN: 가치기반 접근의 기본Double DQN: Q값 과추정 완화Dueling DQN: 상태 가치(V)와 Advantage 분리로 효율적 학습Prioritized Experience Replay (PER): 중요도가 높은 경험을 더 자주 샘플링하여 효율 개선정책기반 & Ac..
C++로 작성한 고성능 코드나 라이브러리를 파이썬에서 손쉽게 호출하려면 확장 모듈(extension module)을 만들어 파이썬에 로드할 수 있어야 합니다. pybind11은 이러한 바인딩을 매우 간단하게 해주는 라이브러리이며, CMake를 이용하면 C++ 빌드 과정을 관리하고, pyproject.toml을 통해 현대적 파이썬 패키징 표준에 맞춰 배포까지 할 수 있습니다.이 글에서는 다음과 같은 목표를 가집니다.간단한 C++ 함수(C++11 이상) 정의pybind11로 파이썬 바인딩 코드 작성CMakeLists.txt로 빌드 시스템 설정pyproject.toml 이용해 빌드 백엔드와 메타데이터 정의 → pip install . 명령으로 파이썬 패키지 설치 가능하게 하기사전 준비Python 3.7 이상 ..
이 시리즈를 통해 pyproject.toml 파일을 중심으로 한 현대적 파이썬 패키징 표준과 생태계에 대해 폭넓게 다뤄보았습니다. 기존에 setup.py, requirements.txt, MANIFEST.in 등 산재한 설정 파일과 비일관적 빌드 과정에서 벗어나, PEP 518/PEP 621 등 표준에 따라 빌드 백엔드, 메타데이터, 의존성, 스크립트, 도구 설정을 한 곳에서 관리할 수 있음을 확인했습니다.이 마지막 글에서는 지금까지 정리한 내용을 요약하고, 추가로 탐색할 만한 고급 주제와 참고 자료를 제안합니다.시리즈 요약 정리pyproject.toml 등장 배경 및 기본 구조 (1편)과거 패키징 혼란 해결 위해 PEP 518/621 등장, 단일 파일(pyproject.toml)로 설정 통합[build..
많은 Python 프로젝트가 여전히 setup.py, requirements.txt, MANIFEST.in 등 전통적 방식으로 관리되고 있습니다. 이러한 레거시 프로젝트를 모던 Python 패키징 표준인 pyproject.toml 기반으로 마이그레이션하면, 의존성 관리와 빌드/배포 과정이 단순화되고, CI/CD 파이프라인에서 재현성 높은 환경을 손쉽게 구축할 수 있습니다.이번 글에서는 마이그레이션을 위한 단계별 접근 방법, 주의사항, 팀 내 합의 및 베스트 프랙티스 등을 제안합니다.마이그레이션 전략1단계: 기존 의존성, 메타데이터 파악setup.py의 setup() 함수 호출부를 살펴 이름, 버전, author, classifiers 등을 정리requirements.txt에서 런타임/개발 의존성을 분류M..
이번 글에서는 가상의 "my_project"라는 패키지를 예로 들어 pyproject.toml 작성을 단계별로 시연합니다. 목표는 다음과 같습니다.빌드 백엔드: Poetry 선택 (의존성 관리, 빌드, 배포 편의성 활용)기본 메타데이터: 이름, 버전, 저자, 라이선스 등 명시의존성: 런타임 의존성(예: requests), optional-dependencies(dev, docs) 정의스크립트 정의: mytool 명령어 제공린터/포매터 설정: black, mypy 설정 추가 (tool 섹션 활용)프로젝트 디렉토리 구성예제 디렉토리 구조:my_project/ ├─ my_project/ │ ├─ __init__.py │ └─ cli.py ├─ pyproject.toml └─ README.m..
pyproject.toml는 빌드 백엔드 선택에 유연성을 제공합니다. PEP 518 이후 빌드 백엔드를 명시하면 pip나 다른 설치도구가 해당 백엔드를 활용해 프로젝트를 빌드할 수 있습니다. 하지만 빌드 백엔드(예: Flit, Poetry, Hatch, Setuptools)가 각각 고유한 철학과 기능을 갖고 있어, 프로젝트 요구사항에 따라 적절한 백엔드를 선택하는 전략이 필요합니다.이번 글에서는 대표적인 빌드 백엔드를 비교하고, 상황별로 어떤 빌드 백엔드가 적합한지 판단할 수 있는 가이드를 제안합니다.대표적인 빌드 백엔드 소개Setuptools (setuptools.build_meta)가장 오래되고 전통적인 빌드 시스템호환성 광범위, 큰 생태계 지원단점: 설정 방식이 비교적 복잡, 과거 유산(setup...
기존 파이썬 프로젝트에서는 setup.cfg, .flake8, mypy.ini, tox.ini 등 다양한 도구별 설정 파일이 난립하는 경우가 많았습니다. 하지만 pyproject.toml의 [tool.*] 섹션을 이용하면, 이러한 도구 설정을 한 파일로 모아 프로젝트 구성이 훨씬 단순해집니다.이번 글에서는 [tool] 섹션의 개념과 활용법, Poetry나 Flit, Hatch 등 빌드 백엔드별 설정 예제, 그리고 린터/포매터/테스트 도구 설정을 pyproject.toml에 통합하는 방법을 살펴봅니다.[tool.*] 섹션 개념pyproject.toml는 [tool]이라는 상위 테이블을 제공하며, 하위에 도구명(예: poetry, flit, hatch, black, isort, mypy)을 붙여 [tool...