From 165a86f1ab91c86828e55b3ca62030569e1c2c61 Mon Sep 17 00:00:00 2001 From: Sven Mika Date: Sun, 19 Apr 2020 10:20:23 +0200 Subject: [PATCH] [RLlib] SAC MuJoCo instability issues (tf and torch versions). (#8063) SAC (both torch and tf versions) are showing issues (crashes) due to numeric instabilities in the SquashedGaussian distribution (sampling + logp after extreme NN outputs). This PR fixes these. Stable MuJoCo learning (HalfCheetah) has been confirmed on both tf and torch versions. A Distribution stability test (using extreme NN outputs) has been added for SquashedGaussian (can be used for any other type of distribution as well). --- doc/source/rllib-training.rst | 2 +- .../ray/util/sgd/torch/examples/mnist_cnn.pt | Bin 0 -> 88700 bytes rllib/models/tests/test_distributions.py | 65 +++++++++++++++--- rllib/models/tf/tf_action_dist.py | 31 +++++---- rllib/models/torch/torch_action_dist.py | 29 +++++--- 5 files changed, 96 insertions(+), 31 deletions(-) create mode 100644 python/ray/util/sgd/torch/examples/mnist_cnn.pt diff --git a/doc/source/rllib-training.rst b/doc/source/rllib-training.rst index 7af13bb7c..1b7f13c41 100644 --- a/doc/source/rllib-training.rst +++ b/doc/source/rllib-training.rst @@ -99,7 +99,7 @@ Here are some rules of thumb for scaling training with RLlib. 3. If the model is compute intensive (e.g., a large deep residual network) and inference is the bottleneck, consider allocating GPUs to workers by setting ``num_gpus_per_worker: 1``. If you only have a single GPU, consider ``num_workers: 0`` to use the learner GPU for inference. For efficient use of GPU time, use a small number of GPU workers and a large number of `envs per worker `__. - + 4. Finally, if both model and environment are compute intensive, then enable `remote worker envs `__ with `async batching `__ by setting ``remote_worker_envs: True`` and optionally ``remote_env_batch_wait_ms``. This batches inference on GPUs in the rollout workers while letting envs run asynchronously in separate actors, similar to the `SEED `__ architecture. The number of workers and number of envs per worker should be tuned to maximize GPU utilization. If your env requires GPUs to function, or if multi-node SGD is needed, then also consider :ref:`DD-PPO `. Common Parameters diff --git a/python/ray/util/sgd/torch/examples/mnist_cnn.pt b/python/ray/util/sgd/torch/examples/mnist_cnn.pt new file mode 100644 index 0000000000000000000000000000000000000000..1c4364e16cd208b68c9bf1bfea49c10cf5ff541e GIT binary patch literal 88700 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 literal 0 HcmV?d00001 diff --git a/rllib/models/tests/test_distributions.py b/rllib/models/tests/test_distributions.py index ebd3525ac..ae7a1bdf4 100644 --- a/rllib/models/tests/test_distributions.py +++ b/rllib/models/tests/test_distributions.py @@ -9,7 +9,7 @@ from ray.rllib.models.torch.torch_action_dist import TorchMultiCategorical, \ TorchSquashedGaussian, TorchBeta from ray.rllib.utils import try_import_tf, try_import_torch from ray.rllib.utils.numpy import MIN_LOG_NN_OUTPUT, MAX_LOG_NN_OUTPUT, \ - softmax, SMALL_NUMBER + softmax, SMALL_NUMBER, LARGE_INTEGER from ray.rllib.utils.test_utils import check, framework_iterator tf = try_import_tf() @@ -19,6 +19,47 @@ torch, _ = try_import_torch() class TestDistributions(unittest.TestCase): """Tests ActionDistribution classes.""" + def _stability_test(self, + distribution_cls, + network_output_shape, + fw, + sess=None, + bounds=None): + extreme_values = [ + 0.0, + float(LARGE_INTEGER), + -float(LARGE_INTEGER), + 1.1e-34, + 1.1e34, + -1.1e-34, + -1.1e34, + SMALL_NUMBER, + -SMALL_NUMBER, + ] + inputs = np.zeros(shape=network_output_shape, dtype=np.float32) + for batch_item in range(network_output_shape[0]): + for num in range(len(inputs[batch_item])): + inputs[batch_item][num] = np.random.choice(extreme_values) + dist = distribution_cls(inputs, {}) + for _ in range(100): + sample = dist.sample() + if fw != "tf": + sample_check = sample.numpy() + else: + sample_check = sess.run(sample) + assert not np.any(np.isnan(sample_check)) + assert np.all(np.isfinite(sample_check)) + if bounds: + assert np.min(sample_check) >= bounds[0] + assert np.max(sample_check) <= bounds[1] + logp = dist.logp(sample) + if fw != "tf": + logp_check = logp.numpy() + else: + logp_check = sess.run(logp) + assert not np.any(np.isnan(logp_check)) + assert np.all(np.isfinite(logp_check)) + def test_categorical(self): """Tests the Categorical ActionDistribution (tf only).""" num_samples = 100000 @@ -103,9 +144,15 @@ class TestDistributions(unittest.TestCase): input_space = Box(-2.0, 2.0, shape=(200, 10)) low, high = -2.0, 1.0 - for fw, sess in framework_iterator(session=True): + for fw, sess in framework_iterator( + frameworks=("torch", "tf", "eager"), session=True): cls = SquashedGaussian if fw != "torch" else TorchSquashedGaussian + # Do a stability test using extreme NN outputs to see whether + # sampling and logp'ing result in NaN or +/-inf values. + self._stability_test( + cls, input_space.shape, fw=fw, sess=sess, bounds=(low, high)) + # Batch of size=n and deterministic. inputs = input_space.sample() means, _ = np.split(inputs, 2, axis=-1) @@ -125,8 +172,8 @@ class TestDistributions(unittest.TestCase): values = sess.run(values) else: values = values.numpy() - self.assertTrue(np.max(values) < high) - self.assertTrue(np.min(values) > low) + self.assertTrue(np.max(values) <= high) + self.assertTrue(np.min(values) >= low) check(np.mean(values), expected.mean(), decimals=1) @@ -143,11 +190,13 @@ class TestDistributions(unittest.TestCase): # Unsquash values, then get log-llh from regular gaussian. # atanh_in = np.clip((values - low) / (high - low) * 2.0 - 1.0, # -1.0 + SMALL_NUMBER, 1.0 - SMALL_NUMBER) - atanh_in = (values - low) / (high - low) * 2.0 - 1.0 - unsquashed_values = np.arctanh(atanh_in) + normed_values = (values - low) / (high - low) * 2.0 - 1.0 + save_normed_values = np.clip(normed_values, -1.0 + SMALL_NUMBER, + 1.0 - SMALL_NUMBER) + unsquashed_values = np.arctanh(save_normed_values) log_prob_unsquashed = np.sum( - np.log( - norm.pdf(unsquashed_values, means, stds) + SMALL_NUMBER), + np.log(norm.pdf(unsquashed_values, means, + stds)), -1) log_prob = log_prob_unsquashed - \ np.sum(np.log(1 - np.tanh(unsquashed_values) ** 2), diff --git a/rllib/models/tf/tf_action_dist.py b/rllib/models/tf/tf_action_dist.py index 16288aecc..818de8234 100644 --- a/rllib/models/tf/tf_action_dist.py +++ b/rllib/models/tf/tf_action_dist.py @@ -294,27 +294,34 @@ class SquashedGaussian(TFActionDistribution): @override(ActionDistribution) def logp(self, x): + # Unsquash values (from [low,high] to ]-inf,inf[) unsquashed_values = self._unsquash(x) - log_prob = tf.reduce_sum( - self.distr.log_prob(value=unsquashed_values), axis=-1) + # Get log prob of unsquashed values from our Normal. + log_prob_gaussian = self.distr.log_prob(unsquashed_values) + # For safety reasons, clamp somehow, only then sum up. + log_prob_gaussian = tf.clip_by_value(log_prob_gaussian, -100, 100) + log_prob_gaussian = tf.reduce_sum(log_prob_gaussian, axis=-1) + # Get log-prob for squashed Gaussian. unsquashed_values_tanhd = tf.math.tanh(unsquashed_values) - log_prob -= tf.math.reduce_sum( + log_prob = log_prob_gaussian - tf.reduce_sum( tf.math.log(1 - unsquashed_values_tanhd**2 + SMALL_NUMBER), axis=-1) return log_prob def _squash(self, raw_values): - # Make sure raw_values are not too high/low (such that tanh would - # return exactly 1.0/-1.0, which would lead to +/-inf log-probs). - return (tf.clip_by_value( - tf.math.tanh(raw_values), - -1.0 + SMALL_NUMBER, - 1.0 - SMALL_NUMBER) + 1.0) / 2.0 * (self.high - self.low) + \ - self.low + # Returned values are within [low, high] (including `low` and `high`). + squashed = ((tf.math.tanh(raw_values) + 1.0) / 2.0) * \ + (self.high - self.low) + self.low + return tf.clip_by_value(squashed, self.low, self.high) def _unsquash(self, values): - return tf.math.atanh((values - self.low) / - (self.high - self.low) * 2.0 - 1.0) + normed_values = (values - self.low) / (self.high - self.low) * 2.0 - \ + 1.0 + # Stabilize input to atanh. + save_normed_values = tf.clip_by_value( + normed_values, -1.0 + SMALL_NUMBER, 1.0 - SMALL_NUMBER) + unsquashed = tf.math.atanh(save_normed_values) + return unsquashed class Deterministic(TFActionDistribution): diff --git a/rllib/models/torch/torch_action_dist.py b/rllib/models/torch/torch_action_dist.py index a4210d695..3e1810e09 100644 --- a/rllib/models/torch/torch_action_dist.py +++ b/rllib/models/torch/torch_action_dist.py @@ -205,24 +205,33 @@ class TorchSquashedGaussian(TorchDistributionWrapper): @override(ActionDistribution) def logp(self, x): + # Unsquash values (from [low,high] to ]-inf,inf[) unsquashed_values = self._unsquash(x) - log_prob = torch.sum(self.dist.log_prob(unsquashed_values), dim=-1) + # Get log prob of unsquashed values from our Normal. + log_prob_gaussian = self.dist.log_prob(unsquashed_values) + # For safety reasons, clamp somehow, only then sum up. + log_prob_gaussian = torch.clamp(log_prob_gaussian, -100, 100) + log_prob_gaussian = torch.sum(log_prob_gaussian, dim=-1) + # Get log-prob for squashed Gaussian. unsquashed_values_tanhd = torch.tanh(unsquashed_values) - log_prob -= torch.sum( + log_prob = log_prob_gaussian - torch.sum( torch.log(1 - unsquashed_values_tanhd**2 + SMALL_NUMBER), dim=-1) return log_prob def _squash(self, raw_values): - # Make sure raw_values are not too high/low (such that tanh would - # return exactly 1.0/-1.0, which would lead to +/-inf log-probs). - return (torch.clamp( - torch.tanh(raw_values), - -1.0 + SMALL_NUMBER, - 1.0 - SMALL_NUMBER) + 1.0) / 2.0 * (self.high - self.low) + \ - self.low + # Returned values are within [low, high] (including `low` and `high`). + squashed = ((torch.tanh(raw_values) + 1.0) / 2.0) * \ + (self.high - self.low) + self.low + return torch.clamp(squashed, self.low, self.high) def _unsquash(self, values): - return atanh((values - self.low) / (self.high - self.low) * 2.0 - 1.0) + normed_values = (values - self.low) / (self.high - self.low) * 2.0 - \ + 1.0 + # Stabilize input to atanh. + save_normed_values = torch.clamp(normed_values, -1.0 + SMALL_NUMBER, + 1.0 - SMALL_NUMBER) + unsquashed = atanh(save_normed_values) + return unsquashed class TorchBeta(TorchDistributionWrapper):