[RLlib] Retire try_import_tree (should be installed along with other requirements). (#9211)

- Retire try_import_tree.
- Stabilize test_supported_multi_agent.py.
This commit is contained in:
Sven Mika
2020-07-02 13:06:34 +02:00
committed by GitHub
parent c4ccbfdfa9
commit 5b2a97597b
18 changed files with 74 additions and 69 deletions
+15 -3
View File
@@ -366,6 +366,7 @@ py_test(
args = ["--yaml-dir=tuned_examples/ddpg", "--torch"]
)
# --------------------------------------------------------------------
# Agents (Compilation, Losses, simple agent functionality tests)
# rllib/agents/
@@ -1292,10 +1293,21 @@ py_test(
)
py_test(
name = "tests/test_supported_multi_agent",
name = "tests/test_supported_multi_agent_pg",
main = "tests/test_supported_multi_agent.py",
tags = ["tests_dir", "tests_dir_S"],
size = "large",
srcs = ["tests/test_supported_multi_agent.py"]
size = "medium",
srcs = ["tests/test_supported_multi_agent.py"],
args = ["TestSupportedMultiAgentPG"]
)
py_test(
name = "tests/test_supported_multi_agent_off_policy",
main = "tests/test_supported_multi_agent.py",
tags = ["tests_dir", "tests_dir_S"],
size = "medium",
srcs = ["tests/test_supported_multi_agent.py"],
args = ["TestSupportedMultiAgentOffPolicy"]
)
py_test(
+1 -2
View File
@@ -3,19 +3,18 @@
import gym
import numpy as np
import tree
import ray
import ray.experimental.tf_utils
from ray.rllib.models import ModelCatalog
from ray.rllib.policy.sample_batch import SampleBatch
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.filter import get_filter
from ray.rllib.utils.framework import try_import_tf
from ray.rllib.utils.spaces.space_utils import get_base_struct_from_space, \
unbatch
tf1, tf, tfv = try_import_tf()
tree = try_import_tree()
def rollout(policy, env, timestep_limit=None, add_noise=False, offset=0.0):
+1 -2
View File
@@ -3,12 +3,12 @@
import gym
import numpy as np
import tree
import ray
from ray.rllib.models import ModelCatalog
from ray.rllib.policy.sample_batch import SampleBatch
from ray.rllib.policy.torch_policy_template import build_torch_policy
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.filter import get_filter
from ray.rllib.utils.framework import try_import_torch
from ray.rllib.utils.spaces.space_utils import get_base_struct_from_space, \
@@ -16,7 +16,6 @@ from ray.rllib.utils.spaces.space_utils import get_base_struct_from_space, \
from ray.rllib.utils.torch_ops import convert_to_torch_tensor
torch, _ = try_import_torch()
tree = try_import_tree()
def before_init(policy, observation_space, action_space, config):
+1 -2
View File
@@ -1,6 +1,7 @@
from gym.spaces import Tuple, Discrete, Dict
import logging
import numpy as np
import tree
import ray
from ray.rllib.agents.qmix.mixers import VDNMixer, QMixer
@@ -13,13 +14,11 @@ from ray.rllib.policy.sample_batch import SampleBatch
from ray.rllib.models.catalog import ModelCatalog
from ray.rllib.models.modelv2 import _unpack_obs
from ray.rllib.env.constants import GROUP_REWARDS
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.framework import try_import_torch
from ray.rllib.utils.annotations import override
# Torch must be installed.
torch, nn = try_import_torch(error=True)
tree = try_import_tree()
logger = logging.getLogger(__name__)
-3
View File
@@ -5,7 +5,6 @@ from typing import List, Dict, Callable, Any, TYPE_CHECKING
from ray.rllib.env.base_env import _DUMMY_AGENT_ID
from ray.rllib.policy.policy import Policy
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.annotations import DeveloperAPI
from ray.rllib.utils.spaces.space_utils import flatten_to_single_ndarray
from ray.rllib.utils.types import SampleBatchType, AgentID, PolicyID, \
@@ -15,8 +14,6 @@ if TYPE_CHECKING:
from ray.rllib.evaluation.sample_batch_builder import \
MultiAgentSampleBatchBuilder
tree = try_import_tree()
@DeveloperAPI
class MultiAgentEpisode:
-3
View File
@@ -20,7 +20,6 @@ from ray.rllib.utils.filter import Filter
from ray.rllib.env.base_env import BaseEnv, ASYNC_RESET_RETURN
from ray.rllib.env.atari_wrappers import get_wrapper_by_cls, MonitorEnv
from ray.rllib.offline import InputReader
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.annotations import override, DeveloperAPI
from ray.rllib.utils.debug import summarize
from ray.rllib.utils.spaces.space_utils import flatten_to_single_ndarray, \
@@ -35,8 +34,6 @@ if TYPE_CHECKING:
from ray.rllib.evaluation.observation_function import ObservationFunction
from ray.rllib.evaluation.rollout_worker import RolloutWorker
tree = try_import_tree()
logger = logging.getLogger(__name__)
PolicyEvalData = namedtuple("PolicyEvalData", [
+1 -3
View File
@@ -1,12 +1,10 @@
import gym
from gym.spaces import Box, Dict, Discrete, Tuple
import numpy as np
import tree
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.spaces.space_utils import flatten_space
tree = try_import_tree()
class NestedSpaceRepeatAfterMeEnv(gym.Env):
"""Env for which policy has to repeat the (possibly complex) observation.
+1 -2
View File
@@ -2,6 +2,7 @@ from functools import partial
import gym
import logging
import numpy as np
import tree
from ray.tune.registry import RLLIB_MODEL, RLLIB_PREPROCESSOR, \
RLLIB_ACTION_DIST, _global_registry
@@ -19,7 +20,6 @@ from ray.rllib.models.tf.visionnet_v1 import VisionNetwork
from ray.rllib.models.torch.torch_action_dist import TorchCategorical, \
TorchDeterministic, TorchDiagGaussian, \
TorchMultiActionDistribution, TorchMultiCategorical
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.annotations import DeveloperAPI, PublicAPI
from ray.rllib.utils.deprecation import deprecation_warning, DEPRECATED_VALUE
from ray.rllib.utils.error import UnsupportedSpaceException
@@ -28,7 +28,6 @@ from ray.rllib.utils.spaces.simplex import Simplex
from ray.rllib.utils.spaces.space_utils import flatten_space
tf1, tf, tfv = try_import_tf()
tree = try_import_tree()
logger = logging.getLogger(__name__)
+14 -14
View File
@@ -49,18 +49,18 @@ class TestModules(unittest.TestCase):
if t % 10 == 1:
print(t, loss.item())
if t == 1:
init_loss = loss.item()
# if t == 0:
# init_loss = loss.item()
optimizer.zero_grad()
loss.backward()
optimizer.step()
final_loss = loss.item()
# final_loss = loss.item()
# The final loss has decreased, which tests
# that the model is learning from the training data.
self.assertLess(final_loss / init_loss, 0.99)
# self.assertLess(final_loss / init_loss, 0.99)
def train_torch_layer(self, model, inputs, outputs, num_epochs=250):
"""Convenience method that trains a Torch model for num_epochs epochs
@@ -133,8 +133,7 @@ class TestModules(unittest.TestCase):
for fw, sess in framework_iterator(
frameworks=("tfe", "torch", "tf"), session=True):
# Create a single attention layer with 2 heads
# Create a single attention layer with 2 heads.
if fw == "torch":
# Create random Tensors to hold inputs and outputs
@@ -146,8 +145,8 @@ class TestModules(unittest.TestCase):
self.train_torch_layer(model, x, y, num_epochs=500)
else: # framework is tensorflow or tensorflow-eager
# Framework is tensorflow or tensorflow-eager.
else:
x = np.random.random((B, L, D_in))
y = np.random.random((B, L, D_out))
@@ -161,8 +160,10 @@ class TestModules(unittest.TestCase):
self.train_tf_model(model, x, y)
def test_attention_net(self):
"""Tests the GTrXL. Builds a full AttentionNet and checks
that it trains in a supervised setting."""
"""Tests the GTrXL.
Builds a full AttentionNet and checks that it trains in a supervised
setting."""
# Checks that torch and tf embedding matrices are the same
with tf1.Session().as_default() as sess:
@@ -175,8 +176,7 @@ class TestModules(unittest.TestCase):
# D_in is attention dim, L is memory_tau
L, D_in, D_out = 2, 16, 2
for fw, sess in framework_iterator(
frameworks=("tfe", "torch", "tf"), session=True):
for fw, sess in framework_iterator(session=True):
# Create a single attention layer with 2 heads
if fw == "torch":
@@ -217,8 +217,8 @@ class TestModules(unittest.TestCase):
num_epochs=250,
state=init_state,
seq_lens=seq_lens_init)
else: # Framework is tensorflow or tensorflow-eager.
# Framework is tensorflow or tensorflow-eager.
else:
x = np.random.random((B, L, D_in))
y = np.random.random((B, L, D_out))
+1 -2
View File
@@ -2,6 +2,7 @@ from functools import partial
import numpy as np
from gym.spaces import Box, Dict, Tuple
from scipy.stats import beta, norm
import tree
import unittest
from ray.rllib.models.tf.tf_action_dist import Beta, Categorical, \
@@ -10,7 +11,6 @@ from ray.rllib.models.tf.tf_action_dist import Beta, Categorical, \
from ray.rllib.models.torch.torch_action_dist import TorchBeta, \
TorchCategorical, TorchDiagGaussian, TorchMultiActionDistribution, \
TorchMultiCategorical, TorchSquashedGaussian
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.framework import try_import_tf, try_import_torch
from ray.rllib.utils.numpy import MIN_LOG_NN_OUTPUT, MAX_LOG_NN_OUTPUT, \
softmax, SMALL_NUMBER, LARGE_INTEGER
@@ -18,7 +18,6 @@ from ray.rllib.utils.test_utils import check, framework_iterator
tf1, tf, tfv = try_import_tf()
torch, _ = try_import_torch()
tree = try_import_tree()
class TestDistributions(unittest.TestCase):
+2 -2
View File
@@ -1,17 +1,17 @@
from math import log
import numpy as np
import functools
import tree
from ray.rllib.models.action_dist import ActionDistribution
from ray.rllib.utils import MIN_LOG_NN_OUTPUT, MAX_LOG_NN_OUTPUT, \
SMALL_NUMBER, try_import_tree
SMALL_NUMBER
from ray.rllib.utils.annotations import override, DeveloperAPI
from ray.rllib.utils.framework import try_import_tf, try_import_tfp
from ray.rllib.utils.spaces.space_utils import get_base_struct_from_space
tf1, tf, tfv = try_import_tf()
tfp = try_import_tfp()
tree = try_import_tree()
@DeveloperAPI
+1 -2
View File
@@ -1,9 +1,9 @@
import functools
from math import log
import numpy as np
import tree
from ray.rllib.models.action_dist import ActionDistribution
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.annotations import override
from ray.rllib.utils.framework import try_import_torch
from ray.rllib.utils.numpy import SMALL_NUMBER, MIN_LOG_NN_OUTPUT, \
@@ -12,7 +12,6 @@ from ray.rllib.utils.spaces.space_utils import get_base_struct_from_space
from ray.rllib.utils.torch_ops import atanh
torch, nn = try_import_torch()
tree = try_import_tree()
class TorchDistributionWrapper(ActionDistribution):
+1 -2
View File
@@ -1,9 +1,9 @@
from abc import ABCMeta, abstractmethod
import gym
import numpy as np
import tree
from typing import Dict, List, Optional
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.annotations import DeveloperAPI
from ray.rllib.utils.exploration.exploration import Exploration
from ray.rllib.utils.framework import try_import_torch
@@ -13,7 +13,6 @@ from ray.rllib.utils.spaces.space_utils import get_base_struct_from_space, \
from ray.rllib.utils.types import AgentID
torch, _ = try_import_torch()
tree = try_import_tree()
# By convention, metrics from optimizing the loss can be reported in the
# `grad_info` dict returned by learn_on_batch() / compute_grads() via this key.
+32 -18
View File
@@ -25,7 +25,7 @@ def check_support_multiagent(alg, config):
a.stop()
class TestSupportedMultiAgent(unittest.TestCase):
class TestSupportedMultiAgentPG(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
ray.init(num_cpus=4)
@@ -42,6 +42,32 @@ class TestSupportedMultiAgent(unittest.TestCase):
}
})
def test_impala_multiagent(self):
check_support_multiagent("IMPALA", {"num_gpus": 0})
def test_pg_multiagent(self):
check_support_multiagent("PG", {"num_workers": 1, "optimizer": {}})
def test_ppo_multiagent(self):
check_support_multiagent(
"PPO", {
"num_workers": 1,
"num_sgd_iter": 1,
"train_batch_size": 10,
"rollout_fragment_length": 10,
"sgd_minibatch_size": 1,
})
class TestSupportedMultiAgentOffPolicy(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
ray.init(num_cpus=4)
@classmethod
def tearDownClass(cls) -> None:
ray.shutdown()
def test_apex_multiagent(self):
check_support_multiagent(
"APEX", {
@@ -82,22 +108,6 @@ class TestSupportedMultiAgent(unittest.TestCase):
"buffer_size": 1000,
})
def test_impala_multiagent(self):
check_support_multiagent("IMPALA", {"num_gpus": 0})
def test_pg_multiagent(self):
check_support_multiagent("PG", {"num_workers": 1, "optimizer": {}})
def test_ppo_multiagent(self):
check_support_multiagent(
"PPO", {
"num_workers": 1,
"num_sgd_iter": 1,
"train_batch_size": 10,
"rollout_fragment_length": 10,
"sgd_minibatch_size": 1,
})
def test_sac_multiagent(self):
check_support_multiagent("SAC", {
"num_workers": 0,
@@ -109,4 +119,8 @@ class TestSupportedMultiAgent(unittest.TestCase):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
# One can specify the specific TestCase class to run.
# None for all unittest.TestCase classes in this file.
class_ = sys.argv[1] if len(sys.argv) > 0 else None
sys.exit(pytest.main(
["-v", __file__ + ("" if class_ is None else "::" + class_)]))
-1
View File
@@ -91,7 +91,6 @@ __all__ = [
"try_import_tf",
"try_import_tfp",
"try_import_torch",
"try_import_tree",
"ConstantSchedule",
"DeveloperAPI",
"ExponentialSchedule",
@@ -1,8 +1,8 @@
import tree
from typing import Union
from ray.rllib.models.action_dist import ActionDistribution
from ray.rllib.models.modelv2 import ModelV2
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.annotations import override
from ray.rllib.utils.exploration.exploration import Exploration
from ray.rllib.utils.framework import try_import_tf, try_import_torch, \
@@ -10,7 +10,6 @@ from ray.rllib.utils.framework import try_import_tf, try_import_torch, \
tf1, tf, tfv = try_import_tf()
torch, _ = try_import_torch()
tree = try_import_tree()
class StochasticSampling(Exploration):
+1 -4
View File
@@ -1,9 +1,6 @@
from gym.spaces import Tuple, Dict
import numpy as np
from ray.rllib.utils import try_import_tree
tree = try_import_tree()
import tree
def flatten_space(space):
+1 -2
View File
@@ -1,11 +1,10 @@
import numpy as np
import tree
from ray.rllib.models.repeated_values import RepeatedValues
from ray.rllib.utils import try_import_tree
from ray.rllib.utils.framework import try_import_torch
torch, _ = try_import_torch()
tree = try_import_tree()
def explained_variance(y, pred):