pytorch/tools
Edward Z. Yang f7365eca90 Add unbacked symints support; item works now (#90624)
The big idea is to add `create_unbacked_symfloat` and `create_unbacked_symint` to ShapeEnv, allowing you to allocate symbolic floats/ints corresponding to data you don't know about at compile time. Then, instead of immediately erroring out when you try to call local_scalar_dense on a FakeTensor, we instead create a fresh symint/symfloat and return that.

There a bunch of odds and ends that need to be handled:

* A number of `numel` calls converted to `sym_numel`
* When we finally return from item(), we need to ensure we actually produce a SymInt/SymFloat when appropriate. The previous binding code assumed that you would have to get a normal Python item. I add a pybind11 binding for Scalar (to PyObject only) and refactor the code to use that. There is some trickiness where you are NOT allowed to go through c10::SymInt if there isn't actually any SymInt involved. See comment.
* One of our unit tests tripped an implicit data dependent access which occurs when you pass a Tensor as an argument to a sizes parameter. This is also converted to support symbolic shapes
* We now support tracking bare SymInt/SymFloat returns in proxy tensor mode (this was already in symbolic-shapes branch)
* Whenever we allocate an unbacked symint, we record the stack trace it was allocated at. These get printed when you attempt data dependent access on the symint (e.g., you try to guard on it)
* Subtlety: unbacked symints are not necessarily > 1. I added a test for this.

These unbacked symints are not very useful right now as you will almost always immediately raise an error later when you try to guard on them. The next logical step is adding an assertion refinement system that lets ShapeEnv learn facts about unbacked symints so it can do a better job eliding guards that are unnecessary.

Signed-off-by: Edward Z. Yang <ezyang@fb.com>
Pull Request resolved: https://github.com/pytorch/pytorch/pull/90624
Approved by: https://github.com/Skylion007, https://github.com/voznesenskym
2022-12-12 13:33:07 +00:00
..
amd_build [ROCm] enable nvfuser (#82498) 2022-08-30 21:50:39 +00:00
autograd Add unbacked symints support; item works now (#90624) 2022-12-12 13:33:07 +00:00
bazel_tools [bazel] Add --config=shell for easier debugging (#79350) 2022-06-25 02:00:40 +00:00
build_defs Consolidate all python targets in the tools folder (#80408) 2022-06-29 23:27:47 +00:00
code_analyzer [tools] expose selective build library (#89351) 2022-11-21 21:08:13 +00:00
code_coverage Fix typos under benchmarks, test, and tools directories (#87975) 2022-10-29 01:26:17 +00:00
config
coverage_plugins_package Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
dynamo Add dynamo smoke tests to CI (#89302) 2022-11-30 21:24:45 +00:00
fast_nvcc Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
gdb Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
iwyu Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
jit Reland 2 Many symintifications (#87604) (#87980) 2022-10-28 13:40:11 +00:00
linter Add missing mypy-nofollow.ini (#90179) 2022-12-08 01:05:12 +00:00
lite_interpreter Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
lldb Run Black on all of tools/ 2022-04-20 17:29:41 +00:00
onnx [ONNX] Improve diagnostic message formatting (#87830) 2022-11-10 21:42:17 +00:00
pyi Add crossref debug mode for functionalization, catches stride errors (#89498) 2022-11-23 04:18:25 +00:00
rules [AutoAccept][Codemod][FBSourceBuckFormatLinter] Daily arc lint --take BUCKFORMAT (#79692) 2022-06-16 17:01:17 +00:00
setup_helpers [Mobile] Fix The Build For Model Tracer (#84755) 2022-09-09 18:22:24 +00:00
shared Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
stats Skip upload test stats for test reports from rerun disabled tests workflow (#89548) 2022-11-23 22:39:39 +00:00
test [torchgen] Introduce Executorch types and signatures (#90591) 2022-12-10 04:34:02 +00:00
testing Disable mem leak check (#88373) 2022-11-04 20:47:42 +00:00
__init__.py
bazel.bzl Introduce CUDA Device Assertions Infrastructure (#84609) 2022-12-08 01:26:07 +00:00
BUCK.bzl [tools] expose selective build library (#89351) 2022-11-21 21:08:13 +00:00
BUCK.oss Consolidate all python targets in the tools folder (#80408) 2022-06-29 23:27:47 +00:00
build_libtorch.py Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
build_pytorch_libs.py Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
download_mnist.py Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
extract_scripts.py Run Black on all of tools/ 2022-04-20 17:29:41 +00:00
gen_flatbuffers.sh
gen_vulkan_glsl.py Fix exception causes all over the codebase (#90271) 2022-12-07 04:29:00 +00:00
gen_vulkan_spv.py [vulkan] Add option for buffer representations in vTensor (#87622) 2022-11-09 17:59:49 +00:00
generate_torch_version.py Don't print fatal:... in generate_torch_version.py (#88335) 2022-11-04 20:34:23 +00:00
generated_dirs.txt
git_add_generated_dirs.sh
git_reset_generated_dirs.sh
nightly.py Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
nvcc_fix_deps.py Apply ufmt linter to all py files under tools (#81285) 2022-07-13 07:59:22 +00:00
pytorch.version
README.md [ci] delete old linter stuff 2022-05-11 07:40:44 +00:00
render_junit.py Fix exception causes all over the codebase (#90271) 2022-12-07 04:29:00 +00:00
substitute.py move substitute lib to open source (#79093) 2022-06-08 23:00:47 +00:00
update_masked_docs.py [maskedtensor] port torch/_masked into torch/masked (#85515) 2022-09-26 23:41:13 +00:00
vscode_settings.py Run Black on all of tools/ 2022-04-20 17:29:41 +00:00

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.

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: