From 04b405479510f4dc5510f8fecc0683570fb6616e Mon Sep 17 00:00:00 2001 From: TerryCE <100383566+TerryCE@users.noreply.github.com> Date: Wed, 9 Mar 2022 08:10:11 -0800 Subject: [PATCH 1/7] Create 2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md Creation of Blog #1 - Core Blog + TorchData + functorch With Sidebar --- ...rchdata-and-functorch-are-now-available.md | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 _posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md diff --git a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md new file mode 100644 index 000000000000..5093b2abc737 --- /dev/null +++ b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md @@ -0,0 +1,110 @@ +--- +layout: blog_detail +title: "PyTorch 1.11, TorchData, and functorch are now available" +author: Team PyTorch +featured-img: "" +--- + +We are excited to announce the release of PyTorch 1.11 ([release notes](https://github.com/pytorch/pytorch/releases/tag/v1.11.0)). This release is composed of over 3,300 commits since 1.10, made by 434 contributors. Along with 1.11, we are releasing beta versions of TorchData and functorch. We want to sincerely thank our community for continuously improving PyTorch. + +Summary: + +* **TorchData** is a new library for common modular data loading primitives for easily constructing flexible and performant data pipelines. [View it on GitHub](https://github.com/pytorch/data). +* **functorch**, a library that adds composable function transforms to PyTorch, is now available in beta. +* Distributed Data Parallel (DDP) static graph optimizations available in stable. + +### Introducing TorchData + +We are delighted to present the Beta release of [TorchData](https://github.com/pytorch/data). This is a library of common modular data loading primitives for easily constructing flexible and performant data pipelines. Based on community feedback, we have found that the existing DataLoader bundled too many features together and can be difficult to extend. Moreover, different use cases often have to rewrite the same data loading utilities over and over again. The goal here is to enable composable data loading through Iterable-style and Map-style building blocks called “[DataPipes](https://github.com/pytorch/data#what-are-datapipes)” that work well out of the box with the [PyTorch’s `DataLoader`](https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader). + +A `DataPipe` takes in some access function over Python data structures, `__iter__` for `IterDataPipe` and `__getitem__` for `MapDataPipe`, and returns a new access function with a slight transformation applied. You can chain multiple DataPipes together to form a data pipeline that performs all the necessary data transformation. + +We have implemented over 50 DataPipes that provide different core functionalities, such as opening files, parsing texts, transforming samples, caching, shuffling, and batching. For users who are interested in connecting to cloud providers (such as Google Drive or AWS S3), the [fsspec](https://pytorch.org/data/0.3.0/torchdata.datapipes.iter.html#io-datapipes) and iopath DataPipes will allow you to do so. The documentation provides detailed explanations and usage examples of each `[IterDataPipe](https://pytorch.org/data/0.3.0/torchdata.datapipes.iter.html)` and `[MapDataPipe](https://pytorch.org/data/0.3.0/torchdata.datapipes.map.html)`. + +In this release, some of the PyTorch domain libraries have migrated their datasets to use DataPipes. In TorchText, the [popular datasets provided by the library](https://github.com/pytorch/text/tree/release/0.12/torchtext/datasets) are implemented using DataPipes and a [section of its SST-2 binary text classification tutorial](https://pytorch.org/text/0.12.0/tutorials/sst2_classification_non_distributed.html#dataset) demonstrates how you can use DataPipes to preprocess data for your model. There also are other prototype implementations of datasets with DataPipes in [TorchVision (available in nightly releases)](https://github.com/pytorch/vision/tree/main/torchvision/prototype/datasets/_builtin) and in [TorchRec](https://pytorch.org/torchrec/torchrec.datasets.html). You can find more [specific examples here](https://pytorch.org/data/0.3.0/examples.html). + +The d[ocumentation for TorchData](https://pytorch.org/data) is now live. It contains a tutorial that covers [how to use DataPipes](https://pytorch.org/data/0.3.0/tutorial.html#using-datapipes), [use them with DataLoader](https://pytorch.org/data/0.3.0/tutorial.html#working-with-dataloader), and [implement custom ones](https://pytorch.org/data/0.3.0/tutorial.html#implementing-a-custom-datapipe). FAQs and future plans related to DataLoader are described in [our project’s README file](https://github.com/pytorch/data#readme). + +### functorch now in beta + +We’re excited to announce the first beta release of [functorch](https://github.com/pytorch/functorch). Heavily inspired by [Google JAX](https://github.com/google/jax), functorch is a library that adds composable function transforms to PyTorch. It aims to provide composable vmap (vectorization) and autodiff transforms that work with PyTorch modules and PyTorch autograd with good eager-mode performance. + +Composable function transforms can help with a number of use cases that are tricky to do in PyTorch today: + +* computing per-sample-gradients (or other per-sample quantities) +* running ensembles of models on a single machine +* efficiently batching together tasks in the inner-loop of MAML +* efficiently computing Jacobians and Hessians as well as batched ones + +Composing vmap (vectorization), vjp (reverse-mode AD), and jvp (forward-mode AD) transforms allows us to effortlessly express the above without designing a separate library for each. + +For more details, please see our [documentation](https://pytorch.org/functorch/), [tutorials](https://pytorch.org/functorch), and [installation instructions](https://pytorch.org/functorch/stable/install.html). + +### Distributed Training + +## (Stable) DDP static graph + +DDP static graph assumes that your model employs the same set of used/unused parameters in every iteration, so that it can deterministically know states like which hooks will fire, how many times the hooks will fire and gradients computation ready order after the first iteration. Static graph caches these states in the first iteration, and thus it could support features that DDP can not support in previous releases, e.g., support multiple activation checkpoints on the same parameters regardless of whether there are unused parameters or not. The static graph feature also applies performance optimizations when there are unused parameters, e.g., it avoids traversing graphs to search unused parameters every iteration, and enables dynamic bucketing order. These optimizations in the DDP static graph brought 10% QPS gain for some recommendation models. + +To enable static graph, just simply set static_graph=True in the DDP API like this: + +``` +ddp_model = DistributedDataParallel(model, static_graph=True) +``` + +For more details, please see our [documentation](https://pytorch.org/docs/master/generated/torch.nn.parallel.DistributedDataParallel.html) and [tutorials](https://pytorch.org/tutorials/intermediate/ddp_tutorial.html). + +Thanks for reading, If you’re interested in these updates and want to join the PyTorch community, we encourage you to join the [discussion forums](https://discuss.pytorch.org/) and [open GitHub issues](https://github.com/pytorch/pytorch/issues). To get the latest news from PyTorch, follow us on [Twitter](https://twitter.com/PyTorch), [Medium](https://medium.com/pytorch), [YouTube](https://www.youtube.com/pytorch), and [LinkedIn](https://www.linkedin.com/company/pytorch). + +Cheers! + +Team PyTorch + + +
+
+ +
+
+ From 08ab3a9992c085bd8999159ed456e0d24bccad61 Mon Sep 17 00:00:00 2001 From: TerryCE <100383566+TerryCE@users.noreply.github.com> Date: Wed, 9 Mar 2022 09:08:21 -0800 Subject: [PATCH 2/7] Update 2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md Fixes to links. Update to sidebar. Update to headers. --- ...rchdata-and-functorch-are-now-available.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md index 5093b2abc737..199557a00bd6 100644 --- a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md +++ b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md @@ -10,22 +10,22 @@ We are excited to announce the release of PyTorch 1.11 ([release notes](https:// Summary: * **TorchData** is a new library for common modular data loading primitives for easily constructing flexible and performant data pipelines. [View it on GitHub](https://github.com/pytorch/data). -* **functorch**, a library that adds composable function transforms to PyTorch, is now available in beta. +* **functorch**, a library that adds composable function transforms to PyTorch, is now available in beta. [View it on GitHub](https://github.com/pytorch/functorch) * Distributed Data Parallel (DDP) static graph optimizations available in stable. -### Introducing TorchData +## Introducing TorchData -We are delighted to present the Beta release of [TorchData](https://github.com/pytorch/data). This is a library of common modular data loading primitives for easily constructing flexible and performant data pipelines. Based on community feedback, we have found that the existing DataLoader bundled too many features together and can be difficult to extend. Moreover, different use cases often have to rewrite the same data loading utilities over and over again. The goal here is to enable composable data loading through Iterable-style and Map-style building blocks called “[DataPipes](https://github.com/pytorch/data#what-are-datapipes)” that work well out of the box with the [PyTorch’s `DataLoader`](https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader). +We are delighted to present the Beta release of [TorchData](https://github.com/pytorch/data). This is a library of common modular data loading primitives for easily constructing flexible and performant data pipelines. Based on community feedback, we have found that the existing DataLoader bundled too many features together and can be difficult to extend. Moreover, different use cases often have to rewrite the same data loading utilities over and over again. The goal here is to enable composable data loading through Iterable-style and Map-style building blocks called “[DataPipes](https://github.com/pytorch/data#what-are-datapipes)” that work well out of the box with the [PyTorch’s DataLoader](https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader). A `DataPipe` takes in some access function over Python data structures, `__iter__` for `IterDataPipe` and `__getitem__` for `MapDataPipe`, and returns a new access function with a slight transformation applied. You can chain multiple DataPipes together to form a data pipeline that performs all the necessary data transformation. -We have implemented over 50 DataPipes that provide different core functionalities, such as opening files, parsing texts, transforming samples, caching, shuffling, and batching. For users who are interested in connecting to cloud providers (such as Google Drive or AWS S3), the [fsspec](https://pytorch.org/data/0.3.0/torchdata.datapipes.iter.html#io-datapipes) and iopath DataPipes will allow you to do so. The documentation provides detailed explanations and usage examples of each `[IterDataPipe](https://pytorch.org/data/0.3.0/torchdata.datapipes.iter.html)` and `[MapDataPipe](https://pytorch.org/data/0.3.0/torchdata.datapipes.map.html)`. +We have implemented over 50 DataPipes that provide different core functionalities, such as opening files, parsing texts, transforming samples, caching, shuffling, and batching. For users who are interested in connecting to cloud providers (such as Google Drive or AWS S3), the [fsspec](https://pytorch.org/data/0.3.0/torchdata.datapipes.iter.html#io-datapipes) and iopath DataPipes will allow you to do so. The documentation provides detailed explanations and usage examples of each [IterDataPipe](https://pytorch.org/data/0.3.0/torchdata.datapipes.iter.html) and [MapDataPipe](https://pytorch.org/data/0.3.0/torchdata.datapipes.map.html). In this release, some of the PyTorch domain libraries have migrated their datasets to use DataPipes. In TorchText, the [popular datasets provided by the library](https://github.com/pytorch/text/tree/release/0.12/torchtext/datasets) are implemented using DataPipes and a [section of its SST-2 binary text classification tutorial](https://pytorch.org/text/0.12.0/tutorials/sst2_classification_non_distributed.html#dataset) demonstrates how you can use DataPipes to preprocess data for your model. There also are other prototype implementations of datasets with DataPipes in [TorchVision (available in nightly releases)](https://github.com/pytorch/vision/tree/main/torchvision/prototype/datasets/_builtin) and in [TorchRec](https://pytorch.org/torchrec/torchrec.datasets.html). You can find more [specific examples here](https://pytorch.org/data/0.3.0/examples.html). The d[ocumentation for TorchData](https://pytorch.org/data) is now live. It contains a tutorial that covers [how to use DataPipes](https://pytorch.org/data/0.3.0/tutorial.html#using-datapipes), [use them with DataLoader](https://pytorch.org/data/0.3.0/tutorial.html#working-with-dataloader), and [implement custom ones](https://pytorch.org/data/0.3.0/tutorial.html#implementing-a-custom-datapipe). FAQs and future plans related to DataLoader are described in [our project’s README file](https://github.com/pytorch/data#readme). -### functorch now in beta +## Introducing functorch We’re excited to announce the first beta release of [functorch](https://github.com/pytorch/functorch). Heavily inspired by [Google JAX](https://github.com/google/jax), functorch is a library that adds composable function transforms to PyTorch. It aims to provide composable vmap (vectorization) and autodiff transforms that work with PyTorch modules and PyTorch autograd with good eager-mode performance. @@ -40,9 +40,9 @@ Composing vmap (vectorization), vjp (reverse-mode AD), and jvp (forward-mode AD) For more details, please see our [documentation](https://pytorch.org/functorch/), [tutorials](https://pytorch.org/functorch), and [installation instructions](https://pytorch.org/functorch/stable/install.html). -### Distributed Training +## Distributed Training -## (Stable) DDP static graph +### (Stable) DDP static graph DDP static graph assumes that your model employs the same set of used/unused parameters in every iteration, so that it can deterministically know states like which hooks will fire, how many times the hooks will fire and gradients computation ready order after the first iteration. Static graph caches these states in the first iteration, and thus it could support features that DDP can not support in previous releases, e.g., support multiple activation checkpoints on the same parameters regardless of whether there are unused parameters or not. The static graph feature also applies performance optimizations when there are unused parameters, e.g., it avoids traversing graphs to search unused parameters every iteration, and enables dynamic bucketing order. These optimizations in the DDP static graph brought 10% QPS gain for some recommendation models. @@ -73,10 +73,10 @@ Team PyTorch
  • Distributed Training -
  • -
  • - (Stable) DDP static graph -
  • + + From fd3a34542b2b00898889b4144843c13185a408a0 Mon Sep 17 00:00:00 2001 From: TerryCE <100383566+TerryCE@users.noreply.github.com> Date: Wed, 9 Mar 2022 10:58:04 -0800 Subject: [PATCH 3/7] Update 2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md Change to sidebar link --- ...-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md index 199557a00bd6..6c12f9997a2e 100644 --- a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md +++ b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md @@ -69,7 +69,7 @@ Team PyTorch Introducing TorchData
  • - functorch now in beta + Introducing functorch
  • Distributed Training From a1a6b8d34056c82aeb312a4050aba14ca4530f24 Mon Sep 17 00:00:00 2001 From: TerryCE <100383566+TerryCE@users.noreply.github.com> Date: Wed, 9 Mar 2022 11:16:58 -0800 Subject: [PATCH 4/7] Update 2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md Fixed typo -sidebar --- ...-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md index 6c12f9997a2e..393274afbe52 100644 --- a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md +++ b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md @@ -69,7 +69,7 @@ Team PyTorch Introducing TorchData
  • - Introducing functorch + Introducing functorch
  • Distributed Training From 4945add74368507920dd5ff24a631343944f2a25 Mon Sep 17 00:00:00 2001 From: TerryCE <100383566+TerryCE@users.noreply.github.com> Date: Wed, 9 Mar 2022 15:09:48 -0800 Subject: [PATCH 5/7] Add files via upload --- assets/images/pytorch-logo.jpg | Bin 0 -> 22676 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/images/pytorch-logo.jpg diff --git a/assets/images/pytorch-logo.jpg b/assets/images/pytorch-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02fb6a0049457e90e378fd89a9aab281cbe5a2fa GIT binary patch literal 22676 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 LG#vnc_16E{uaS@* literal 0 HcmV?d00001 From 760229d2c57351ee36a7d9b02f59e5b7b760a6a3 Mon Sep 17 00:00:00 2001 From: TerryCE <100383566+TerryCE@users.noreply.github.com> Date: Wed, 9 Mar 2022 15:15:28 -0800 Subject: [PATCH 6/7] Update 2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md --- ...rchdata-and-functorch-are-now-available.md | 57 ++----------------- 1 file changed, 4 insertions(+), 53 deletions(-) diff --git a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md index 393274afbe52..3da56acac66e 100644 --- a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md +++ b/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md @@ -2,15 +2,15 @@ layout: blog_detail title: "PyTorch 1.11, TorchData, and functorch are now available" author: Team PyTorch -featured-img: "" +featured-img: "assets/images/pytorch-logo.jpg" --- -We are excited to announce the release of PyTorch 1.11 ([release notes](https://github.com/pytorch/pytorch/releases/tag/v1.11.0)). This release is composed of over 3,300 commits since 1.10, made by 434 contributors. Along with 1.11, we are releasing beta versions of TorchData and functorch. We want to sincerely thank our community for continuously improving PyTorch. +We are excited to announce the release of PyTorch 1.11 ([release notes](https://github.com/pytorch/pytorch/releases/tag/v1.11.0)). This release is composed of over 3,300 commits since 1.10, made by 434 contributors. Along with 1.11, we are releasing beta versions of TorchData and functorch. Summary: * **TorchData** is a new library for common modular data loading primitives for easily constructing flexible and performant data pipelines. [View it on GitHub](https://github.com/pytorch/data). -* **functorch**, a library that adds composable function transforms to PyTorch, is now available in beta. [View it on GitHub](https://github.com/pytorch/functorch) +* **functorch**, a library that adds composable function transforms to PyTorch, is now available in beta. [View it on GitHub](https://github.com/pytorch/functorch). * Distributed Data Parallel (DDP) static graph optimizations available in stable. ## Introducing TorchData @@ -23,7 +23,7 @@ We have implemented over 50 DataPipes that provide different core functionalitie In this release, some of the PyTorch domain libraries have migrated their datasets to use DataPipes. In TorchText, the [popular datasets provided by the library](https://github.com/pytorch/text/tree/release/0.12/torchtext/datasets) are implemented using DataPipes and a [section of its SST-2 binary text classification tutorial](https://pytorch.org/text/0.12.0/tutorials/sst2_classification_non_distributed.html#dataset) demonstrates how you can use DataPipes to preprocess data for your model. There also are other prototype implementations of datasets with DataPipes in [TorchVision (available in nightly releases)](https://github.com/pytorch/vision/tree/main/torchvision/prototype/datasets/_builtin) and in [TorchRec](https://pytorch.org/torchrec/torchrec.datasets.html). You can find more [specific examples here](https://pytorch.org/data/0.3.0/examples.html). -The d[ocumentation for TorchData](https://pytorch.org/data) is now live. It contains a tutorial that covers [how to use DataPipes](https://pytorch.org/data/0.3.0/tutorial.html#using-datapipes), [use them with DataLoader](https://pytorch.org/data/0.3.0/tutorial.html#working-with-dataloader), and [implement custom ones](https://pytorch.org/data/0.3.0/tutorial.html#implementing-a-custom-datapipe). FAQs and future plans related to DataLoader are described in [our project’s README file](https://github.com/pytorch/data#readme). +The [documentation for TorchData](https://pytorch.org/data) is now live. It contains a tutorial that covers [how to use DataPipes](https://pytorch.org/data/0.3.0/tutorial.html#using-datapipes), [use them with DataLoader](https://pytorch.org/data/0.3.0/tutorial.html#working-with-dataloader), and [implement custom ones](https://pytorch.org/data/0.3.0/tutorial.html#implementing-a-custom-datapipe). FAQs and future plans related to DataLoader are described in [our project’s README file](https://github.com/pytorch/data#readme). ## Introducing functorch @@ -59,52 +59,3 @@ Thanks for reading, If you’re interested in these updates and want to join the Cheers! Team PyTorch - - - - From 5b26cefd600f2ded574530237db019ee83ffd47a Mon Sep 17 00:00:00 2001 From: Rita Iglesias Date: Thu, 10 Mar 2022 12:06:47 -0300 Subject: [PATCH 7/7] Changing date for blog post --- ...-10-pytorch-1-11-torchdata-and-functorch-are-now-available.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _posts/{2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md => 2022-3-10-pytorch-1-11-torchdata-and-functorch-are-now-available.md} (100%) diff --git a/_posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md b/_posts/2022-3-10-pytorch-1-11-torchdata-and-functorch-are-now-available.md similarity index 100% rename from _posts/2022-3-8-pytorch-1-11-torchdata-and-functorch-are-now-available.md rename to _posts/2022-3-10-pytorch-1-11-torchdata-and-functorch-are-now-available.md