/usr/local/lib64/python3.6/site-packages/torch/include/torch/csrc/autograd
NameSizeModeActions
functions/-0755rm
generated/-0755rm
utils/-0755rm
anomaly_mode.h15250644editdlrm
autograd.h52940644editdlrm
autograd_not_implemented_fallback.h2010644editdlrm
cpp_hook.h5180644editdlrm
custom_function.h144700644editdlrm
edge.h16270644editdlrm
engine.h172370644editdlrm
forward_grad.h85830644editdlrm
function.h250460644editdlrm
FunctionsManual.h199040644editdlrm
function_hook.h6410644editdlrm
grad_mode.h2070644editdlrm
InferenceMode.h1820644editdlrm
input_buffer.h15970644editdlrm
input_metadata.h13840644editdlrm
profiler.h1120644editdlrm
profiler_kineto.h91110644editdlrm
profiler_legacy.h169300644editdlrm
profiler_utils.h4390644editdlrm
python_anomaly_mode.h12460644editdlrm
python_autograd.h3880644editdlrm
python_cpp_function.h24560644editdlrm
python_engine.h12620644editdlrm
python_fft_functions.h1280644editdlrm
python_function.h40990644editdlrm
python_hook.h7000644editdlrm
python_legacy_variable.h2990644editdlrm
python_linalg_functions.h1310644editdlrm
python_mode.h4250644editdlrm
python_nn_functions.h1270644editdlrm
python_saved_variable_hooks.h8830644editdlrm
python_special_functions.h1320644editdlrm
python_torch_functions.h6710644editdlrm
python_variable.h16450644editdlrm
python_variable_indexing.h3130644editdlrm
record_function_ops.h5870644editdlrm
saved_variable.h43220644editdlrm
saved_variable_hooks.h2720644editdlrm
symbolic.h3300644editdlrm
variable.h334110644editdlrm
VariableTypeUtils.h150860644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/torch/csrc/autograd/saved_variable.h (4322B)
#pragma once #include #include #include #include #include #include namespace torch { namespace autograd { using Variable = at::Tensor; struct Node; TORCH_API extern const char* ERR_BACKWARD_TWICE; /// A snapshot of a variable at a certain version. A `SavedVariable` stores /// enough information to reconstruct a variable from a certain point in time. class TORCH_API SavedVariable { public: SavedVariable() = default; SavedVariable(const Variable& variable, bool is_output, bool is_inplace_on_view=false); SavedVariable(const c10::optional& variable, bool is_output, bool is_inplace_on_view=false); SavedVariable(SavedVariable&&) = default; SavedVariable& operator=(SavedVariable&&) = default; ~SavedVariable() { if (fw_grad_) { // See note [ Using ForwardGrad ] fw_grad_->clear(); } } /// Reconstructs the saved variable. Pass `saved_for` as the gradient /// function if constructing the `SavedVariable` with it would have caused a /// circular reference. Variable unpack(std::shared_ptr saved_for = nullptr) const; void register_hooks(std::unique_ptr&& hooks); void reset_data(); private: // This field contains either: // 1. the variable to save // 2. or its tensor_data. // If storing the variable itself would create a circular reference, // we fall into the second case and its metadata is also saved separately. // In that case, the grad_fn must be passed in to the unpack function when // reconstructing the Variable (except when we are doing an inplace operation on // a view, see below). // The field saved_orignal_ below reflects the two cases: its value is true // in the first case and false in the second case. // The value data_.defined() can be false in three cases: // 1. SavedVariable was constructed without a Tensor (the value to save is None), in // that case was_default_constructed_ will be kept at true // 2. The saved variable has been released by calling SavedVariable::reset_data(), typically // during the backward pass // 3. Hooks have been registered. In that case, hooks_ will be defined instead. // Note that the value of saved_original_ only reflects what happened during the construction // of the SavedVariable. If saved_original_ is true, we saved the original tensor in data_, // but if the user registers hooks, we will no longer have it (despite the saved_original_ still // being true) at::Tensor data_; // This field is used to store the forward AD gradients associated with // the saved Tensor. Note that this shared_ptr must never be shared with // either the saved Tensor or the unpacked Tensor. See note [ Using ForwardGrad ] std::shared_ptr fw_grad_; // Weak version of grad_fn_ that prevents leaks in rebase_history() for // inplace views. // This variable is used when the user chooses to create a SavedVariable with // is_inplace_on_view = true. // In that case, the grad_fn passed in to the unpack function at unwrapping // time is unused. std::weak_ptr weak_grad_fn_; c10::VariableVersion version_counter_; uint32_t saved_version_ = 0; uint32_t output_nr_ = 0; bool was_default_constructed_ = true; bool is_inplace_on_view_ = false; bool saved_original_ = false; bool is_leaf_ = false; bool is_output_ = false; // Hooks are a pair of functions pack_hook/unpack_hook that provides fine-grained control // over how the SavedVariable should save its data. // pack_hook is called upon registration, while unpack_hook is called when unpacking. std::unique_ptr hooks_; // Fields grad_fn_, grad_accumulator_, and requires_grad_ are only used if hooks are defined. // They are set before pack_hook is called and used after unpack_hook is called. std::shared_ptr grad_fn_; std::weak_ptr grad_accumulator_; bool requires_grad_ = false; void save_metadata(const Variable& data); static std::unique_ptr get_default_hooks(); void set_hooks_and_pack_data(std::unique_ptr&& hooks, const Variable& data); }; }} // namespace torch::autograd