{
  "source_file": "0930",
  "source_platform": "研究机构",
  "author": "PyTorch Tutorials",
  "title_listed": "PyTorch Tutorials（官方教程）",
  "keywords": "PyTorch,深度学习,教程",
  "domain": "机器学习",
  "content_type": "官方教程",
  "is_paid_flag": "否",
  "url": "https://pytorch.org/tutorials/",
  "publish_date": "持续更新",
  "corpus_stage": "机器学习",
  "notes": "PyTorch 官方教程",
  "id": "a414ee436a6f",
  "collected_at": "2026-10-02T16:14:04",
  "title": "Welcome to PyTorch Tutorials — PyTorch Tutorials 2.14.0+cu130 documentation",
  "body_markdown": "Welcome to PyTorch Tutorials\n#\nWhat’s new in PyTorch tutorials?\nData Loading Optimization in PyTorch\nDistributed Training with Ray Train\nServe PyTorch models at scale with Ray Serve\nHyperparameter tuning using Ray Tune\nMemory Profiling with Mosaic\nUsing Variable Length Attention in PyTorch\nDebugMode: Recording Dispatched Operations and Numerical Debugging\nLearn the Basics\nFamiliarize yourself with PyTorch concepts and modules. Learn how to load data, build deep neural networks, train and save your models in this quickstart guide.\nGet started with PyTorch\nPyTorch Recipes\nBite-size, ready-to-deploy PyTorch code examples.\nExplore Recipes\nLearn the Basics\nA step-by-step guide to building a complete ML workflow with PyTorch.\nGetting-Started\nIntroduction to PyTorch on YouTube\nAn introduction to building a complete ML workflow with PyTorch. Follows the PyTorch Beginner Series on YouTube.\nGetting-Started\nLearning PyTorch with Examples\nThis tutorial introduces the fundamental concepts of PyTorch through self-contained examples.\nGetting-Started\nWhat is torch.nn really?\nUse torch.nn to create and train a neural network.\nGetting-Started\nVisualizing Models, Data, and Training with TensorBoard\nLearn to use TensorBoard to visualize data and model training.\nInterpretability,Getting-Started,TensorBoard\nGood usage of `non_blocking` and `pin_memory()` in PyTorch\nA guide on best practices to copy data from CPU to GPU.\nGetting-Started\nData Loading Optimization in PyTorch\nOptimize DataLoader configuration with num_workers, pin_memory, persistent_workers for maximum training throughput.\nGetting-Started,Best-Practice\nUnderstanding requires_grad, retain_grad, Leaf, and Non-leaf Tensors\nLearn the subtleties of requires_grad, retain_grad, leaf, and non-leaf tensors\nGetting-Started\nVisualizing Gradients in PyTorch\nVisualize the gradient flow of a network.\nGetting-Started\nTorchVision Object Detection Finetuning Tutorial\nFinetune a pre-trained Mask R-CNN model.\nImage/Video\nTransfer Learning for Computer Vision Tutorial\nTrain a convolutional neural network for image classification using transfer learning.\nImage/Video\nAdversarial Example Generation\nTrain a convolutional neural network for image classification using transfer learning.\nImage/Video\nDCGAN Tutorial\nTrain a generative adversarial network (GAN) to generate new celebrities.\nImage/Video\nSpatial Transformer Networks Tutorial\nLearn how to augment your network using a visual attention mechanism.\nImage/Video\nSemi-Supervised Learning Tutorial Based on USB\nLearn how to train semi-supervised learning algorithms (on custom data) using USB and PyTorch.\nImage/Video\nDistributed Training with Ray Train\nPre-train a transformer language model across multiple GPUs using PyTorch and Ray Train.\nText,Best-Practice,Ray-Distributed,Parallel-and-Distributed-Training\nAudio IO\nLearn to load data with torchaudio.\nAudio\nAudio Resampling\nLearn to resample audio waveforms using torchaudio.\nAudio\nAudio Data Augmentation\nLearn to apply data augmentations using torchaudio.\nAudio\nAudio Feature Extractions\nLearn to extract features using torchaudio.\nAudio\nAudio Feature Augmentation\nLearn to augment features using torchaudio.\nAudio\nAudio Datasets\nLearn to use torchaudio datasets.\nAudio\nAutomatic Speech Recognition with Wav2Vec2 in torchaudio\nLearn how to use torchaudio's pretrained models for building a speech recognition application.\nAudio\nSpeech Command Classification\nLearn how to correctly format an audio dataset and then train/test an audio classifier network on the dataset.\nAudio\nText-to-Speech with torchaudio\nLearn how to use torchaudio's pretrained models for building a text-to-speech application.\nAudio\nForced Alignment with Wav2Vec2 in torchaudio\nLearn how to use torchaudio's Wav2Vec2 pretrained models for aligning text to speech\nAudio\nNLP from Scratch: Classifying Names with a Character-level RNN\nBuild and train a basic character-level RNN to classify word from scratch without the use of torchtext. First in a series of three tutorials.\nNLP\nNLP from Scratch: Generating Names with a Character-level RNN\nAfter using character-level RNN to classify names, learn how to generate names from languages. Second in a series of three tutorials.\nNLP\nNLP from Scratch: Translation with a Sequence-to-sequence Network and Attention\nThis is the third and final tutorial on doing “NLP From Scratch”, where we write our own classes and functions to preprocess the data to do our NLP modeling tasks.\nNLP\nExporting a PyTorch model to ONNX using TorchDynamo backend and Running it using ONNX Runtime\nBuild a image classifier model in PyTorch and convert it to ONNX before deploying it with ONNX Runtime.\nProduction,ONNX,Backends\nExtending the ONNX exporter operator support\nDemonstrate end-to-end how to address unsupported operators in ONNX.\nProduction,ONNX,Backends\nExporting a model with control flow to ONNX\nDemonstrate how to handle control flow logic while exporting a PyTorch model to ONNX.\nProduction,ONNX,Backends\nReinforcement Learning (DQN)\nLearn how to use PyTorch to train a Deep Q Learning (DQN) agent on the CartPole-v0 task from the OpenAI Gym.\nReinforcement-Learning\nReinforcement Learning (PPO) with TorchRL\nLearn how to use PyTorch and TorchRL to train a Proximal Policy Optimization agent on the Inverted Pendulum task from Gym.\nReinforcement-Learning\nTrain a Mario-playing RL Agent\nUse PyTorch to train a Double Q-learning agent to play Mario.\nReinforcement-Learning\nRecurrent DQN\nUse TorchRL to train recurrent policies\nReinforcement-Learning\nCode a DDPG Loss\nUse TorchRL to code a DDPG Loss\nReinforcement-Learning\nWriting your environment and transforms\nUse TorchRL to code a Pendulum\nReinforcement-Learning\nServing PyTorch Tutorial\nDeploy and scale a PyTorch model with Ray Serve.\nProduction,Best-Practice,Ray-Distributed,Ecosystem\nProfiling PyTorch\nLearn how to profile a PyTorch application\nProfiling\nProfiling PyTorch\nIntroduction to Holistic Trace Analysis\nProfiling\nProfiling PyTorch\nTrace Diff using Holistic Trace Analysis\nProfiling\nMemory Profiling with Mosaic\nLearn how to use the Mosaic memory profiler to visualize GPU memory usage and identify memory optimization opportunities in PyTorch models.\nModel-Optimization,Best-Practice,Profiling\nBuilding a Simple Performance Profiler with FX\nBuild a simple FX interpreter to record the runtime of op, module, and function calls and report statistics\nFX\n(beta) Channels Last Memory Format in PyTorch\nGet an overview of Channels Last memory format and understand how it is used to order NCHW tensors in memory preserving dimensions.\nMemory-Format,Best-Practice,Frontend-APIs\nUsing the PyTorch C++ Frontend\nWalk through an end-to-end example of training a model with the C++ frontend by training a DCGAN – a kind of generative model – to generate images of MNIST digits.\nFrontend-APIs,C++\nPyTorch Custom Operators Landing Page\nThis is the landing page for all things related to custom operators in PyTorch.\nExtending-PyTorch,Frontend-APIs,C++,CUDA\nCustom Python Operators\nCreate Python custom operators with correct mutation behavior, fake kernels, autograd, and opcheck.\nExtending-PyTorch,Frontend-APIs,C++,CUDA\nCompiled Autograd: Capturing a larger backward graph for ``torch.compile``\nLearn how to use compiled autograd to capture a larger backward graph.\nModel-Optimization,CUDA\nCustom C++ and CUDA Operators\nHow to extend PyTorch with custom C++ and CUDA operators.\nExtending-PyTorch,Frontend-APIs,C++,CUDA\nAutograd in C++ Frontend\nThe autograd package helps build flexible and dynamic neural netorks. In this tutorial, explore several examples of doing autograd in PyTorch C++ frontend\nFrontend-APIs,C++\nRegistering a Dispatched Operator in C++\nThe dispatcher is an internal component of PyTorch which is responsible for figuring out what code should actually get run when you call a function like torch::add.\nExtending-PyTorch,Frontend-APIs,C++\nExtending Dispatcher For a New Backend in C++\nLearn how to extend the dispatcher to add a new device living outside of the pytorch/pytorch repo and maintain it to keep in sync with native PyTorch devices.\nExtending-PyTorch,Frontend-APIs,C++\nFacilitating New Backend Integration by PrivateUse1\nLearn how to integrate a new backend living outside of the pytorch/pytorch repo and maintain it to keep in sync with the native PyTorch backend.\nExtending-PyTorch,Frontend-APIs,C++\nCustom Function Tutorial: Double Backward\nLearn how to write a custom autograd Function that supports double backward.\nExtending-PyTorch,Frontend-APIs\nCustom Function Tutorial: Fusing Convolution and Batch Norm\nLearn how to create a custom autograd Function that fuses batch norm into a convolution to improve memory usage.\nExtending-PyTorch,Frontend-APIs\nForward-mode Automatic Differentiation\nLearn how to use forward-mode automatic differentiation.\nFrontend-APIs\nJacobians, Hessians, hvp, vhp, and more\nLearn how to compute advanced autodiff quantities using torch.func\nFrontend-APIs\nModel Ensembling\nLearn how to ensemble models using torch.vmap\nFrontend-APIs\nPer-Sample-Gradients\nLearn how to compute per-sample-gradients using torch.func\nFrontend-APIs\nNeural Tangent Kernels\nLearn how to compute neural tangent kernels using torch.func\nFrontend-APIs\nPerformance Profiling in PyTorch\nLearn how to use the PyTorch Profiler to benchmark your module's performance.\nModel-Optimization,Best-Practice,Profiling\nCUDA Graph Kernel Annotations and Profiling\nLearn how to annotate CUDA graph kernels for semantic profiling traces with custom visualization lanes.\nModel-Optimization,Best-Practice,Profiling,CUDA\nHyperparameter Tuning Tutorial\nLearn how to use Ray Tune to find the best performing set of hyperparameters for your model.\nModel-Optimization,Best-Practice,Ray-Distributed,Parallel-and-Distributed-Training\nParametrizations Tutorial\nLearn how to use torch.nn.utils.parametrize to put constraints on your parameters (e.g. make them orthogonal, symmetric positive definite, low-rank...)\nModel-Optimization,Best-Practice\nPruning Tutorial\nLearn how to use torch.nn.utils.prune to sparsify your neural networks, and how to extend it to implement your own custom pruning technique.\nModel-Optimization,Best-Practice\nHow to save memory by fusing the optimizer step into the backward pass\nLearn a memory-saving technique through fusing the optimizer step into the backward pass using memory snapshots.\nModel-Optimization,Best-Practice,CUDA,Frontend-APIs\n(beta) Accelerating BERT with semi-structured sparsity\nTrain BERT, prune it to be 2:4 sparse, and then accelerate it to achieve 2x inference speedups with semi-structured sparsity and torch.compile.\nText,Model-Optimization\nMulti-Objective Neural Architecture Search with Ax\nLearn how to use Ax to search over architectures find optimal tradeoffs between accuracy and latency.\nModel-Optimization,Best-Practice,Ax,TorchX\ntorch.compile Tutorial\nSpeed up your models with minimal code changes using torch.compile, the latest PyTorch compiler solution.\nModel-Optimization\ntorch.compile End-to-End Tutorial\nAn example of applying torch.compile to a real model, demonstrating speedups.\nModel-Optimization\nBuilding a Convolution/Batch Norm fuser in torch.compile\nBuild a simple pattern matcher pass that fuses batch norm into convolution to improve performance during inference.\nModel-Optimization\nInductor CPU Backend Debugging and Profiling\nLearn the usage, debugging and performance profiling for ``torch.compile`` with Inductor CPU backend.\nModel-Optimization\n(beta) Implementing High-Performance Transformers with SCALED DOT PRODUCT ATTENTION\nThis tutorial explores the new torch.nn.functional.scaled_dot_product_attention and how it can be used to construct Transformer components.\nModel-Optimization,Attention,Transformer\nKnowledge Distillation in Convolutional Neural Networks\nLearn how to improve the accuracy of lightweight models using more powerful models as teachers.\nModel-Optimization,Image/Video\nAccelerating PyTorch Transformers by replacing nn.Transformer with Nested Tensors and torch.compile()\nThis tutorial goes over recommended best practices for implementing Transformers with native PyTorch.\nTransformer\nPyTorch Distributed Overview\nBriefly go over all concepts and features in the distributed package. Use this document to find the distributed training technology that can best serve your application.\nParallel-and-Distributed-Training\nDistributed Data Parallel in PyTorch - Video Tutorials\nThis series of video tutorials walks you through distributed training in PyTorch via DDP.\nParallel-and-Distributed-Training\nSingle-Machine Model Parallel Best Practices\nLearn how to implement model parallel, a distributed training technique which splits a single model onto different GPUs, rather than replicating the entire model on each GPU\nParallel-and-Distributed-Training\nGetting Started with Distributed Data Parallel\nLearn the basics of when to use distributed data paralle versus data parallel and work through an example to set it up.\nParallel-and-Distributed-Training\nWriting Distributed Applications with PyTorch\nSet up the distributed package of PyTorch, use the different communication strategies, and go over some the internals of the package.\nParallel-and-Distributed-Training\nLarge Scale Transformer model training with Tensor Parallel\nLearn how to train large models with Tensor Parallel package.\nParallel-and-Distributed-Training\nCustomize Process Group Backends Using Cpp Extensions\nExtend ProcessGroup with custom collective communication implementations.\nParallel-and-Distributed-Training\nGetting Started with Distributed RPC Framework\nLearn how to build distributed training using the torch.distributed.rpc package.\nParallel-and-Distributed-Training\nImplementing a Parameter Server Using Distributed RPC Framework\nWalk through a through a simple example of implementing a parameter server using PyTorch’s Distributed RPC framework.\nParallel-and-Distributed-Training\nIntroduction to Distributed Pipeline Parallelism\nDemonstrate how to implement pipeline parallelism using torch.distributed.pipelining\nParallel-and-Distributed-Training\nImplementing Batch RPC Processing Using Asynchronous Executions\nLearn how to use rpc.functions.async_execution to implement batch RPC\nParallel-and-Distributed-Training\nCombining Distributed DataParallel with Distributed RPC Framework\nWalk through a through a simple example of how to combine distributed data parallelism with distributed model parallelism.\nParallel-and-Distributed-Training\nGetting Started with Fully Sharded Data Parallel (FSDP2)\nLearn how to train models with Fully Sharded Data Parallel (fully_shard) package.\nParallel-and-Distributed-Training\nIntroduction to Libuv TCPStore Backend\nTCPStore now uses a new server backend for faster connection and better scalability.\nParallel-and-Distributed-Training\nInteractive Distributed Applications with Monarch\nLearn how to spin up distributed applications using Monarch's singler controller model\nParallel-and-Distributed-Training\nInteractive Distributed Applications with Monarch\nLearn how to use Monarch's actor framework with TorchTitan to simplify large-scale distributed training across SLURM clusters.\nParallel-and-Distributed-Training\nDebugging Hangs with Flight Recorder Using TorchComms and Debug Server\nDiagnose hangs using the TorchComms Flight Recorder and Debug Server periodic dumps.\nParallel-and-Distributed-Training,Debugging\nExporting to ExecuTorch Tutorial\nLearn about how to use ExecuTorch, a unified ML stack for lowering PyTorch models to edge devices.\nEdge\nRunning an ExecuTorch Model in C++ Tutorial\nLearn how to load and execute an ExecuTorch model in C++\nEdge\nUsing the ExecuTorch SDK to Profile a Model\nExplore how to use the ExecuTorch SDK to profile, debug, and visualize ExecuTorch models\nEdge\nBuilding an ExecuTorch iOS Demo App\nExplore how to set up the ExecuTorch iOS Demo App, which uses the MobileNet v3 model to process live camera images leveraging three different backends: XNNPACK, Core ML, and Metal Performance Shaders (MPS).\nEdge\nBuilding an ExecuTorch Android Demo App\nLearn how to set up the ExecuTorch Android Demo App for image segmentation tasks using the DeepLab v3 model and XNNPACK FP32 backend.\nEdge\nLowering a Model as a Delegate\nLearn to accelerate your program using ExecuTorch by applying delegates through three methods: lowering the whole module, composing it with another module, and partitioning parts of a module.\nEdge\nIntroduction to TorchRec\nTorchRec is a PyTorch domain library built to provide common sparsity & parallelism primitives needed for large-scale recommender systems.\nTorchRec,Recommender\nExploring TorchRec sharding\nThis tutorial covers the sharding schemes of embedding tables by using\nEmbeddingPlanner\nand\nDistributedModelParallel\nAPI.\nTorchRec,Recommender\nAdditional Resources\n#\nExamples of PyTorch\nA set of examples around PyTorch in Vision, Text, Reinforcement Learning that you can incorporate in your existing work.\nCheck Out Examples\nRun Tutorials on Google Colab\nLearn how to copy tutorial data into Google Drive so that you can run tutorials on Google Colab.\nOpen",
  "metadata": {
    "title": "Welcome to PyTorch Tutorials — PyTorch Tutorials 2.14.0+cu130 documentation",
    "description": null,
    "keywords": null,
    "author": null,
    "og:image": "https://docs.pytorch.org/docs/stable/_static/img/pytorch_seo.png",
    "article:modified_time": "2026-06-16T19:55:12+00:00"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [],
  "images": [
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/60-min-blitz.png",
      "bytes": 16838,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-385bbd754b13174a8c02.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/60-min-blitz.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/generic-pytorch-logo.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-03e720bb167a7902962c.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/generic-pytorch-logo.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/learning-pytorch-with-examples.png",
      "bytes": 14029,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-73b5290f36603bd21fd5.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/learning-pytorch-with-examples.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torch-nn.png",
      "bytes": 68107,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-2d6cf9b6cb200d003891.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torch-nn.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/visualizing-with-tensorboard.png",
      "bytes": 49699,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-d39654857684eff7cac7.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/visualizing-with-tensorboard.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/understanding_leaf_vs_nonleaf.png",
      "bytes": 231846,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-8be63c6760bf1ea59f80.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/understanding_leaf_vs_nonleaf.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/visualizing_gradients_tutorial.png",
      "bytes": 41537,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-38e4c19ab08d0536474f.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/visualizing_gradients_tutorial.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/TorchVision-Object-Detection-Finetuning-Tutorial.png",
      "bytes": 557295,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-162f7de5e073a316381b.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/TorchVision-Object-Detection-Finetuning-Tutorial.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Transfer-Learning-for-Computer-Vision-Tutorial.png",
      "bytes": 162499,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-c784dd4b7f06a5ca17ab.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Transfer-Learning-for-Computer-Vision-Tutorial.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Adversarial-Example-Generation.png",
      "bytes": 160214,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-ecf92b6a212862b09871.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Adversarial-Example-Generation.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/DCGAN-Tutorial.png",
      "bytes": 65295,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-d3e27bdc93239ea738e9.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/DCGAN-Tutorial.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/stn/Five.gif",
      "bytes": 238180,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-9ad8e314a15a91b85d13.gif",
      "src": "https://docs.pytorch.org/tutorials/_static/img/stn/Five.gif",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/usb_semisup_learn/code.png",
      "bytes": 568243,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-34400034e69f29def045.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/usb_semisup_learn/code.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "http_404",
      "url": "https://docs.pytorch.org/tutorials/_static/img/ray-data.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/ray-data.png",
      "alt": "",
      "downloaded": false,
      "retried_at": "2026-10-20T17:55:57Z"
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-Tutorial.png",
      "bytes": 62621,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-3294debb1c0d432fa46b.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-Tutorial.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-asr.png",
      "bytes": 51923,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-92ab7ba65eb6ec3cba38.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-asr.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-speech.png",
      "bytes": 32043,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-83eab4392a92fe66c46a.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-speech.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-alignment.png",
      "bytes": 33716,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-fe2703d6b87bc1dff1c7.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/torchaudio-alignment.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/NLP-From-Scratch-Classifying-Names-with-a-Character-Level-RNN.png",
      "bytes": 56684,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-60e7c4e3847788253c4e.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/NLP-From-Scratch-Classifying-Names-with-a-Character-Level-RNN.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/NLP-From-Scratch-Generating-Names-with-a-Character-Level-RNN.png",
      "bytes": 16207,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-39168c9fc9970b1fc421.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/NLP-From-Scratch-Generating-Names-with-a-Character-Level-RNN.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/NLP-From-Scratch-Translation-with-a-Sequence-to-Sequence-Network-and-Attention.png",
      "bytes": 33143,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-5084becd1d3de0228c15.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/NLP-From-Scratch-Translation-with-a-Sequence-to-Sequence-Network-and-Attention.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Exporting-PyTorch-Models-to-ONNX-Graphs.png",
      "bytes": 67955,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-ab7165741307ad727442.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Exporting-PyTorch-Models-to-ONNX-Graphs.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/cartpole.gif",
      "bytes": 272424,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-a1377b462ecfa96b77f2.gif",
      "src": "https://docs.pytorch.org/tutorials/_static/img/cartpole.gif",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/invpendulum.gif",
      "bytes": 30332,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-bad4c3fd56bc0a7f1474.gif",
      "src": "https://docs.pytorch.org/tutorials/_static/img/invpendulum.gif",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/mario.gif",
      "bytes": 5128354,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-6b1e2f47b20b36472af7.gif",
      "src": "https://docs.pytorch.org/tutorials/_static/img/mario.gif",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/rollout_recurrent.png",
      "bytes": 346286,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-81cbd1b4df7cff000a64.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/rollout_recurrent.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/half_cheetah.gif",
      "bytes": 2366828,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-2d5d0a829385c7cf6d03.gif",
      "src": "https://docs.pytorch.org/tutorials/_static/img/half_cheetah.gif",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/pendulum.gif",
      "bytes": 125364,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-12ef60a1dcd6a0ccc94b.gif",
      "src": "https://docs.pytorch.org/tutorials/_static/img/pendulum.gif",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/ray-serve.png",
      "bytes": 17407,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-f07e10a347ae724f15d5.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/ray-serve.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/profiler.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-31df73716ca941ae6377.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/profiler.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Deploying-PyTorch-in-Python-via-a-REST-API-with-Flask.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-c4a77484e0c951181908.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Deploying-PyTorch-in-Python-via-a-REST-API-with-Flask.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/experimental-Channels-Last-Memory-Format-in-PyTorch.png",
      "bytes": 118957,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-03f5d86e8ec8a39a0ddd.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/experimental-Channels-Last-Memory-Format-in-PyTorch.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Using-the-PyTorch-Cpp-Frontend.png",
      "bytes": 39309,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-ee8e53b27e8586d689be.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Using-the-PyTorch-Cpp-Frontend.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Custom-Cpp-and-CUDA-Extensions.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-25d62c1de83ea17ddede.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Custom-Cpp-and-CUDA-Extensions.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Autograd-in-Cpp-Frontend.png",
      "bytes": 39309,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-959ac825594cf594ad0c.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Autograd-in-Cpp-Frontend.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/ray-tune.png",
      "bytes": 59762,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-699083ca79f1c47d049a.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/ray-tune.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/parametrizations.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-72f6e355fecb926268a7.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/parametrizations.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Pruning-Tutorial.png",
      "bytes": 67898,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-6555c2278b3d3cfa8ab8.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Pruning-Tutorial.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/pytorch-logo.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-108a5629cbe61a8656d1.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/pytorch-logo.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/ax_logo.png",
      "bytes": 17507,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-b00818d5c0bb3f4edf62.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/ax_logo.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/knowledge_distillation_pytorch_logo.png",
      "bytes": 119896,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-ce9c65d426bdfdf7a6b5.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/knowledge_distillation_pytorch_logo.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/PyTorch-Distributed-Overview.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-34f0a75b8ac4a5734a4d.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/PyTorch-Distributed-Overview.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Model-Parallel-Best-Practices.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-0218b7803fae67bd09c8.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Model-Parallel-Best-Practices.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Getting-Started-with-Distributed-Data-Parallel.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-179d031f80b4bb8c79ba.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Getting-Started-with-Distributed-Data-Parallel.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Writing-Distributed-Applications-with-PyTorch.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-377be435b706120bcdbe.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Writing-Distributed-Applications-with-PyTorch.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Large-Scale-Transformer-model-training-with-Tensor-Parallel.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-fda6e9c60715a730cace.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Large-Scale-Transformer-model-training-with-Tensor-Parallel.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Customize-Process-Group-Backends-Using-Cpp-Extensions.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-5cf0575d725098afc20d.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Customize-Process-Group-Backends-Using-Cpp-Extensions.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Getting Started with Distributed-RPC-Framework.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-a8e9882d646749ccea67.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Getting Started with Distributed-RPC-Framework.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Implementing-a-Parameter-Server-Using-Distributed-RPC-Framework.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-24bf172f844d184e5a7f.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Implementing-a-Parameter-Server-Using-Distributed-RPC-Framework.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Implementing-Batch-RPC-Processing-Using-Asynchronous-Executions.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-c03e7ff15e8552e848c5.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Implementing-Batch-RPC-Processing-Using-Asynchronous-Executions.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Combining-Distributed-DataParallel-with-Distributed-RPC-Framework.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-0a7fdb0468e27f4dcad8.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Combining-Distributed-DataParallel-with-Distributed-RPC-Framework.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Getting-Started-with-FSDP.png",
      "bytes": 35776,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-495d1b52d9e4484acf66.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/cropped/Getting-Started-with-FSDP.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/ExecuTorch-Logo-cropped.svg",
      "bytes": 1894,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-472d9192b6dedef29d11.svg",
      "src": "https://docs.pytorch.org/tutorials/_static/img/ExecuTorch-Logo-cropped.svg",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/torchrec.png",
      "bytes": 26695,
      "reused": false,
      "local_path": "attachments/a414ee436a6f/images/body-033e83d1a2237bc7a1be.png",
      "src": "https://docs.pytorch.org/tutorials/_static/img/thumbnails/torchrec.png",
      "alt": "",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/intermediate_data_loading_tutorial.html",
      "label": "Data Loading Optimization in PyTorch",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/distributed_training_with_ray_tutorial.html",
      "label": "Distributed Training with Ray Train",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/serving_tutorial.html",
      "label": "Serve PyTorch models at scale with Ray Serve",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/hyperparameter_tuning_tutorial.html",
      "label": "Hyperparameter tuning using Ray Tune",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/mosaic_memory_profiling_tutorial.html",
      "label": "Memory Profiling with Mosaic",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/variable_length_attention_tutorial.html",
      "label": "Using Variable Length Attention in PyTorch",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/recipes/debug_mode_tutorial.html",
      "label": "DebugMode: Recording Dispatched Operations and Numerical Debugging",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/basics/intro.html",
      "label": "Get started with PyTorch",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/recipes_index.html",
      "label": "Explore Recipes",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/introyt/introyt_index.html",
      "label": "Introduction to PyTorch on YouTube An introduction to building a complete ML workflow with PyTorch. Follows the PyTorch ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/pytorch_with_examples.html",
      "label": "Learning PyTorch with Examples This tutorial introduces the fundamental concepts of PyTorch through self-contained examp",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/nn_tutorial.html",
      "label": "What is torch.nn really? Use torch.nn to create and train a neural network. Getting-Started",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/tensorboard_tutorial.html",
      "label": "Visualizing Models, Data, and Training with TensorBoard Learn to use TensorBoard to visualize data and model training. I",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/pinmem_nonblock.html",
      "label": "Good usage of `non_blocking` and `pin_memory()` in PyTorch A guide on best practices to copy data from CPU to GPU. Getti",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/understanding_leaf_vs_nonleaf_tutorial.html",
      "label": "Understanding requires_grad, retain_grad, Leaf, and Non-leaf Tensors Learn the subtleties of requires_grad, retain_grad,",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/visualizing_gradients_tutorial.html",
      "label": "Visualizing Gradients in PyTorch Visualize the gradient flow of a network. Getting-Started",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/torchvision_tutorial.html",
      "label": "TorchVision Object Detection Finetuning Tutorial Finetune a pre-trained Mask R-CNN model. Image/Video",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/transfer_learning_tutorial.html",
      "label": "Transfer Learning for Computer Vision Tutorial Train a convolutional neural network for image classification using trans",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/fgsm_tutorial.html",
      "label": "Adversarial Example Generation Train a convolutional neural network for image classification using transfer learning. Im",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html",
      "label": "DCGAN Tutorial Train a generative adversarial network (GAN) to generate new celebrities. Image/Video",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/spatial_transformer_tutorial.html",
      "label": "Spatial Transformer Networks Tutorial Learn how to augment your network using a visual attention mechanism. Image/Video",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/usb_semisup_learn.html",
      "label": "Semi-Supervised Learning Tutorial Based on USB Learn how to train semi-supervised learning algorithms (on custom data) u",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/audio_io_tutorial.html",
      "label": "Audio IO Learn to load data with torchaudio. Audio",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/audio_resampling_tutorial.html",
      "label": "Audio Resampling Learn to resample audio waveforms using torchaudio. Audio",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/audio_data_augmentation_tutorial.html",
      "label": "Audio Data Augmentation Learn to apply data augmentations using torchaudio. Audio",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/audio_feature_extractions_tutorial.html",
      "label": "Audio Feature Extractions Learn to extract features using torchaudio. Audio",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/audio_feature_augmentation_tutorial.html",
      "label": "Audio Feature Augmentation Learn to augment features using torchaudio. Audio",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/audio_datasets_tutorial.html",
      "label": "Audio Datasets Learn to use torchaudio datasets. Audio",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/speech_recognition_pipeline_tutorial.html",
      "label": "Automatic Speech Recognition with Wav2Vec2 in torchaudio Learn how to use torchaudio's pretrained models for building a ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/speech_command_classification_with_torchaudio_tutorial.html",
      "label": "Speech Command Classification Learn how to correctly format an audio dataset and then train/test an audio classifier net",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/text_to_speech_with_torchaudio.html",
      "label": "Text-to-Speech with torchaudio Learn how to use torchaudio's pretrained models for building a text-to-speech application",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/forced_alignment_with_torchaudio_tutorial.html",
      "label": "Forced Alignment with Wav2Vec2 in torchaudio Learn how to use torchaudio's Wav2Vec2 pretrained models for aligning text ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial",
      "label": "NLP from Scratch: Classifying Names with a Character-level RNN Build and train a basic character-level RNN to classify w",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/char_rnn_generation_tutorial.html",
      "label": "NLP from Scratch: Generating Names with a Character-level RNN After using character-level RNN to classify names, learn h",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html",
      "label": "NLP from Scratch: Translation with a Sequence-to-sequence Network and Attention This is the third and final tutorial on ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/onnx/export_simple_model_to_onnx_tutorial.html",
      "label": "Exporting a PyTorch model to ONNX using TorchDynamo backend and Running it using ONNX Runtime Build a image classifier m",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/onnx/onnx_registry_tutorial.html",
      "label": "Extending the ONNX exporter operator support Demonstrate end-to-end how to address unsupported operators in ONNX. Produc",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/onnx/export_control_flow_model_to_onnx_tutorial.html",
      "label": "Exporting a model with control flow to ONNX Demonstrate how to handle control flow logic while exporting a PyTorch model",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/reinforcement_q_learning.html",
      "label": "Reinforcement Learning (DQN) Learn how to use PyTorch to train a Deep Q Learning (DQN) agent on the CartPole-v0 task fro",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/reinforcement_ppo.html",
      "label": "Reinforcement Learning (PPO) with TorchRL Learn how to use PyTorch and TorchRL to train a Proximal Policy Optimization a",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/mario_rl_tutorial.html",
      "label": "Train a Mario-playing RL Agent Use PyTorch to train a Double Q-learning agent to play Mario. Reinforcement-Learning",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/dqn_with_rnn_tutorial.html",
      "label": "Recurrent DQN Use TorchRL to train recurrent policies Reinforcement-Learning",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/coding_ddpg.html",
      "label": "Code a DDPG Loss Use TorchRL to code a DDPG Loss Reinforcement-Learning",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/pendulum.html",
      "label": "Writing your environment and transforms Use TorchRL to code a Pendulum Reinforcement-Learning",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/profiler.html",
      "label": "Profiling PyTorch Learn how to profile a PyTorch application Profiling",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/hta_intro_tutorial.html",
      "label": "Profiling PyTorch Introduction to Holistic Trace Analysis Profiling",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/hta_trace_diff_tutorial.html",
      "label": "Profiling PyTorch Trace Diff using Holistic Trace Analysis Profiling",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/fx_profiling_tutorial.html",
      "label": "Building a Simple Performance Profiler with FX Build a simple FX interpreter to record the runtime of op, module, and fu",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/memory_format_tutorial.html",
      "label": "(beta) Channels Last Memory Format in PyTorch Get an overview of Channels Last memory format and understand how it is us",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/cpp_frontend.html",
      "label": "Using the PyTorch C++ Frontend Walk through an end-to-end example of training a model with the C++ frontend by training ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/custom_ops_landing_page.html",
      "label": "PyTorch Custom Operators Landing Page This is the landing page for all things related to custom operators in PyTorch. Ex",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/python_custom_ops.html",
      "label": "Custom Python Operators Create Python custom operators with correct mutation behavior, fake kernels, autograd, and opche",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/compiled_autograd_tutorial",
      "label": "Compiled Autograd: Capturing a larger backward graph for ``torch.compile`` Learn how to use compiled autograd to capture",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/cpp_custom_ops.html",
      "label": "Custom C++ and CUDA Operators How to extend PyTorch with custom C++ and CUDA operators. Extending-PyTorch,Frontend-APIs,",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/cpp_autograd.html",
      "label": "Autograd in C++ Frontend The autograd package helps build flexible and dynamic neural netorks. In this tutorial, explore",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/dispatcher.html",
      "label": "Registering a Dispatched Operator in C++ The dispatcher is an internal component of PyTorch which is responsible for fig",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/extend_dispatcher.html",
      "label": "Extending Dispatcher For a New Backend in C++ Learn how to extend the dispatcher to add a new device living outside of t",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/privateuseone.html",
      "label": "Facilitating New Backend Integration by PrivateUse1 Learn how to integrate a new backend living outside of the pytorch/p",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/custom_function_double_backward_tutorial.html",
      "label": "Custom Function Tutorial: Double Backward Learn how to write a custom autograd Function that supports double backward. E",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/custom_function_conv_bn_tutorial.html",
      "label": "Custom Function Tutorial: Fusing Convolution and Batch Norm Learn how to create a custom autograd Function that fuses ba",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/forward_ad_usage.html",
      "label": "Forward-mode Automatic Differentiation Learn how to use forward-mode automatic differentiation. Frontend-APIs",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/jacobians_hessians.html",
      "label": "Jacobians, Hessians, hvp, vhp, and more Learn how to compute advanced autodiff quantities using torch.func Frontend-APIs",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/ensembling.html",
      "label": "Model Ensembling Learn how to ensemble models using torch.vmap Frontend-APIs",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/per_sample_grads.html",
      "label": "Per-Sample-Gradients Learn how to compute per-sample-gradients using torch.func Frontend-APIs",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/neural_tangent_kernels.html",
      "label": "Neural Tangent Kernels Learn how to compute neural tangent kernels using torch.func Frontend-APIs",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/cuda_graph_annotations_tutorial.html",
      "label": "CUDA Graph Kernel Annotations and Profiling Learn how to annotate CUDA graph kernels for semantic profiling traces with ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/parametrizations.html",
      "label": "Parametrizations Tutorial Learn how to use torch.nn.utils.parametrize to put constraints on your parameters (e.g. make t",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/pruning_tutorial.html",
      "label": "Pruning Tutorial Learn how to use torch.nn.utils.prune to sparsify your neural networks, and how to extend it to impleme",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/optimizer_step_in_backward_tutorial.html",
      "label": "How to save memory by fusing the optimizer step into the backward pass Learn a memory-saving technique through fusing th",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/semi_structured_sparse.html",
      "label": "(beta) Accelerating BERT with semi-structured sparsity Train BERT, prune it to be 2:4 sparse, and then accelerate it to ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/ax_multiobjective_nas_tutorial.html",
      "label": "Multi-Objective Neural Architecture Search with Ax Learn how to use Ax to search over architectures find optimal tradeof",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/torch_compile_tutorial.html",
      "label": "torch.compile Tutorial Speed up your models with minimal code changes using torch.compile, the latest PyTorch compiler s",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/torch_compile_full_example.html",
      "label": "torch.compile End-to-End Tutorial An example of applying torch.compile to a real model, demonstrating speedups. Model-Op",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/torch_compile_conv_bn_fuser.html",
      "label": "Building a Convolution/Batch Norm fuser in torch.compile Build a simple pattern matcher pass that fuses batch norm into ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/inductor_debug_cpu.html",
      "label": "Inductor CPU Backend Debugging and Profiling Learn the usage, debugging and performance profiling for ``torch.compile`` ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/scaled_dot_product_attention_tutorial.html",
      "label": "(beta) Implementing High-Performance Transformers with SCALED DOT PRODUCT ATTENTION This tutorial explores the new torch",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/knowledge_distillation_tutorial.html",
      "label": "Knowledge Distillation in Convolutional Neural Networks Learn how to improve the accuracy of lightweight models using mo",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/transformer_building_blocks.html",
      "label": "Accelerating PyTorch Transformers by replacing nn.Transformer with Nested Tensors and torch.compile() This tutorial goes",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/dist_overview.html",
      "label": "PyTorch Distributed Overview Briefly go over all concepts and features in the distributed package. Use this document to ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/ddp_series_intro.html",
      "label": "Distributed Data Parallel in PyTorch - Video Tutorials This series of video tutorials walks you through distributed trai",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/model_parallel_tutorial.html",
      "label": "Single-Machine Model Parallel Best Practices Learn how to implement model parallel, a distributed training technique whi",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/ddp_tutorial.html",
      "label": "Getting Started with Distributed Data Parallel Learn the basics of when to use distributed data paralle versus data para",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/dist_tuto.html",
      "label": "Writing Distributed Applications with PyTorch Set up the distributed package of PyTorch, use the different communication",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/TP_tutorial.html",
      "label": "Large Scale Transformer model training with Tensor Parallel Learn how to train large models with Tensor Parallel package",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/process_group_cpp_extension_tutorial.html",
      "label": "Customize Process Group Backends Using Cpp Extensions Extend ProcessGroup with custom collective communication implement",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/rpc_tutorial.html",
      "label": "Getting Started with Distributed RPC Framework Learn how to build distributed training using the torch.distributed.rpc p",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/rpc_param_server_tutorial.html",
      "label": "Implementing a Parameter Server Using Distributed RPC Framework Walk through a through a simple example of implementing ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/pipelining_tutorial.html",
      "label": "Introduction to Distributed Pipeline Parallelism Demonstrate how to implement pipeline parallelism using torch.distribut",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/rpc_async_execution.html",
      "label": "Implementing Batch RPC Processing Using Asynchronous Executions Learn how to use rpc.functions.async_execution to implem",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/rpc_ddp_tutorial.html",
      "label": "Combining Distributed DataParallel with Distributed RPC Framework Walk through a through a simple example of how to comb",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/FSDP_tutorial.html",
      "label": "Getting Started with Fully Sharded Data Parallel (FSDP2) Learn how to train models with Fully Sharded Data Parallel (ful",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/TCPStore_libuv_backend.html",
      "label": "Introduction to Libuv TCPStore Backend TCPStore now uses a new server backend for faster connection and better scalabili",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/monarch_distributed_tutorial.html",
      "label": "Interactive Distributed Applications with Monarch Learn how to spin up distributed applications using Monarch's singler ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/debug_hangs_with_flight_recorder.html",
      "label": "Debugging Hangs with Flight Recorder Using TorchComms and Debug Server Diagnose hangs using the TorchComms Flight Record",
      "type": "a"
    },
    {
      "href": "https://pytorch.org/executorch/stable/tutorials/export-to-executorch-tutorial.html",
      "label": "Exporting to ExecuTorch Tutorial Learn about how to use ExecuTorch, a unified ML stack for lowering PyTorch models to ed",
      "type": "a"
    },
    {
      "href": "https://pytorch.org/executorch/stable/running-a-model-cpp-tutorial.html",
      "label": "Running an ExecuTorch Model in C++ Tutorial Learn how to load and execute an ExecuTorch model in C++ Edge",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/executorch/main/tutorials/devtools-integration-tutorial.html",
      "label": "Using the ExecuTorch SDK to Profile a Model Explore how to use the ExecuTorch SDK to profile, debug, and visualize Execu",
      "type": "a"
    },
    {
      "href": "https://github.com/meta-pytorch/executorch-examples/tree/main/mv3/apple/ExecuTorchDemo",
      "label": "Building an ExecuTorch iOS Demo App Explore how to set up the ExecuTorch iOS Demo App, which uses the MobileNet v3 model",
      "type": "a"
    },
    {
      "href": "https://github.com/meta-pytorch/executorch-examples/tree/main/dl3/android/DeepLabV3Demo",
      "label": "Building an ExecuTorch Android Demo App Learn how to set up the ExecuTorch Android Demo App for image segmentation tasks",
      "type": "a"
    },
    {
      "href": "https://pytorch.org/executorch/stable/examples-end-to-end-to-lower-model-to-delegate.html",
      "label": "Lowering a Model as a Delegate Learn to accelerate your program using ExecuTorch by applying delegates through three met",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/intermediate/torchrec_intro_tutorial.html",
      "label": "Introduction to TorchRec TorchRec is a PyTorch domain library built to provide common sparsity & parallelism primitives ",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/advanced/sharding.html",
      "label": "Exploring TorchRec sharding This tutorial covers the sharding schemes of embedding tables by using EmbeddingPlanner and ",
      "type": "a"
    },
    {
      "href": "https://pytorch.org/examples?utm_source=examples&utm_medium=examples-landing",
      "label": "Check Out Examples",
      "type": "a"
    },
    {
      "href": "https://docs.pytorch.org/tutorials/beginner/colab.html",
      "label": "Open",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:53:53Z",
  "source_url": "https://pytorch.org/tutorials/",
  "papers": [],
  "actual_video_files": [
    {
      "local_path": "attachments/a414ee436a6f/videos/-gIhcA6XeBs.mp4",
      "bytes": 51201223,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "987.621000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/3502Bf9VBfo.mp4",
      "bytes": 31807829,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "625.041000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/4Ubj6D6GavQ.mp4",
      "bytes": 13208802,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "124.521000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/4diGfmZ28aM.mp4",
      "bytes": 28211341,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "608.966667",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/5B4d0FuxSQc.mp4",
      "bytes": 12787747,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "260.561000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/5XRphWnFkNM.mp4",
      "bytes": 67635975,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "808.661000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/8Rr_8jy1_GY.mp4",
      "bytes": 84387544,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "728.001000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/8_k76AHu__s.mp4",
      "bytes": 1980765,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "45.721000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/B4Yp_dWo1jQ.mp4",
      "bytes": 23533828,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "423.066667",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/BCGP9UtWWzk.mp4",
      "bytes": 20118245,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "377.061000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/K65A0NH9tSQ.mp4",
      "bytes": 58484603,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "805.141000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/PjEwLgyzuzQ.mp4",
      "bytes": 45279121,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "829.201000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/QPgiN-CAsuU.mp4",
      "bytes": 3100594,
      "valid": true,
      "height": 1080,
      "width": 608,
      "duration": "55.741000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/TLqyyKHha_I.mp4",
      "bytes": 19355689,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "359.433333",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/UEQJmwPdlPU.mp4",
      "bytes": 1407733,
      "valid": true,
      "height": 1080,
      "width": 608,
      "duration": "30.741000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/UmAeYSzbv8Y.mp4",
      "bytes": 21869249,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "399.961000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/Vsuok0gg1NA.mp4",
      "bytes": 23592870,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "497.966667",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/XV-ytQ6kw-A.mp4",
      "bytes": 2081857,
      "valid": true,
      "height": 1080,
      "width": 608,
      "duration": "35.581000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/cjgj41dvSeQ.mp4",
      "bytes": 33247101,
      "valid": true,
      "height": 1080,
      "width": 1670,
      "duration": "528.021000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/dpAtpbbsWR8.mp4",
      "bytes": 16765343,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "329.001000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/ebEulxb1tNw.mp4",
      "bytes": 15934770,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "365.781000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/fbtVDqp3lv8.mp4",
      "bytes": 46986855,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "453.981000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/k-xTAkLsm54.mp4",
      "bytes": 5297980,
      "valid": true,
      "height": 1080,
      "width": 608,
      "duration": "34.321000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/lp_wP37n2Hs.mp4",
      "bytes": 1196224,
      "valid": true,
      "height": 1080,
      "width": 608,
      "duration": "33.701000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/p11ldyP9aco.mp4",
      "bytes": 39394665,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "679.133333",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/pEDGCKuE9Ss.mp4",
      "bytes": 25577742,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "553.401000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/qscouq3lo0s.mp4",
      "bytes": 30863011,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "582.121000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/rJlfN-E79Tw.mp4",
      "bytes": 1936431,
      "valid": true,
      "height": 1080,
      "width": 608,
      "duration": "48.361000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/sCoDWKTbh3s.mp4",
      "bytes": 35349313,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "620.121000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/sDM56HOziE4.mp4",
      "bytes": 15870915,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "372.541000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/uBLgprhJn_8.mp4",
      "bytes": 19787138,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "311.521000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/vkyymlruXH0.mp4",
      "bytes": 62003270,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "1013.361000",
      "status": "ok"
    },
    {
      "local_path": "attachments/a414ee436a6f/videos/x-plGk41Zsc.mp4",
      "bytes": 27147933,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "490.961000",
      "status": "ok"
    }
  ],
  "body_chars": 17088,
  "expected_body_images": 54,
  "discovery_status": "ok",
  "delivery_status": "partial",
  "missing_reason": "http_404",
  "raw_html": "attachments/a414ee436a6f/pages/source.html",
  "local_html": "attachments/a414ee436a6f/pages/article.html",
  "body_base_path": "attachments/a414ee436a6f/pages/",
  "body_markdown_path": "attachments/a414ee436a6f/pages/article.md"
}