Skip to content

Commit dcd80f9

Browse files
committed
Merge branch 'p2p-rpc-dockerfile' of https://github.com/SolenoidWGT/DI-engine into p2p-rpc-dockerfile
2 parents 99416f2 + 77dfd3f commit dcd80f9

File tree

236 files changed

+7820
-1350
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

236 files changed

+7820
-1350
lines changed

.github/workflows/deploy.yml

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
jobs:
99
docker_base:
1010
runs-on: ubuntu-latest
11-
# if: "contains(github.event.head_commit.message, 'enable docker')"
11+
if: "!contains(github.event.head_commit.message, 'ci skip')"
1212
strategy:
1313
matrix:
1414
platform: [linux/amd64]
@@ -81,7 +81,7 @@ jobs:
8181

8282
docker_doc:
8383
runs-on: ubuntu-latest
84-
# if: "contains(github.event.head_commit.message, 'enable docker')"
84+
if: "!contains(github.event.head_commit.message, 'ci skip')"
8585
strategy:
8686
matrix:
8787
platform: [linux/amd64]
@@ -145,7 +145,7 @@ jobs:
145145
docker_atari:
146146
runs-on: ubuntu-latest
147147
needs: docker_base
148-
# if: "contains(github.event.head_commit.message, 'enable docker')"
148+
if: "!contains(github.event.head_commit.message, 'ci skip')"
149149
strategy:
150150
matrix:
151151
platform: [linux/amd64]
@@ -204,7 +204,7 @@ jobs:
204204
docker_mujoco:
205205
runs-on: ubuntu-latest
206206
needs: docker_base
207-
# if: "contains(github.event.head_commit.message, 'enable docker')"
207+
if: "!contains(github.event.head_commit.message, 'ci skip')"
208208
strategy:
209209
matrix:
210210
platform: [linux/amd64]
@@ -262,7 +262,7 @@ jobs:
262262
docker_metaworld:
263263
runs-on: ubuntu-latest
264264
needs: docker_base
265-
# if: "contains(github.event.head_commit.message, 'enable docker')"
265+
if: "contains(github.event.head_commit.message, 'metaworld docker')"
266266
strategy:
267267
matrix:
268268
platform: [linux/amd64]
@@ -408,5 +408,51 @@ jobs:
408408
- name: Build and push
409409
id: docker_build
410410
run: |
411-
docker buildx build -f ./docker/Dockerfile.rpc . -t opendilab/ding:nightly-rpc-base --target=rpc
411+
docker buildx build -f ./docker/Dockerfile.rpc . -t opendilab/ding:nightly-rpc-base --target=base
412412
docker push opendilab/ding:nightly-rpc-base
413+
414+
docker_evogym:
415+
runs-on: ubuntu-latest
416+
needs: docker_base
417+
if: "contains(github.event.head_commit.message, 'evogym docker')"
418+
strategy:
419+
matrix:
420+
platform: [linux/amd64]
421+
# python-version: [3.6, 3.7, 3.8]
422+
steps:
423+
- name: Checkout
424+
uses: actions/checkout@v2
425+
- name: Login to DockerHub
426+
uses: docker/login-action@v1
427+
with:
428+
username: ${{ secrets.DOCKERIO_USERNAME }}
429+
password: ${{ secrets.DOCKERIO_PASSWORD }}
430+
431+
- name: Build and push
432+
id: docker_build
433+
run: |
434+
docker buildx build -f ./docker/Dockerfile.env . -t opendilab/ding:nightly-evogym --target=evogym
435+
docker push opendilab/ding:nightly-evogym
436+
437+
docker_d4rl:
438+
runs-on: ubuntu-latest
439+
needs: docker_mujoco
440+
if: "contains(github.event.head_commit.message, 'd4rl docker')"
441+
strategy:
442+
matrix:
443+
platform: [linux/amd64]
444+
# python-version: [3.6, 3.7, 3.8]
445+
steps:
446+
- name: Checkout
447+
uses: actions/checkout@v2
448+
- name: Login to DockerHub
449+
uses: docker/login-action@v1
450+
with:
451+
username: ${{ secrets.DOCKERIO_USERNAME }}
452+
password: ${{ secrets.DOCKERIO_PASSWORD }}
453+
454+
- name: Build and push
455+
id: docker_build
456+
run: |
457+
docker buildx build -f ./docker/Dockerfile.env . -t opendilab/ding:nightly-d4rl --target=d4rl
458+
docker push opendilab/ding:nightly-d4rl

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ local.properties
124124

125125
# Graphics Interchange Format
126126
*.gif
127+
*.mp4
128+
*.mpg
127129

128130
# RAW
129131
*.raw
@@ -1425,4 +1427,4 @@ collect_demo_data_config.py
14251427
!ding/**/*.py
14261428
events.*
14271429

1428-
evogym/*
1430+
evogym/*

CHANGELOG

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
2023.02.16(v0.4.6)
2+
- env: add metadrive env and related ppo config (#574)
3+
- env: add acrobot env and related dqn config (#577)
4+
- env: add carracing in box2d (#575)
5+
- env: add new gym hybrid viz (#563)
6+
- env: update cartpole IL config (#578)
7+
- algo: add BDQ algorithm (#558)
8+
- algo: add procedure cloning model (#573)
9+
- feature: add simplified PPOF (PPO × Family) interface (#567) (#568) (#581) (#582)
10+
- fix: to_device and prev_state bug when using ttorch (#571)
11+
- fix: py38 and numpy unittest bugs (#565)
12+
- fix: typo in contrastive_loss.py (#572)
13+
- fix: dizoo envs pkg installation bugs
14+
- fix: multi_trainer middleware unittest bug
15+
- style: add evogym docker (#580)
16+
- style: fix metaworld docker bug
17+
- style: fix setuptools high version incompatibility bug
18+
- style: extend treetensor lowest version
19+
120
2022.12.13(v0.4.5)
221
- env: add beergame supply chain optimization env (#512)
322
- env: add env gym_pybullet_drones (#526)

README.md

Lines changed: 174 additions & 58 deletions
Large diffs are not rendered by default.

conda/meta.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% set data = load_setup_py_data() %}
22
package:
33
name: di-engine
4-
version: v0.4.5
4+
version: v0.4.6
55

66
source:
77
path: ..

ding/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22

33
__TITLE__ = 'DI-engine'
4-
__VERSION__ = 'v0.4.5'
4+
__VERSION__ = 'v0.4.6'
55
__DESCRIPTION__ = 'Decision AI Engine'
66
__AUTHOR__ = "OpenDILab Contributors"
77
__AUTHOR_EMAIL__ = "opendilab@pjlab.org.cn"

ding/bonus/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .ppof import PPOF

ding/bonus/config.py

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
from easydict import EasyDict
2+
import os
3+
import gym
4+
from ding.envs import BaseEnv, DingEnvWrapper
5+
from ding.envs.env_wrappers import MaxAndSkipWrapper, WarpFrameWrapper, ScaledFloatFrameWrapper, FrameStackWrapper, \
6+
EvalEpisodeReturnEnv, TransposeWrapper, TimeLimitWrapper, FlatObsWrapper, GymToGymnasiumWrapper
7+
from ding.policy import PPOFPolicy
8+
9+
10+
def get_instance_config(env: str) -> EasyDict:
11+
cfg = PPOFPolicy.default_config()
12+
if env == 'lunarlander_discrete':
13+
cfg.n_sample = 400
14+
elif env == 'lunarlander_continuous':
15+
cfg.action_space = 'continuous'
16+
cfg.n_sample = 400
17+
elif env == 'bipedalwalker':
18+
cfg.learning_rate = 1e-3
19+
cfg.action_space = 'continuous'
20+
cfg.n_sample = 1024
21+
elif env == 'acrobot':
22+
cfg.learning_rate = 1e-4
23+
cfg.n_sample = 400
24+
elif env == 'rocket_landing':
25+
cfg.n_sample = 2048
26+
cfg.adv_norm = False
27+
cfg.model = dict(
28+
encoder_hidden_size_list=[64, 64, 128],
29+
actor_head_hidden_size=128,
30+
critic_head_hidden_size=128,
31+
)
32+
elif env == 'drone_fly':
33+
cfg.action_space = 'continuous'
34+
cfg.adv_norm = False
35+
cfg.epoch_per_collect = 5
36+
cfg.learning_rate = 5e-5
37+
cfg.n_sample = 640
38+
elif env == 'hybrid_moving':
39+
cfg.action_space = 'hybrid'
40+
cfg.n_sample = 3200
41+
cfg.entropy_weight = 0.03
42+
cfg.batch_size = 320
43+
cfg.adv_norm = False
44+
cfg.model = dict(
45+
encoder_hidden_size_list=[256, 128, 64, 64],
46+
sigma_type='fixed',
47+
fixed_sigma_value=0.3,
48+
bound_type='tanh',
49+
)
50+
elif env == 'evogym_carrier':
51+
cfg.action_space = 'continuous'
52+
cfg.n_sample = 2048
53+
cfg.batch_size = 256
54+
cfg.epoch_per_collect = 10
55+
cfg.learning_rate = 3e-3
56+
elif env == 'mario':
57+
cfg.n_sample = 256
58+
cfg.batch_size = 64
59+
cfg.epoch_per_collect = 2
60+
cfg.learning_rate = 1e-3
61+
cfg.model = dict(
62+
encoder_hidden_size_list=[64, 64, 128],
63+
critic_head_hidden_size=128,
64+
actor_head_hidden_size=128,
65+
)
66+
elif env == 'di_sheep':
67+
cfg.n_sample = 3200
68+
cfg.batch_size = 320
69+
cfg.epoch_per_collect = 10
70+
cfg.learning_rate = 3e-4
71+
cfg.adv_norm = False
72+
cfg.entropy_weight = 0.001
73+
elif env == 'procgen_bigfish':
74+
cfg.n_sample = 16384
75+
cfg.batch_size = 16384
76+
cfg.epoch_per_collect = 10
77+
cfg.learning_rate = 5e-4
78+
cfg.model = dict(
79+
encoder_hidden_size_list=[64, 128, 256],
80+
critic_head_hidden_size=256,
81+
actor_head_hidden_size=256,
82+
)
83+
elif env in ['atari_qbert', 'atari_kangaroo', 'atari_bowling']:
84+
cfg.n_sample = 1024
85+
cfg.batch_size = 128
86+
cfg.epoch_per_collect = 10
87+
cfg.learning_rate = 0.0001
88+
cfg.model = dict(
89+
encoder_hidden_size_list=[32, 64, 64, 128],
90+
actor_head_hidden_size=128,
91+
critic_head_hidden_size=128,
92+
critic_head_layer_num=2,
93+
)
94+
elif env == 'minigrid_fourroom':
95+
cfg.n_sample = 3200
96+
cfg.batch_size = 320
97+
cfg.learning_rate = 3e-4
98+
cfg.epoch_per_collect = 10
99+
cfg.entropy_weight = 0.001
100+
elif env == 'metadrive':
101+
cfg.learning_rate = 3e-4
102+
cfg.action_space = 'continuous'
103+
cfg.entropy_weight = 0.001
104+
cfg.n_sample = 3000
105+
cfg.epoch_per_collect = 10
106+
cfg.learning_rate = 0.0001
107+
cfg.model = dict(
108+
encoder_hidden_size_list=[32, 64, 64, 128],
109+
actor_head_hidden_size=128,
110+
critic_head_hidden_size=128,
111+
critic_head_layer_num=2,
112+
)
113+
else:
114+
raise KeyError("not supported env type: {}".format(env))
115+
return cfg
116+
117+
118+
def get_instance_env(env: str) -> BaseEnv:
119+
if env == 'lunarlander_discrete':
120+
return DingEnvWrapper(gym.make('LunarLander-v2'))
121+
elif env == 'lunarlander_continuous':
122+
return DingEnvWrapper(gym.make('LunarLander-v2', continuous=True))
123+
elif env == 'bipedalwalker':
124+
return DingEnvWrapper(gym.make('BipedalWalker-v3'), cfg={'act_scale': True})
125+
elif env == 'acrobot':
126+
return DingEnvWrapper(gym.make('Acrobot-v1'))
127+
elif env == 'rocket_landing':
128+
from dizoo.rocket.envs import RocketEnv
129+
cfg = EasyDict({
130+
'task': 'landing',
131+
'max_steps': 800,
132+
})
133+
return RocketEnv(cfg)
134+
elif env == 'drone_fly':
135+
from dizoo.gym_pybullet_drones.envs import GymPybulletDronesEnv
136+
cfg = EasyDict({
137+
'env_id': 'flythrugate-aviary-v0',
138+
'action_type': 'VEL',
139+
})
140+
return GymPybulletDronesEnv(cfg)
141+
elif env == 'hybrid_moving':
142+
import gym_hybrid
143+
return DingEnvWrapper(gym.make('Moving-v0'))
144+
elif env == 'evogym_carrier':
145+
import evogym.envs
146+
from evogym import sample_robot, WorldObject
147+
path = os.path.join(os.path.dirname(__file__), '../../dizoo/evogym/envs/world_data/carry_bot.json')
148+
robot_object = WorldObject.from_json(path)
149+
body = robot_object.get_structure()
150+
return DingEnvWrapper(
151+
gym.make('Carrier-v0', body=body),
152+
cfg={
153+
'env_wrapper': [
154+
lambda env: TimeLimitWrapper(env, max_limit=300),
155+
lambda env: EvalEpisodeReturnEnv(env),
156+
]
157+
}
158+
)
159+
elif env == 'mario':
160+
import gym_super_mario_bros
161+
from nes_py.wrappers import JoypadSpace
162+
return DingEnvWrapper(
163+
JoypadSpace(gym_super_mario_bros.make("SuperMarioBros-1-1-v1"), [["right"], ["right", "A"]]),
164+
cfg={
165+
'env_wrapper': [
166+
lambda env: MaxAndSkipWrapper(env, skip=4),
167+
lambda env: WarpFrameWrapper(env, size=84),
168+
lambda env: ScaledFloatFrameWrapper(env),
169+
lambda env: FrameStackWrapper(env, n_frames=4),
170+
lambda env: TimeLimitWrapper(env, max_limit=200),
171+
lambda env: EvalEpisodeReturnEnv(env),
172+
]
173+
}
174+
)
175+
elif env == 'di_sheep':
176+
from sheep_env import SheepEnv
177+
return DingEnvWrapper(SheepEnv(level=9))
178+
elif env == 'procgen_bigfish':
179+
return DingEnvWrapper(
180+
gym.make('procgen:procgen-bigfish-v0', start_level=0, num_levels=1),
181+
cfg={
182+
'env_wrapper': [
183+
lambda env: TransposeWrapper(env),
184+
lambda env: ScaledFloatFrameWrapper(env),
185+
lambda env: EvalEpisodeReturnEnv(env),
186+
]
187+
},
188+
seed_api=False,
189+
)
190+
elif env in ['atari_qbert', 'atari_kangaroo', 'atari_bowling']:
191+
from dizoo.atari.envs.atari_env import AtariEnv
192+
atari_env_list = {
193+
'atari_qbert': 'QbertNoFrameskip-v4',
194+
'atari_kangaroo': 'KangarooNoFrameskip-v4',
195+
'atari_bowling': 'BowlingNoFrameskip-v4'
196+
}
197+
cfg = EasyDict({
198+
'env_id': atari_env_list[env],
199+
'env_wrapper': 'atari_default',
200+
})
201+
ding_env_atari = DingEnvWrapper(gym.make(atari_env_list[env]), cfg=cfg)
202+
ding_env_atari.enable_save_replay(env + '_log/')
203+
return ding_env_atari
204+
elif env == 'minigrid_fourroom':
205+
import gymnasium
206+
return DingEnvWrapper(
207+
gymnasium.make('MiniGrid-FourRooms-v0'),
208+
cfg={
209+
'env_wrapper': [
210+
lambda env: GymToGymnasiumWrapper(env),
211+
lambda env: FlatObsWrapper(env),
212+
lambda env: TimeLimitWrapper(env, max_limit=300),
213+
lambda env: EvalEpisodeReturnEnv(env),
214+
]
215+
}
216+
)
217+
elif env == 'metadrive':
218+
from dizoo.metadrive.env.drive_env import MetaDrivePPOOriginEnv
219+
from dizoo.metadrive.env.drive_wrapper import DriveEnvWrapper
220+
cfg = dict(
221+
map='XSOS',
222+
horizon=4000,
223+
out_of_road_penalty=40.0,
224+
crash_vehicle_penalty=40.0,
225+
out_of_route_done=True,
226+
)
227+
cfg = EasyDict(cfg)
228+
return DriveEnvWrapper(MetaDrivePPOOriginEnv(cfg))
229+
else:
230+
raise KeyError("not supported env type: {}".format(env))
231+
232+
233+
def get_hybrid_shape(action_space) -> EasyDict:
234+
return EasyDict({
235+
'action_type_shape': action_space[0].n,
236+
'action_args_shape': action_space[1].shape,
237+
})

0 commit comments

Comments
 (0)