Thomas Schmied 1 , Markus Hofmarcher 2 , Fabian Paischer 1 , Razvan Pacscanu 3,4 , Sepp Hochreiter 1,5
1 Ellis Unit Linz 및 Lit AI Lab, Machine Learning Institute, Johannes Kepler University Linz, Austria
2 JKU LIT SAL ESPML Lab, 기계 학습 연구소, Johannes Kepler University Linz, 오스트리아
3 Google Deepmind
4 UCL
5 인공 지능 연구소 (IARAI), 비엔나, 오스트리아
이 저장소에는 Neurips 2023에서 허용되는 "RL에서 미리 훈련 된 모델을 조정하는 학습" 에 대한 소스 코드가 포함되어 있습니다.이 논문은 여기에서 제공됩니다.

이 코드베이스는 다음 도메인의 온라인 또는 오프라인 데이터 세트에서 교육 결정 변압기 (DT) 모델을 지원합니다.
이 코드베이스는 다음을 포함하여 오픈 소스 프레임 워크에 의존합니다.
이 저장소에는 무엇이 있습니까?
.
├── configs # Contains all .yaml config files for Hydra to configure agents, envs, etc.
│ ├── agent_params
│ ├── wandb_callback_params
│ ├── env_params
│ ├── eval_params
│ ├── run_params
│ └── config.yaml # Main config file for Hydra - specifies log/data/model directories.
├── continual_world # Submodule for Continual-World.
├── dmc2gym_custom # Custom wrapper for DMControl.
├── figures
├── scripts # Scrips for running experiments on Slurm/PBS in multi-gpu/node setups.
├── src # Main source directory.
│ ├── algos # Contains agent/model/prompt classes.
│ ├── augmentations # Image augmentations.
│ ├── buffers # Contains replay trajectory buffers.
│ ├── callbacks # Contains callbacks for training (e.g., WandB, evaluation, etc.).
│ ├── data # Contains data utilities (e.g., for downloading Atari)
│ ├── envs # Contains functionality for creating environments.
│ ├── exploration # Contains exploration strategies.
│ ├── optimizers # Contains (custom) optimizers.
│ ├── schedulers # Contains learning rate schedulers.
│ ├── tokenizers_custom # Contains custom tokenizers for discretizing states/actions.
│ ├── utils
│ └── __init__.py
├── LICENSE
├── README.md
├── environment.yaml
├── requirements.txt
└── main.py # Main entry point for training/evaluating agents.
환경 구성 및 requirements.txt 은 environment.yaml 에서 사용할 수 있습니다.
먼저 콘다 환경을 만듭니다.
conda env create -f environment.yaml
conda activate mddt
그런 다음 나머지 요구 사항을 설치하십시오 (여기에 보이지 않으면 Mujoco가 이미 다운로드 한 경우) :
pip install -r requirements.txt
continualworld 하위 모듈을 시작하고 설치하십시오.
git submodule init
git submodule update
cd continualworld
pip install .
meta-world 설치 :
pip install git+https://github.com/rlworkgroup/metaworld.git@18118a28c06893da0f363786696cc792457b062b
DMC2GYM의 사용자 정의 버전을 설치하십시오. 우리의 버전은 flatten_obs 선택적으로 만들므로 모든 dmcontrol envs의 전체 관찰 공간을 구성 할 수 있습니다.
cd dmc2gym_custom
pip install -e .
Mujoco 다운로드 :
mkdir ~/.mujoco
cd ~/.mujoco
wget https://www.roboti.us/download/mujoco200_linux.zip
unzip mujoco200_linux.zip
mv mujoco200_linux mujoco200
wget https://www.roboti.us/file/mjkey.txt
그런 다음 다음 줄을 .bashrc 에 추가하십시오.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin
다음과 같은 문제가 도움이되었습니다.
먼저 다음 패키지를 설치하십시오.
conda install -c conda-forge glew mesalib
conda install -c menpo glfw3 osmesa
pip install patchelf
수동으로 Symlink를 만듭니다.
cp /usr/lib64/libGL.so.1 $CONDA_PREFIX/lib
ln -s $CONDA_PREFIX/lib/libGL.so.1 $CONDA_PREFIX/lib/libGL.so
그런 다음 :
mkdir ~/rpm
cd ~/rpm
curl -o libgcrypt11.rpm ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/bosconovic:/branches:/home:/elimat:/lsi/openSUSE_Leap_15.1/x86_64/libgcrypt11-1.5.4-lp151.23.29.x86_64.rpm
rpm2cpio libgcrypt11.rpm | cpio -id
마지막으로, rpm dir로의 경로를 내보내십시오 ( ~/.bashrc 에 추가) :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/rpm/usr/lib64
export LDFLAGS="-L/~/rpm/usr/lib64"
이 코드베이스는 .yaml 파일을 통한 실험을 구성하는 Hydra에 의존합니다. Hydra는 각 config.yaml 파일에 지정된대로 주어진 실행에 대한 로그 폴더 구조를 자동으로 생성합니다.
config.yaml 은 기본 구성 입력 지점이며 기본 매개 변수를 포함합니다. 파일은 블록 defaults 아래에서 각 기본 매개 변수 파일을 참조합니다. 또한 config.yaml 디렉토리 경로를 구성하는 4 가지 중요한 상수를 포함합니다.
LOG_DIR: ../logs
DATA_DIR: ../data
SSD_DATA_DIR: ../data
MODELS_DIR: ../models
생성 데이터 세트는 현재 웹 서버를 통해 호스팅됩니다. 지정된 DATA_DIR 로 Meta-World 및 DMControl 데이터 세트를 다운로드하십시오.
# Meta-World
wget --recursive --no-parent --no-host-directories --cut-dirs=2 -R "index.html*" https://ml.jku.at/research/l2m/metaworld
# DMControl
wget --recursive --no-parent --no-host-directories --cut-dirs=2 -R "index.html*" https://ml.jku.at/research/l2m/dm_control_1M
데이터 세트는 Huggingface Hub에서도 사용할 수 있습니다. huggingface-cli 사용하여 다운로드 :
# Meta-World
huggingface-cli download ml-jku/meta-world --local-dir=./meta-world --repo-type dataset
# DMControl
huggingface-cli download ml-jku/dm_control --local-dir=./dm_control --repo-type dataset
이 프레임 워크는 ATARI, D4RL 및 Visual DMControl 데이터 세트도 지원합니다. Atari 및 Visual DMControl의 경우 각 ReadMes를 참조합니다.
다음에서, 우리는 논문에서 실험을 실행하는 방법에 대한 몇 가지 예를 제공합니다.
MT40 + DMC10에서 40m 멀티 도메인 결정 변압기 (MDDT) 모델을 단일 GPU에서 3 개의 시드로 훈련시키기 위해 : 실행 :
python main.py -m experiment_name=pretrain seed=42,43,44 env_params=multi_domain_mtdmc run_params=pretrain eval_params=pretrain_disc agent_params=cdt_pretrain_disc agent_params.kind=MDDT agent_params/model_kwargs=multi_domain_mtdmc agent_params/data_paths=mt40v2_dmc10 +agent_params/replay_buffer_kwargs=multi_domain_mtdmc +agent_params.accumulation_steps=2
3 개의 시드로 단일 CW10 작업에서 LORA를 사용하여 미리 훈련 된 모델을 미세 조정하려면 실행하십시오.
python main.py -m experiment_name=cw10_lora seed=42,43,44 env_params=mt50_pretrain run_params=finetune eval_params=finetune agent_params=cdt_mpdt_disc agent_params/model_kwargs=mdmpdt_mtdmc agent_params/data_paths=cw10_v2_cwnet_2M +agent_params/replay_buffer_kwargs=mtdmc_ft agent_params/model_kwargs/prompt_kwargs=lora env_params.envid=hammer-v2 agent_params.data_paths.names='${env_params.envid}.pkl' env_params.eval_env_names=
모든 CW10 작업에서 L2M을 사용하여 미리 훈련 된 모델을 3 개의 씨앗으로 순차적으로 미세 조정하려면 실행하십시오.
python main.py -m experiment_name=cw10_cl_l2m seed=42,43,44 env_params=multi_domain_ft env_params.eval_env_names=cw10_v2 run_params=finetune_coff eval_params=finetune_md_cl agent_params=cdt_mpdt_disc +agent_params.steps_per_task=100000 agent_params/model_kwargs=mdmpdt_mtdmc agent_params/data_paths=cw10_v2_cwnet_2M +agent_params/replay_buffer_kwargs=mtdmc_ft +agent_params.replay_buffer_kwargs.kind=continual agent_params/model_kwargs/prompt_kwargs=l2m_lora
멀티 GPU 교육을 위해 torchrun 사용합니다. 도구는 hydra 와 충돌합니다. 따라서 런처 플러그인 Hydra_Torchrun_launcher가 작성되었습니다.
플러그인을 활성화하려면 hydra Repo를 복제하고 CD로 contrib/hydra_torchrun_launcher 작성하고 플러그인을 설치하십시오.
git clone https://github.com/facebookresearch/hydra.git
cd hydra/contrib/hydra_torchrun_launcher
pip install -e .
플러그인은 CommandLine에서 사용할 수 있습니다.
python main.py -m hydra/launcher=torchrun hydra.launcher.nproc_per_node=4 [...]
단일 노드에서 로컬 클러스터에서 실험을 실행하는 것은 CUDA_VISIBLE_DEVICES 통해 수행하여 사용할 gpus를 지정할 수 있습니다.
CUDA_VISIBLE_DEVICES=0,1,2,3 python main.py -m hydra/launcher=torchrun hydra.launcher.nproc_per_node=4 [...]
Slurm에서는 단일 노드에서 torchrun 실행하는 것이 비슷합니다. 예를 들어 단일 노드에서 2 GPU에서 실행하려면 :
#!/bin/bash
#SBATCH --account=X
#SBATCH --qos=X
#SBATCH --partition=X
#SBATCH --nodes=1
#SBATCH --gpus=2
#SBATCH --cpus-per-task=32
source activate mddt
python main.py -m hydra/launcher=torchrun hydra.launcher.nproc_per_node=2 [...]
Slurm 또는 PBS에 대한 멀티 GPU 교육을위한 스크립트 예제는 scripts 에서 제공됩니다.
다중 노드 설정에서 Slurm/PBS에서 실행하려면 약간 더주의가 필요합니다. 예제 스크립트는 scripts 로 제공됩니다.
이것이 유용하다고 생각되면, 우리의 작업을 인용하는 것을 고려하십시오.
@article{schmied2024learning,
title={Learning to Modulate pre-trained Models in RL},
author={Schmied, Thomas and Hofmarcher, Markus and Paischer, Fabian and Pascanu, Razvan and Hochreiter, Sepp},
journal={Advances in Neural Information Processing Systems},
volume={36},
year={2024}
}