Skip to content

Commit 5e1833f

Browse files
authored
Merge branch 'main' into patch-1
2 parents ab10ae5 + 0e530ea commit 5e1833f

File tree

85 files changed

+2379
-191
lines changed

Some content is hidden

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

85 files changed

+2379
-191
lines changed

.ci/docker/build.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ IMAGE_NAME="$1"
1111
shift
1212

1313
export UBUNTU_VERSION="20.04"
14+
export CUDA_VERSION="12.4.1"
1415

15-
export BASE_IMAGE="ubuntu:${UBUNTU_VERSION}"
16+
export BASE_IMAGE="nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}"
1617
echo "Building ${IMAGE_NAME} Docker image"
1718

1819
docker build \

.ci/docker/common/common_utils.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ conda_run() {
2222
}
2323

2424
pip_install() {
25-
as_ci_user conda run -n py_$ANACONDA_PYTHON_VERSION pip install --progress-bar off $*
25+
as_ci_user conda run -n py_$ANACONDA_PYTHON_VERSION pip3 install --progress-bar off $*
2626
}

.ci/docker/requirements.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ tqdm==4.66.1
1313
numpy==1.24.4
1414
matplotlib
1515
librosa
16-
torch==2.3
16+
torch==2.4
1717
torchvision
1818
torchtext
1919
torchdata
@@ -28,10 +28,10 @@ tensorboard
2828
jinja2==3.1.3
2929
pytorch-lightning
3030
torchx
31-
torchrl==0.3.0
32-
tensordict==0.3.0
33-
ax-platform
34-
nbformat>==5.9.2
31+
torchrl==0.5.0
32+
tensordict==0.5.0
33+
ax-platform>=0.4.0
34+
nbformat>=5.9.2
3535
datasets
3636
transformers
3737
torchmultimodal-nightly # needs to be updated to stable as soon as it's avaialable
@@ -64,7 +64,7 @@ pyopengl
6464
gymnasium[mujoco]==0.27.0
6565
timm
6666
iopath
67-
pygame==2.1.2
67+
pygame==2.6.0
6868
pycocotools
6969
semilearn==0.3.2
7070
torchao==0.0.3

.jenkins/build.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ sudo apt-get install -y pandoc
2121

2222
#Install PyTorch Nightly for test.
2323
# Nightly - pip install --pre torch torchvision torchaudio -f https://download.pytorch.org/whl/nightly/cu102/torch_nightly.html
24-
# Install 2.2 for testing - uncomment to install nightly binaries (update the version as needed).
24+
# Install 2.4 to merge all 2.4 PRs - uncomment to install nightly binaries (update the version as needed).
2525
# pip uninstall -y torch torchvision torchaudio torchtext torchdata
26-
# pip3 install torch==2.3.0 torchvision torchaudio --no-cache-dir --index-url https://download.pytorch.org/whl/test/cu121
26+
# pip3 install torch==2.4.0 torchvision torchaudio --no-cache-dir --index-url https://download.pytorch.org/whl/test/cu124
2727

2828
# Install two language tokenizers for Translation with TorchText tutorial
2929
python -m spacy download en_core_web_sm

.jenkins/metadata.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
"intermediate_source/model_parallel_tutorial.py": {
2929
"needs": "linux.16xlarge.nvidia.gpu"
3030
},
31+
"recipes_source/torch_export_aoti_python.py": {
32+
"needs": "linux.g5.4xlarge.nvidia.gpu"
33+
},
3134
"advanced_source/pendulum.py": {
3235
"needs": "linux.g5.4xlarge.nvidia.gpu",
3336
"_comment": "need to be here for the compiling_optimizer_lr_scheduler.py to run."

.jenkins/validate_tutorials_built.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
"intermediate_source/fx_conv_bn_fuser",
3030
"intermediate_source/_torch_export_nightly_tutorial", # does not work on release
3131
"advanced_source/super_resolution_with_onnxruntime",
32-
"advanced_source/python_custom_ops", # https://github.com/pytorch/pytorch/issues/127443
3332
"advanced_source/usb_semisup_learn", # fails with CUDA OOM error, should try on a different worker
3433
"prototype_source/fx_graph_mode_ptq_dynamic",
3534
"prototype_source/vmap_recipe",
@@ -54,8 +53,6 @@
5453
"intermediate_source/flask_rest_api_tutorial",
5554
"intermediate_source/text_to_speech_with_torchaudio",
5655
"intermediate_source/tensorboard_profiler_tutorial", # reenable after 2.0 release.
57-
"intermediate_source/inductor_debug_cpu", # reenable after 2942
58-
"beginner_source/onnx/onnx_registry_tutorial", # reenable after 2941 is fixed.
5956
"intermediate_source/torch_export_tutorial" # reenable after 2940 is fixed.
6057
]
6158

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ We use sphinx-gallery's [notebook styled examples](https://sphinx-gallery.github
2222

2323
Here is how you can create a new tutorial (for a detailed description, see [CONTRIBUTING.md](./CONTRIBUTING.md)):
2424

25+
NOTE: Before submitting a new tutorial, read [PyTorch Tutorial Submission Policy](./tutorial_submission_policy.md).
26+
2527
1. Create a Python file. If you want it executed while inserted into documentation, save the file with the suffix `tutorial` so that the file name is `your_tutorial.py`.
2628
2. Put it in one of the `beginner_source`, `intermediate_source`, `advanced_source` directory based on the level of difficulty. If it is a recipe, add it to `recipes_source`. For tutorials demonstrating unstable prototype features, add to the `prototype_source`.
2729
3. For Tutorials (except if it is a prototype feature), include it in the `toctree` directive and create a `customcarditem` in [index.rst](./index.rst).
@@ -31,7 +33,7 @@ If you are starting off with a Jupyter notebook, you can use [this script](https
3133

3234
## Building locally
3335

34-
The tutorial build is very large and requires a GPU. If your machine does not have a GPU device, you can preview your HTML build without actually downloading the data and running the tutorial code:
36+
The tutorial build is very large and requires a GPU. If your machine does not have a GPU device, you can preview your HTML build without actually downloading the data and running the tutorial code:
3537

3638
1. Install required dependencies by running: `pip install -r requirements.txt`.
3739

@@ -40,8 +42,6 @@ The tutorial build is very large and requires a GPU. If your machine does not ha
4042
- If you have a GPU-powered laptop, you can build using `make docs`. This will download the data, execute the tutorials and build the documentation to `docs/` directory. This might take about 60-120 min for systems with GPUs. If you do not have a GPU installed on your system, then see next step.
4143
- You can skip the computationally intensive graph generation by running `make html-noplot` to build basic html documentation to `_build/html`. This way, you can quickly preview your tutorial.
4244

43-
> If you get **ModuleNotFoundError: No module named 'pytorch_sphinx_theme' make: *** [html-noplot] Error 2** from /tutorials/src/pytorch-sphinx-theme or /venv/src/pytorch-sphinx-theme (while using virtualenv), run `python setup.py install`.
44-
4545
## Building a single tutorial
4646

4747
You can build a single tutorial by using the `GALLERY_PATTERN` environment variable. For example to run only `neural_style_transfer_tutorial.py`, run:
@@ -59,8 +59,8 @@ The `GALLERY_PATTERN` variable respects regular expressions.
5959

6060

6161
## About contributing to PyTorch Documentation and Tutorials
62-
* You can find information about contributing to PyTorch documentation in the
63-
PyTorch Repo [README.md](https://github.com/pytorch/pytorch/blob/master/README.md) file.
62+
* You can find information about contributing to PyTorch documentation in the
63+
PyTorch Repo [README.md](https://github.com/pytorch/pytorch/blob/master/README.md) file.
6464
* Additional information can be found in [PyTorch CONTRIBUTING.md](https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md).
6565

6666

_static/css/custom.css

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,24 @@
9191
transition: none;
9292
transform-origin: none;
9393
}
94+
95+
.pytorch-left-menu-search input[type=text] {
96+
background-image: none;
97+
}
98+
99+
.gsc-control-cse {
100+
padding-left: 0px !important;
101+
padding-bottom: 0px !important;
102+
}
103+
104+
.gsc-search-button .gsc-search-button-v2:focus {
105+
border: transparent !important;
106+
outline: none;
107+
box-shadow: none;
108+
}
109+
.gsc-search-button-v2:active {
110+
border: none !important;
111+
}
112+
.gsc-search-button-v2 {
113+
border: none !important;
114+
}
Loading
423 KB
Loading
3.52 KB
Loading
-22.1 KB
Binary file not shown.
19 KB
Loading

_static/img/pinmem/pinmem.png

72 KB
Loading
81.2 KB
Loading
81.4 KB
Loading
85.4 KB
Loading
90.6 KB
Loading

_templates/layout.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,23 @@
1111
</script>
1212
{%- endblock %}
1313

14+
{% block sidebartitle %}
15+
{% if theme_display_version %}
16+
{%- set nav_version = version %}
17+
{% if READTHEDOCS and current_version %}
18+
{%- set nav_version = current_version %}
19+
{% endif %}
20+
{% if nav_version %}
21+
<div class="version">
22+
{{ nav_version }}
23+
</div>
24+
{% endif %}
25+
{% endif %}
26+
<div class="searchbox">
27+
<script async src="https://cse.google.com/cse.js?cx=e65585f8c3ea1440e"></script>
28+
<div class="gcse-search"></div>
29+
</div>
30+
{% endblock %}
1431

1532
{% block footer %}
1633
{{ super() }}

advanced_source/coding_ddpg.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@
182182
# Later, we will see how the target parameters should be updated in TorchRL.
183183
#
184184

185-
from tensordict.nn import TensorDictModule
185+
from tensordict.nn import TensorDictModule, TensorDictSequential
186186

187187

188188
def _init(
@@ -290,12 +290,11 @@ def _loss_actor(
290290
) -> torch.Tensor:
291291
td_copy = tensordict.select(*self.actor_in_keys)
292292
# Get an action from the actor network: since we made it functional, we need to pass the params
293-
td_copy = self.actor_network(td_copy, params=self.actor_network_params)
293+
with self.actor_network_params.to_module(self.actor_network):
294+
td_copy = self.actor_network(td_copy)
294295
# get the value associated with that action
295-
td_copy = self.value_network(
296-
td_copy,
297-
params=self.value_network_params.detach(),
298-
)
296+
with self.value_network_params.detach().to_module(self.value_network):
297+
td_copy = self.value_network(td_copy)
299298
return -td_copy.get("state_action_value")
300299

301300

@@ -317,7 +316,8 @@ def _loss_value(
317316
td_copy = tensordict.clone()
318317

319318
# V(s, a)
320-
self.value_network(td_copy, params=self.value_network_params)
319+
with self.value_network_params.to_module(self.value_network):
320+
self.value_network(td_copy)
321321
pred_val = td_copy.get("state_action_value").squeeze(-1)
322322

323323
# we manually reconstruct the parameters of the actor-critic, where the first
@@ -332,9 +332,8 @@ def _loss_value(
332332
batch_size=self.target_actor_network_params.batch_size,
333333
device=self.target_actor_network_params.device,
334334
)
335-
target_value = self.value_estimator.value_estimate(
336-
tensordict, target_params=target_params
337-
).squeeze(-1)
335+
with target_params.to_module(self.actor_critic):
336+
target_value = self.value_estimator.value_estimate(tensordict).squeeze(-1)
338337

339338
# Computes the value loss: L2, L1 or smooth L1 depending on `self.loss_function`
340339
loss_value = distance_loss(pred_val, target_value, loss_function=self.loss_function)
@@ -717,7 +716,7 @@ def get_env_stats():
717716
ActorCriticWrapper,
718717
DdpgMlpActor,
719718
DdpgMlpQNet,
720-
OrnsteinUhlenbeckProcessWrapper,
719+
OrnsteinUhlenbeckProcessModule,
721720
ProbabilisticActor,
722721
TanhDelta,
723722
ValueOperator,
@@ -776,15 +775,18 @@ def make_ddpg_actor(
776775
# Exploration
777776
# ~~~~~~~~~~~
778777
#
779-
# The policy is wrapped in a :class:`~torchrl.modules.OrnsteinUhlenbeckProcessWrapper`
778+
# The policy is passed into a :class:`~torchrl.modules.OrnsteinUhlenbeckProcessModule`
780779
# exploration module, as suggested in the original paper.
781780
# Let's define the number of frames before OU noise reaches its minimum value
782781
annealing_frames = 1_000_000
783782

784-
actor_model_explore = OrnsteinUhlenbeckProcessWrapper(
783+
actor_model_explore = TensorDictSequential(
785784
actor,
786-
annealing_num_steps=annealing_frames,
787-
).to(device)
785+
OrnsteinUhlenbeckProcessModule(
786+
spec=actor.spec.clone(),
787+
annealing_num_steps=annealing_frames,
788+
).to(device),
789+
)
788790
if device == torch.device("cpu"):
789791
actor_model_explore.share_memory()
790792

@@ -1168,7 +1170,7 @@ def ceil_div(x, y):
11681170
)
11691171

11701172
# update the exploration strategy
1171-
actor_model_explore.step(current_frames)
1173+
actor_model_explore[1].step(current_frames)
11721174

11731175
collector.shutdown()
11741176
del collector

advanced_source/cpp_custom_ops.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ To add ``torch.compile`` support for an operator, we must add a FakeTensor kerne
174174
known as a "meta kernel" or "abstract impl"). FakeTensors are Tensors that have
175175
metadata (such as shape, dtype, device) but no data: the FakeTensor kernel for an
176176
operator specifies how to compute the metadata of output tensors given the metadata of input tensors.
177+
The FakeTensor kernel should return dummy Tensors of your choice with
178+
the correct Tensor metadata (shape/strides/``dtype``/device).
177179

178180
We recommend that this be done from Python via the `torch.library.register_fake` API,
179181
though it is possible to do this from C++ as well (see
@@ -417,4 +419,4 @@ Conclusion
417419
In this tutorial, we went over the recommended approach to integrating Custom C++
418420
and CUDA operators with PyTorch. The ``TORCH_LIBRARY/torch.library`` APIs are fairly
419421
low-level. For more information about how to use the API, see
420-
`The Custom Operators Manual <https://pytorch.org/docs/main/notes/custom_operators.html>`_.
422+
`The Custom Operators Manual <https://pytorch.org/tutorials/advanced/custom_ops_landing_page.html#the-custom-operators-manual>`_.

advanced_source/cpp_extension.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ Custom C++ and CUDA Extensions
22
==============================
33
**Author**: `Peter Goldsborough <https://www.goldsborough.me/>`_
44

5+
.. warning::
6+
7+
This tutorial is deprecated as of PyTorch 2.4. Please see :ref:`custom-ops-landing-page`
8+
for the newest up-to-date guides on extending PyTorch with Custom C++/CUDA Extensions.
59

610
PyTorch provides a plethora of operations related to neural networks, arbitrary
711
tensor algebra, data wrangling and other purposes. However, you may still find
@@ -225,7 +229,7 @@ Instead of:
225229
Currently open issue for nvcc bug `here
226230
<https://github.com/pytorch/pytorch/issues/69460>`_.
227231
Complete workaround code example `here
228-
<https://github.com/facebookresearch/pytorch3d/commit/cb170ac024a949f1f9614ffe6af1c38d972f7d48>`_.
232+
<https://github.com/facebookresearch/pytorch3d/commit/cb170ac024a949f1f9614ffe6af1c38d972f7d48>`_.
229233

230234
Forward Pass
231235
************

advanced_source/custom_ops_landing_page.rst

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.. _custom-ops-landing-page:
22

3-
PyTorch Custom Operators Landing Page
4-
=====================================
3+
PyTorch Custom Operators
4+
===========================
55

66
PyTorch offers a large library of operators that work on Tensors (e.g. ``torch.add``,
77
``torch.sum``, etc). However, you may wish to bring a new custom operation to PyTorch
@@ -10,26 +10,27 @@ In order to do so, you must register the custom operation with PyTorch via the P
1010
`torch.library docs <https://pytorch.org/docs/stable/library.html>`_ or C++ ``TORCH_LIBRARY``
1111
APIs.
1212

13-
TL;DR
14-
-----
13+
1514

1615
Authoring a custom operator from Python
1716
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1817

1918
Please see :ref:`python-custom-ops-tutorial`.
2019

2120
You may wish to author a custom operator from Python (as opposed to C++) if:
21+
2222
- you have a Python function you want PyTorch to treat as an opaque callable, especially with
23-
respect to ``torch.compile`` and ``torch.export``.
23+
respect to ``torch.compile`` and ``torch.export``.
2424
- you have some Python bindings to C++/CUDA kernels and want those to compose with PyTorch
25-
subsystems (like ``torch.compile`` or ``torch.autograd``)
25+
subsystems (like ``torch.compile`` or ``torch.autograd``)
2626

2727
Integrating custom C++ and/or CUDA code with PyTorch
2828
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2929

3030
Please see :ref:`cpp-custom-ops-tutorial`.
3131

3232
You may wish to author a custom operator from C++ (as opposed to Python) if:
33+
3334
- you have custom C++ and/or CUDA code.
3435
- you plan to use this code with ``AOTInductor`` to do Python-less inference.
3536

advanced_source/dispatcher.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
Registering a Dispatched Operator in C++
22
========================================
33

4+
.. warning::
5+
6+
This tutorial is deprecated as of PyTorch 2.4. Please see :ref:`custom-ops-landing-page`
7+
for the newest up-to-date guides on extending PyTorch with Custom Operators.
8+
49
The dispatcher is an internal component of PyTorch which is responsible for
510
figuring out what code should actually get run when you call a function like
611
``torch::add``. This can be nontrivial, because PyTorch operations need

advanced_source/dynamic_quantization_tutorial.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ def tokenize(self, path):
151151
model.load_state_dict(
152152
torch.load(
153153
model_data_filepath + 'word_language_model_quantize.pth',
154-
map_location=torch.device('cpu')
154+
map_location=torch.device('cpu'),
155+
weights_only=True
155156
)
156157
)
157158

0 commit comments

Comments
 (0)