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

[Versioning] v0.5 bump #2267

Merged
merged 29 commits into from
Jul 10, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge remote-tracking branch 'origin/main' into version-0.5
# Conflicts:
#	.github/workflows/wheels.yml
  • Loading branch information
vmoens committed Jul 9, 2024
commit 53645959143ed9781e3d22c33995ae63a5b260da
47 changes: 47 additions & 0 deletions .github/workflows/build-wheels-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Build Linux Wheels

on:
pull_request:
push:
branches:
- nightly
- main
- release/*
tags:
# NOTE: Binary build pipelines should only get triggered on release candidate builds
# Release candidate tags look like: v1.11.0-rc1
- v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+
workflow_dispatch:

permissions:
id-token: write
contents: read

jobs:
generate-matrix:
uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@main
with:
package-type: wheel
os: linux
test-infra-repository: pytorch/test-infra
test-infra-ref: main
build:
needs: generate-matrix
strategy:
fail-fast: false
matrix:
include:
- repository: pytorch/rl
smoke-test-script: test/smoke_test.py
package-name: torchrl
name: pytorch/rl
uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@main
with:
repository: ${{ matrix.repository }}
ref: ""
test-infra-repository: pytorch/test-infra
test-infra-ref: main
build-matrix: ${{ needs.generate-matrix.outputs.matrix }}
package-name: ${{ matrix.package-name }}
smoke-test-script: ${{ matrix.smoke-test-script }}
trigger-event: ${{ github.event_name }}
48 changes: 48 additions & 0 deletions .github/workflows/build-wheels-windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Build Windows Wheels

on:
pull_request:
push:
branches:
- nightly
- main
- release/*
tags:
# NOTE: Binary build pipelines should only get triggered on release candidate builds
# Release candidate tags look like: v1.11.0-rc1
- v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+
workflow_dispatch:

permissions:
id-token: write
contents: read

jobs:
generate-matrix:
uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@main
with:
package-type: wheel
os: windows
test-infra-repository: pytorch/test-infra
test-infra-ref: main
build:
needs: generate-matrix
strategy:
fail-fast: false
matrix:
include:
- repository: pytorch/rl
post-script: "python packaging/wheel/relocate.py"
smoke-test-script: test/smoke_test.py
package-name: torchrl
name: pytorch/rl
uses: pytorch/test-infra/.github/workflows/build_wheels_windows.yml@main
with:
repository: ${{ matrix.repository }}
ref: ""
test-infra-repository: pytorch/test-infra
test-infra-ref: main
build-matrix: ${{ needs.generate-matrix.outputs.matrix }}
package-name: ${{ matrix.package-name }}
smoke-test-script: ${{ matrix.smoke-test-script }}
trigger-event: ${{ github.event_name }}
193 changes: 0 additions & 193 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
@@ -1,193 +0,0 @@
name: Wheels
on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches:
- release/*

concurrency:
# Documentation suggests ${{ github.head_ref }}, but that's only available on pull_request/pull_request_target triggers, so using ${{ github.ref }}.
# On master, we want all builds to complete even if merging happens faster to make it easier to discover at which point something broke.
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && format('ci-master-{0}', github.sha) || format('ci-{0}', github.ref) }}
cancel-in-progress: true

jobs:

build-wheel-linux:
runs-on: ubuntu-20.04
strategy:
matrix:
python_version: [["3.8", "cp38-cp38"], ["3.9", "cp39-cp39"], ["3.10", "cp310-cp310"], ["3.11", "cp311-cp311"]]
cuda_support: [["", "--index-url https://download.pytorch.org/whl/cpu", "\"['cpu', '11.3', '11.6']\"", "cpu"]]
container: pytorch/manylinux-${{ matrix.cuda_support[3] }}
steps:
- name: Checkout torchrl
uses: actions/checkout@v2
- name: Install PyTorch RC
run: |
export PATH="/opt/python/${{ matrix.python_version[1] }}/bin:$PATH"
python3 -mpip install torch ${{ matrix.cuda_support[1] }}
- name: Build wheel
run: |
export PATH="/opt/python/${{ matrix.python_version[1] }}/bin:$PATH"
python3 -mpip install wheel
TORCHRL_BUILD_VERSION=0.5.0 python3 setup.py bdist_wheel
# NB: wheels have the linux_x86_64 tag so we rename to manylinux1
# find . -name 'dist/*whl' -exec bash -c ' mv $0 ${0/linux/manylinux1}' {} \;
# pytorch/pytorch binaries are also manylinux_2_17 compliant but they
# pretend that they're manylinux1 compliant so we do the same.
- name: Show auditwheel output; confirm 2-17
run: |
python3 -mpip install auditwheel
auditwheel show dist/*
- name: Upload wheel for the test-wheel job
uses: actions/upload-artifact@v2
with:
name: torchrl-linux-${{ matrix.python_version[0] }}.whl
path: dist/torchrl-*.whl
- name: Upload wheel for download
uses: actions/upload-artifact@v2
with:
name: torchrl-batch.whl
path: dist/*.whl

build-wheel-windows:
runs-on: windows-latest
strategy:
matrix:
python_version: [["3.8", "3.8"], ["3.9", "3.9"], ["3.10", "3.10.3"], ["3.11", "3.11"]]
steps:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version[1] }}
- name: Checkout torchrl
uses: actions/checkout@v2
- name: Install PyTorch RC
shell: bash
run: |
python3 -mpip install torch --index-url https://download.pytorch.org/whl/cpu
- name: Build wheel
shell: bash
run: |
python3 -mpip install wheel
TORCHRL_BUILD_VERSION=0.5.0 python3 setup.py bdist_wheel
- name: Upload wheel for the test-wheel job
uses: actions/upload-artifact@v2
with:
name: torchrl-win-${{ matrix.python_version[0] }}.whl
path: dist/torchrl-*.whl
- name: Upload wheel for download
uses: actions/upload-artifact@v2
with:
name: torchrl-batch.whl
path: dist/*.whl


test-wheel:
needs: [build-wheel-linux]
strategy:
matrix:
os: [["linux", "ubuntu-20.04"]]
python_version: [ "3.8", "3.9", "3.10", "3.11" ]
runs-on: ${{ matrix.os[1] }}
steps:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version }}
architecture: x64
- name: Checkout torchrl
uses: actions/checkout@v2
- name: Install PyTorch RC
run: |
python3 -mpip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
- name: Upgrade pip
run: |
python3 -mpip install --upgrade pip
- name: Install tensordict
run: |
python3 -mpip install git+https://github.com/pytorch/tensordict.git
- name: Install test dependencies
run: |
python3 -mpip install numpy pytest pytest-cov codecov unittest-xml-reporting pillow>=4.1.1 scipy av networkx expecttest pyyaml
- name: Download built wheels
uses: actions/download-artifact@v2
with:
name: torchrl-${{ matrix.os[0] }}-${{ matrix.python_version }}.whl
path: /tmp/wheels
- name: Install built wheels
run: |
python3 -mpip install /tmp/wheels/*
- name: Log version string
run: |
# Avoid ambiguity of "import torchrl" by deleting the source files.
rm -rf torchrl/
python -c "import torchrl; print(torchrl.__version__)"
- name: Run tests
run: |
set -e
export IN_CI=1
mkdir test-reports
python -m torch.utils.collect_env
python -c "import torchrl; print(torchrl.__version__)"
EXIT_STATUS=0
pytest test/smoke_test.py -v --durations 200
exit $EXIT_STATUS

test-wheel-windows:
needs: build-wheel-windows
strategy:
matrix:
python_version: [ "3.8", "3.9", "3.10", "3.11" ]
runs-on: windows-latest
steps:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python_version }}
- name: Checkout torchrl
uses: actions/checkout@v2
- name: Install PyTorch RC
shell: bash
run: |
python3 -mpip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
- name: Upgrade pip
shell: bash
run: |
python3 -mpip install --upgrade pip
- name: Install tensordict
shell: bash
run: |
python3 -mpip install git+https://github.com/pytorch/tensordict.git
- name: Install test dependencies
shell: bash
run: |
python3 -mpip install numpy pytest pytest-cov codecov unittest-xml-reporting pillow>=4.1.1 scipy av networkx expecttest pyyaml
- name: Download built wheels
uses: actions/download-artifact@v2
with:
name: torchrl-win-${{ matrix.python_version }}.whl
path: wheels
- name: Install built wheels
shell: bash
run: |
python3 -mpip install wheels/*
- name: Log version string
shell: bash
run: |
# Avoid ambiguity of "import torchrl" by deleting the source files.
rm -rf torchrl/
python -c "import torchrl; print(torchrl.__version__)"
- name: Run tests
shell: bash
run: |
set -e
export IN_CI=1
mkdir test-reports
python -m torch.utils.collect_env
python -c "import torchrl; print(torchrl.__version__)"
EXIT_STATUS=0
pytest test/smoke_test.py -v --durations 200
exit $EXIT_STATUS
2 changes: 1 addition & 1 deletion docs/source/_static/js/theme.js
Original file line number Diff line number Diff line change
Expand Up @@ -946,7 +946,7 @@ if (downloadNote.length >= 1) {
tutorialUrlArray[0] = tutorialUrlArray[0] + "/sphinx-tutorials"

var githubLink = "https://github.com/pytorch/rl/blob/main/" + tutorialUrlArray.join("/") + ".py",
notebookLink = $(".reference.download")[1].href,
notebookLink = $(".sphx-glr-download-jupyter").find(".download.reference")[0].href,
notebookDownloadPath = notebookLink.split('_downloads')[1],
colabLink = "https://colab.research.google.com/github/pytorch/rl/blob/gh-pages/main/_downloads" + notebookDownloadPath;

Expand Down
2 changes: 1 addition & 1 deletion docs/source/_static/js/torchrl_theme.js
Original file line number Diff line number Diff line change
Expand Up @@ -945,7 +945,7 @@ if (downloadNote.length >= 1) {
var tutorialUrlArray = $("#tutorial-type").text().split('/');

var githubLink = "https://github.com/pytorch/rl/tree/tutorial_py_dup/sphinx-tutorials/" + tutorialUrlArray[tutorialUrlArray.length - 1] + ".py",
notebookLink = $(".reference.download")[1].href,
notebookLink = $(".sphx-glr-download-jupyter").find(".download.reference")[0].href,
notebookDownloadPath = notebookLink.split('_downloads')[1],
colabLink = "https://colab.research.google.com/github/pytorch/rl/blob/gh-pages/_downloads" + notebookDownloadPath;

Expand Down
2 changes: 1 addition & 1 deletion docs/source/_templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
if (downloadNote.length >= 1) {
var tutorialUrl = $("#tutorial-type").text();
var githubLink = "https://github.com/pytorch/rl/blob/main/tutorials/sphinx-tutorials/" + tutorialUrl + ".py",
notebookLink = $(".reference.download")[1].href,
notebookLink = $(".sphx-glr-download-jupyter").find(".download.reference")[0].href,
notebookDownloadPath = notebookLink.split('_downloads')[1],
colabLink = "https://colab.research.google.com/github/pytorch/rl/blob/gh-pages/main/_downloads" + notebookDownloadPath;

Expand Down
2 changes: 2 additions & 0 deletions docs/source/reference/knowledge_base.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
Knowledge Base
==============

.. _ref_knowledge_base:

.. include:: ../../../knowledge_base/README.md
:start-line: 1
:parser: myst_parser.sphinx_
Expand Down
58 changes: 58 additions & 0 deletions knowledge_base/VIDEO_CUSTOMISATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Customising Video Renders

## Tweaking Video Rendering Settings
TorchRL relies heavily on the [torchvision.io](https://pytorch.org/vision/main/io.html)
and [PyAV](https://github.com/PyAV-Org/PyAV) modules for its video logging
capabilities. Though these libraries are quite convenient and powerful, it is
not easy to access the variety of knobs and settings at your disposal.

This guide hopes to clarify what appear to be the general principles behind
customising video rendering, and show you how you can manually adjust your
rollouts' rendering settings to your liking.

## General Principles
Ultimately, [torchvision.io](https://pytorch.org/vision/main/io.html) and
[PyAV](https://github.com/PyAV-Org/PyAV) make calls to [FFmpeg](https://ffmpeg.org/)
libraries in order to render videos.

In other words:

- Whatever can be fed into [FFmpeg](https://ffmpeg.org/), we can also feed
into TorchRL's `Loggers`.
- For any custom settings we wish to use, we must reference them from
[FFmpeg's documentation](https://trac.ffmpeg.org/)

## Video Rendering Customization Example

Suppose the following snippet gave us extremely blurry videos, even though
we provided it clear, frame-by-frame images to stitch together:
```python
from torchrl.envs import GymEnv, TransformedEnv
from torchrl.record import CSVLogger, VideoRecorder

logger = CSVLogger(exp_name="my_exp")
env = GymEnv("CartPole-v1", from_pixels=True, pixels_only=False)

recorder = VideoRecorder(logger, tag="my_video")
record_env = TransformedEnv(env, recorder)
rollout = record_env.rollout(max_steps=3)
recorder.dump()
```

Since TorchRL's default video codec is [H264](https://trac.ffmpeg.org/wiki/Encode/H.264),
the settings that we must change should be in there.

For the purposes of this example, let us choose a
[Constant Rate Factor (CRF)](https://trac.ffmpeg.org/wiki/Encode/H.264#crf) of
`17` and a [preset](https://trac.ffmpeg.org/wiki/Encode/H.264#Preset) of `slow`,
as advised by the documentation.

We can improve the video quality by appending all our desired settings
(as keyword arguments) to `recorder` like so:
```python
# The arguments' types don't appear to matter too much, as long as they are
# appropriate for Python.
# For example, this would work as well:
# logger = CSVLogger(exp_name="my_exp", crf=17, preset="slow")
logger = CSVLogger(exp_name="my_exp", crf="17", preset="slow")
```
Loading
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.