상태: 안정 릴리스
TensorFlow 2에서 DreamerV2 에이전트 구현. 모든 55개 게임에 대한 훈련 곡선이 포함되어 있습니다.
이 코드가 유용하다고 생각되면 논문에서 다음을 참조하세요.
@article{hafner2020dreamerv2,
title={Mastering Atari with Discrete World Models},
author={Hafner, Danijar and Lillicrap, Timothy and Norouzi, Mohammad and Ba, Jimmy},
journal={arXiv preprint arXiv:2010.02193},
year={2020}
}
DreamerV2는 Atari 벤치마크에서 인간 수준의 성능을 달성한 세계 최초의 모델 에이전트입니다. DreamerV2는 또한 동일한 양의 경험과 계산을 사용하여 최고의 모델 프리 에이전트 Rainbow 및 IQN의 최종 성능을 능가합니다. 이 저장소의 구현은 세계 모델 훈련, 정책 훈련, 경험 수집을 번갈아 수행하며 단일 GPU에서 실행됩니다.
DreamerV2는 고차원 입력 이미지로부터 직접 환경 모델을 학습합니다. 이를 위해 컴팩트하게 학습된 상태를 사용하여 미리 예측합니다. 상태는 결정적 부분과 샘플링되는 여러 범주형 변수로 구성됩니다. 이러한 범주형에 대한 사전은 KL 손실을 통해 학습됩니다. 월드 모델은 직선형 그라데이션을 통해 처음부터 끝까지 학습됩니다. 즉, 밀도의 그라데이션이 샘플의 그라데이션으로 설정됩니다.
DreamerV2는 잠재 상태의 상상된 궤적을 통해 배우와 비평가 네트워크를 학습합니다. 궤적은 이전에 발생한 시퀀스의 인코딩된 상태에서 시작됩니다. 그런 다음 월드 모델은 선택한 작업과 이전에 학습된 상태를 사용하여 미리 예측합니다. 비평가는 시간적 차이 학습을 사용하여 훈련되고 행위자는 강화 및 직선 경사를 통해 가치 함수를 최대화하도록 훈련됩니다.
자세한 내용은 다음을 참조하세요.
새로운 환경에서 DreamerV2를 실행하는 가장 쉬운 방법은 pip3 install dreamerv2
통해 패키지를 설치하는 것입니다. 코드는 환경이 개별 작업을 사용하는지 연속 작업을 사용하는지 자동으로 감지합니다. 다음은 MiniGrid 환경에서 DreamerV2를 교육하는 사용 예입니다.
import gym
import gym_minigrid
import dreamerv2 . api as dv2
config = dv2 . defaults . update ({
'logdir' : '~/logdir/minigrid' ,
'log_every' : 1e3 ,
'train_every' : 10 ,
'prefill' : 1e5 ,
'actor_ent' : 3e-3 ,
'loss_scales.kl' : 1.0 ,
'discount' : 0.99 ,
}). parse_flags ()
env = gym . make ( 'MiniGrid-DoorKey-6x6-v0' )
env = gym_minigrid . wrappers . RGBImgPartialObsWrapper ( env )
dv2 . train ( env , config )
DreamerV2 에이전트를 수정하려면 저장소를 복제하고 아래 지침을 따르세요. 시스템에 종속성을 설치하지 않으려는 경우 Dockerfile을 사용할 수도 있습니다.
종속성을 가져옵니다.
pip3 install tensorflow==2.6.0 tensorflow_probability ruamel.yaml ' gym[atari] ' dm_control
Atari에서 훈련:
python3 dreamerv2/train.py --logdir ~ /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
DM 제어 교육:
python3 dreamerv2/train.py --logdir ~ /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
결과 모니터링:
tensorboard --logdir ~ /logdir
플롯 생성:
python3 common/plot.py --indir ~ /logdir --outdir ~ /plots
--xaxis step --yaxis eval_return --bins 1e6
Dockerfile을 사용하면 시스템에 종속성을 설치하지 않고도 DreamerV2를 실행할 수 있습니다. 이를 위해서는 GPU 액세스가 설정된 Docker가 필요합니다.
설정을 확인하세요.
docker run -it --rm --gpus all tensorflow/tensorflow:2.4.2-gpu nvidia-smi
Atari에서 훈련:
docker build -t dreamerv2 .
docker run -it --rm --gpus all -v ~ /logdir:/logdir dreamerv2
python3 dreamerv2/train.py --logdir /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
DM 제어 교육:
docker build -t dreamerv2 . --build-arg MUJOCO_KEY= " $( cat ~ /.mujoco/mjkey.txt ) "
docker run -it --rm --gpus all -v ~ /logdir:/logdir dreamerv2
python3 dreamerv2/train.py --logdir /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
효율적인 디버깅. --configs atari debug
에서와 같이 debug
구성을 사용할 수 있습니다. 이는 배치 크기를 줄이고, 평가 빈도를 높이며, 쉬운 라인별 디버깅을 위해 tf.function
그래프 컴파일을 비활성화합니다.
무한 그래디언트 규범. 이는 정상적인 현상이며 혼합 정밀도 가이드의 손실 스케일링에 설명되어 있습니다. 훈련 스크립트에 --precision 32
전달하여 혼합 정밀도를 비활성화할 수 있습니다. 혼합 정밀도는 더 빠르지만 원칙적으로 수치적 불안정성을 유발할 수 있습니다.
기록된 측정항목에 액세스 중입니다. 측정항목은 TensorBoard 및 JSON 라인 형식으로 저장됩니다. pandas.read_json()
사용하여 직접 로드할 수 있습니다. 또한 플로팅 스크립트는 간편한 수동 플로팅을 위해 여러 실행의 비닝 및 집계된 측정항목을 단일 JSON 파일에 저장합니다.