pytorch/tools
Edward Yang 0f81a69a96 Make meta a device (getting rid of empty_meta) (#53143)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/53143

Meta is now an honest to goodness device type, like cpu, so you can use
device='meta' to trigger allocation of meta tensors.  This way better
than empty_meta since we now have working API for most factory functions
(they don't necessarily work yet, though, because need to register Meta
versions of those functions.)

Some subtleties:
- I decided to drop the concept of CPU versus CUDA meta tensors; meta
  tensors are device agnostic.  It's hard to say exactly what the
  correct level of abstraction here is, but in this particular case
  implementation considerations trump semantic considerations: it
  is way easier to have just a meta device, than to have a meta device
  AND a cpu device AND a cuda device.  This may limit the applicability
  of meta tensors for tracing models that do explicit cpu()/cuda()
  conversions (unless, perhaps, we make those operations no-ops on meta
  tensors).
- I noticed that the DeviceType uppercase strings are kind of weird.
  Are they really supposed to be all caps?  That's weird.
- I moved the Meta dispatch key to live with the rest of the "device"
  dispatch keys.
- I intentionally did NOT add a Backend for Meta.  For now, I'm going to
  hope meta tensors never exercise any of the Backend conversion code;
  even if it does, better to fix the code to just stop converting to and
  from Backend.

Signed-off-by: Edward Z. Yang <ezyang@fb.com>

Test Plan: Imported from OSS

Reviewed By: samestep

Differential Revision: D26763552

Pulled By: ezyang

fbshipit-source-id: 14633b6ca738e60b921db66a763155d01795480d
2021-03-03 11:24:13 -08:00
..
amd_build [ROCm] rename HIP_HCC_FLAGS to HIP_CLANG_FLAGS (#50917) 2021-01-22 07:24:05 -08:00
autograd De-prioritise Dimname and DimnameList in python overload resolution (#51350) 2021-03-02 23:07:08 -08:00
clang_format_hash [tools] Update clang-format linux hash (#50520) 2021-01-13 20:50:56 -08:00
code_analyzer [pytorch][bot] update mobile op deps (#52110) 2021-02-12 14:50:29 -08:00
code_coverage [reland] Report test time regressions (#50171) 2021-02-08 15:35:21 -08:00
codegen Make meta a device (getting rid of empty_meta) (#53143) 2021-03-03 11:24:13 -08:00
config
docker
fast_nvcc Abort node in fast_nvcc if ancestor fails (#51043) 2021-01-25 18:12:51 -08:00
jit Remove generated_unboxing_wrappers and setManuallyBoxedKernel (#49251) 2021-01-06 14:22:50 -08:00
pyi Updates rounding_mode documentation to remove "true" (#52202) 2021-02-12 09:19:39 -08:00
rules
setup_helpers Generate header with version #defines for LibTorch (#50073) 2021-02-03 22:18:53 -08:00
shared Introducing TORCH_CUDA_CPP_API and TORCH_CUDA_CU_API to the code (#50627) 2021-01-21 19:09:11 -08:00
__init__.py
build_libtorch.py
build_pytorch_libs.py Cleanup unused code for Python < 3.6 (#47822) 2020-11-13 21:37:01 -08:00
build_variables.bzl [PyTorch] Remove extra RNN.cpp file (#53169) 2021-03-02 23:09:03 -08:00
clang_format_all.py
clang_format_ci.sh
clang_format_utils.py Type-annotate tools/generate_torch_version (#51637) 2021-02-03 18:07:01 -08:00
clang_tidy.py
download_mnist.py
flake8_hook.py
generate_torch_version.py Fix local version generation (#52898) 2021-02-26 10:57:07 -08:00
generated_dirs.txt
git-clang-format
git-pre-commit
git_add_generated_dirs.sh
git_reset_generated_dirs.sh
nightly.py Bugfix nightly checkout tool to work on Windows (#49274) 2021-01-06 16:14:51 -08:00
pytorch.version
README.md Add script to display history for a single test across multiple jobs over time (#52000) 2021-02-11 13:27:49 -08:00
test_history.py Store test file in S3 as well for every TestSuite (#52869) 2021-03-02 07:36:00 -08:00
update_disabled_tests.sh

This folder contains a number of scripts which are used as part of the PyTorch build process. This directory also doubles as a Python module hierarchy (thus the __init__.py).

Overview

Modern infrastructure:

  • autograd - Code generation for autograd. This includes definitions of all our derivatives.
  • jit - Code generation for JIT
  • shared - Generic infrastructure that scripts in tools may find useful.
    • module_loader.py - Makes it easier to import arbitrary Python files in a script, without having to add them to the PYTHONPATH first.

Legacy infrastructure (we should kill this):

  • cwrap - Implementation of legacy code generation for THNN/THCUNN. This is used by nnwrap.

Build system pieces:

  • setup_helpers - Helper code for searching for third-party dependencies on the user system.
  • build_pytorch_libs.py - cross-platform script that builds all of the constituent libraries of PyTorch, but not the PyTorch Python extension itself.
  • build_libtorch.py - Script for building libtorch, a standalone C++ library without Python support. This build script is tested in CI.
  • fast_nvcc - Mostly-transparent wrapper over nvcc that parallelizes compilation when used to build CUDA files for multiple architectures at once.
    • fast_nvcc.py - Python script, entrypoint to the fast nvcc wrapper.

Developer tools which you might find useful:

Important if you want to run on AMD GPU:

  • amd_build - HIPify scripts, for transpiling CUDA into AMD HIP. Right now, PyTorch and Caffe2 share logic for how to do this transpilation, but have separate entry-points for transpiling either PyTorch or Caffe2 code.
    • build_amd.py - Top-level entry point for HIPifying our codebase.

Tools which are only situationally useful: