Thomas Schmied 1 , Markus Hofmarcher 2 , Fabian Paischer 1 , Razvan Pacscanu 3,4 , Sepp Hochreiter 1,5
1 Ellis Unit Linz dan Lit Ai Lab, Institute for Machine Learning, Johannes Kepler University Linz, Austria
2 JKU Lit Sal Espml Lab, Institute for Machine Learning, Johannes Kepler University Linz, Austria
3 Google DeepMind
4 UCL
5 Institut Penelitian Lanjutan dalam Kecerdasan Buatan (IARAI), Wina, Austria
Repositori ini berisi kode sumber untuk "Belajar memodulasi model terlatih dalam RL" yang diterima di Neurips 2023. Makalah ini tersedia di sini.

Basis kode ini mendukung model Transformer Decision Transformer (DT) online atau dari set data offline pada domain berikut:
Basis kode ini bergantung pada kerangka kerja open-source, termasuk:
Apa yang ada di repositori ini?
.
├── 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.
Konfigurasi dan dependensi lingkungan tersedia di environment.yaml dan requirements.txt .
Pertama, ciptakan lingkungan Conda.
conda env create -f environment.yaml
conda activate mddt
Kemudian instal persyaratan yang tersisa (dengan mujoco sudah diunduh, jika tidak lihat di sini):
pip install -r requirements.txt
Init The continualworld Submodule dan instal:
git submodule init
git submodule update
cd continualworld
pip install .
Instal meta-world :
pip install git+https://github.com/rlworkgroup/metaworld.git@18118a28c06893da0f363786696cc792457b062b
Instal versi khusus DMC2GYM. Versi kami membuat flatten_obs opsional, dan, dengan demikian, memungkinkan kami untuk membangun ruang pengamatan penuh dari semua Envs DMControl.
cd dmc2gym_custom
pip install -e .
Unduh 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
Kemudian tambahkan baris berikut ke .bashrc :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin
Masalah berikut sangat membantu:
Pertama, instal paket berikut:
conda install -c conda-forge glew mesalib
conda install -c menpo glfw3 osmesa
pip install patchelf
Buat symlink secara manual:
cp /usr/lib64/libGL.so.1 $CONDA_PREFIX/lib
ln -s $CONDA_PREFIX/lib/libGL.so.1 $CONDA_PREFIX/lib/libGL.so
Kemudian lakukan:
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
Akhirnya, ekspor jalur ke Dir rpm (tambahkan ke ~/.bashrc ):
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/rpm/usr/lib64
export LDFLAGS="-L/~/rpm/usr/lib64"
Basis kode ini bergantung pada Hydra, yang mengkonfigurasi percobaan melalui file .yaml . Hydra secara otomatis membuat struktur folder log untuk menjalankan yang diberikan, sebagaimana ditentukan dalam file config.yaml masing -masing.
config.yaml adalah titik entri konfigurasi utama dan berisi parameter default. File merujuk masing -masing file parameter default di bawah blok defaults . Selain itu, config.yaml berisi 4 konstanta penting yang mengkonfigurasi jalur direktori:
LOG_DIR: ../logs
DATA_DIR: ../data
SSD_DATA_DIR: ../data
MODELS_DIR: ../models
Kumpulan data yang digenarkan saat ini di-host melalui server web kami. Unduh Dataset Meta-World dan DMControl ke DATA_DIR yang ditentukan:
# 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
Dataset juga tersedia di hub Huggingface. Unduh Menggunakan 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
Kerangka kerja ini juga mendukung dataset Atari, D4RL, dan Visual DMControl. Untuk Atari dan DMControl visual, kami merujuk pada Readmes masing -masing.
Berikut ini, kami memberikan beberapa contoh ilustrasi tentang cara menjalankan eksperimen di koran.
Untuk melatih model transformator keputusan multi-domain (MDDT) 40m pada MT40 + DMC10 dengan 3 biji pada satu GPU, jalankan:
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
Untuk menyempurnakan model pra-terlatih menggunakan LORA pada tugas CW10 tunggal dengan 3 biji, jalankan:
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=
Untuk menyempurnakan model pra-terlatih menggunakan L2M pada semua tugas CW10 secara berurutan dengan 3 biji, jalankan:
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
Untuk pelatihan multi-GPU, kami menggunakan torchrun . Alat bertentangan dengan hydra . Oleh karena itu, plugin peluncur Hydra_Torchrun_launcher dibuat.
Untuk mengaktifkan plugin, klon hydra repo, CD untuk contrib/hydra_torchrun_launcher , dan PIP pasang plugin:
git clone https://github.com/facebookresearch/hydra.git
cd hydra/contrib/hydra_torchrun_launcher
pip install -e .
Plugin dapat digunakan dari Commandline:
python main.py -m hydra/launcher=torchrun hydra.launcher.nproc_per_node=4 [...]
Menjalankan percobaan pada cluster lokal pada satu node dapat dilakukan melalui CUDA_VISIBLE_DEVICES untuk menentukan GPU untuk digunakan:
CUDA_VISIBLE_DEVICES=0,1,2,3 python main.py -m hydra/launcher=torchrun hydra.launcher.nproc_per_node=4 [...]
Di Slurm, mengeksekusi torchrun pada satu node berfungsi sama. Misalnya, untuk menjalankan 2 GPU pada satu node:
#!/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 [...]
Contoh skrip untuk pelatihan multi-GPU tentang Slurm atau PBS tersedia dalam scripts .
Berjalan di Slurm/PBS dalam pengaturan multi-node membutuhkan sedikit lebih banyak perawatan. Contoh skrip disediakan dalam scripts .
Jika Anda menemukan ini berguna, silakan pertimbangkan mengutip pekerjaan kami:
@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}
}