Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Algorithm] Update TD3 Example #1523

Merged
merged 35 commits into from
Oct 3, 2023
Merged

[Algorithm] Update TD3 Example #1523

merged 35 commits into from
Oct 3, 2023

Conversation

BY571
Copy link
Contributor

@BY571 BY571 commented Sep 14, 2023

Description

Updated TD3 script similar to PPO Update, added time logging, more comments, cleaner structure, and fixes here and there. Running some tests right now to verify performance.
What do you think @vmoens, @albertbou92 @matteobettini, how could we improve the example further?

Motivation and Context

Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.
You can use the syntax close #15213 if this solves the issue #15213

  • I have raised an issue to propose this change (required for new features and bug fixes)

Types of changes

What types of changes does your code introduce? Remove all that do not apply:

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds core functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation (update in the documentation)
  • Example (update in the folder of examples)

Checklist

Go over all the following points, and put an x in all the boxes that apply.
If you are unsure about any of these, don't hesitate to ask. We are here to help!

  • I have read the CONTRIBUTION guide (required)
  • My change requires a change to the documentation.
  • I have updated the tests accordingly (required for a bug fix or a new feature).
  • I have updated the documentation accordingly.

@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Sep 14, 2023
@vmoens vmoens added the new algo New algorithm request or PR label Sep 14, 2023
@vmoens vmoens changed the title Update TD3 Example [Algorithm] Update TD3 Example Sep 14, 2023
Copy link
Contributor

@vmoens vmoens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Some minor comments

examples/td3/config.yaml Outdated Show resolved Hide resolved
examples/td3/config.yaml Outdated Show resolved Hide resolved
examples/td3/td3.py Outdated Show resolved Hide resolved
examples/td3/td3.py Show resolved Hide resolved
@BY571 BY571 marked this pull request as ready for review September 15, 2023 07:39
examples/td3/utils.py Outdated Show resolved Hide resolved
torchrl/objectives/td3.py Outdated Show resolved Hide resolved
@BY571 BY571 mentioned this pull request Sep 21, 2023
9 tasks
for i in loss_val:
assert i in loss_val_td.values(), f"{i} not in {loss_val_td.values()}"
# for i, key in enumerate(loss_val_td.keys()):
# torch.testing.assert_close(loss_val_td.get(key), loss_val[i])
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is dangerous as keys in the tensordict get ordered by name but output tuple loss_val doesn't. So for now im just checking if all values in the loss_val tuple are also in the loss_val_td.

# actor metadata
metadata = {
            "state_action_value_actor": state_action_value_actor.mean().detach(),
        }
# value metadata
        metadata = {
            "td_error": td_error,
            "next_state_value": next_target_qvalue.mean().detach(),
            "pred_value": current_qvalue.mean().detach(),
            "target_value": target_value.mean().detach(),
        }
# out tensordict
        td_out = TensorDict(
            source={
                "loss_actor": loss_actor,
                "loss_qvalue": loss_qval,
                **metadata_actor,
                **metadata_value,
            },
            batch_size=[],
        )

loss_vals will be in that order (loss_actor, loss_qvalue, state_action_value_actor, next_state_value, pred_value, target_value)
However, as the items are getting ordered in the TD by the keys the output tensordict has actually this order:
(loss_actor, loss_qvalue, next_state_value, pred_value, state_action_value_actor, target_value)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dispatch returns the keys in the order of out_keys.
So this is predictable, we can just do

            for i, key in enumerate(loss.out_keys):
                torch.testing.assert_close(loss_val_td.get(key), loss_val[i])

does that solve the problem?

Copy link
Contributor

@vmoens vmoens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM
let's wait for the tests to pass!

@vmoens vmoens merged commit df03cac into pytorch:main Oct 3, 2023
56 of 59 checks passed
vmoens pushed a commit to hyerra/rl that referenced this pull request Oct 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. new algo New algorithm request or PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants