Skip to content

Conversation

@junrushao
Copy link
Member

No description provided.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @junrushao, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces extensive documentation for TVM-FFI's tensor handling, centralizing around the DLPack standard. It aims to provide clear guidance on tensor types, ownership, memory layouts, and ABI conversions, along with practical API usage and integration strategies for various developer roles, ensuring a consistent and robust approach to tensor management within the TVM-FFI ecosystem.

Highlights

  • New Tensor Documentation: A comprehensive guide docs/concepts/tensor.rst has been added, detailing how TVM-FFI handles tensors, with a strong focus on DLPack integration.
  • Tensor Types and Ownership: The documentation clarifies different tensor types (DLPack's DLTensor, DLManagedTensorVersioned, and TVM-FFI's TensorView, TensorObj, Tensor) and their ownership semantics (non-owning views vs. managed objects).
  • ABI Layout and Conversion: It explains the memory layout of these tensor types and how conversions occur across TVM-FFI's stable C ABI, emphasizing lifetime management.
  • API Usage and Allocation: The guide covers important C++ and Python APIs for tensor manipulation, recommended allocation patterns (e.g., FromEnvAlloc), and what TVM-FFI's tensor system does not provide (e.g., kernels, advanced indexing).
  • Integration Guidance: Specific tips are provided for kernel library developers, graph compilers, and runtimes on how to effectively integrate with TVM-FFI's tensor system, including stream context for GPU.
  • Documentation Structure Update: The main documentation index (docs/index.rst) has been updated to include the new tensor concept document.
  • Minor Code Comment: A small comment was added in include/tvm/ffi/reflection/overload.h for clarity regarding a super class alias.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@junrushao junrushao force-pushed the 2025-12-23/doc-tensor branch from 6ced0e7 to c44af20 Compare December 24, 2025 17:13
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces comprehensive documentation for Tensor and DLPack in TVM-FFI, which is a great addition for developers. The changes also include a minor documentation update in overload.h and adding the new documentation page to the main index. My review primarily focuses on improving the clarity and grammatical correctness of the new tensor.rst documentation file, with several suggestions to fix typos and rephrase sentences for better readability.

View (non-owning)
A "header" that describes a tensor but does not own the tensor's memory. When the consumer
receives a view, it must respect that the producer owns the underlying storage and decides its
lifetime, and use the view can only be used when the producer guarantees it remains valid.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There's a grammatical error in this sentence. The phrase 'use the view can only be used' is redundant. It should be corrected for clarity.

Suggested change
lifetime, and use the view can only be used when the producer guarantees it remains valid.
lifetime, and the view can only be used when the producer guarantees it remains valid.


.. tip::

Python side, only :py:class:`tvm_ffi.Tensor` exists. It is strictly follows DLPack semantics for interop, and can be converted to PyTorch via :py:func:`torch.from_dlpack`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There's a minor grammatical error here. The verb 'follows' should not be preceded by 'is'.

Suggested change
Python side, only :py:class:`tvm_ffi.Tensor` exists. It is strictly follows DLPack semantics for interop, and can be converted to PyTorch via :py:func:`torch.from_dlpack`.
Python side, only :py:class:`tvm_ffi.Tensor` exists. It strictly follows DLPack semantics for interop, and can be converted to PyTorch via :py:func:`torch.from_dlpack`.

~~~~~~~~~~~~~~

:c:struct:`DLTensor` is a **view** and the fundamental tensor descriptor. It describes the device
the tensors lives, its shape, dtype, and data pointer. It does not own the underlying data.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There's a subject-verb agreement error. 'tensors' is plural, but 'lives' is singular. Given the context of describing a single tensor, 'tensor lives' is more appropriate.

Suggested change
the tensors lives, its shape, dtype, and data pointer. It does not own the underlying data.
the tensor lives, its shape, dtype, and data pointer. It does not own the underlying data.

the tensors lives, its shape, dtype, and data pointer. It does not own the underlying data.

The **managed tensor** is :c:struct:`DLManagedTensorVersioned`, or its legacy counterpart
:c:struct:`DLManagedTensor`. It wraps an non-owning :c:struct:`DLTensor` descriptor with some
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There's a grammatical error here. 'an' should be used before words starting with a vowel sound. 'non-owning' starts with a consonant sound, so 'a' should be used instead.

Suggested change
:c:struct:`DLManagedTensor`. It wraps an non-owning :c:struct:`DLTensor` descriptor with some
:c:struct:`DLManagedTensor`. It wraps a non-owning :c:struct:`DLTensor` descriptor with some

extra fields,

* a ``deleter(self)`` callback, the cleanup callback consumer uses to release ownership when done with the tensor, and
* an opaque ``manager_ctx`` handle used by by the producer to store additional information.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There's a typo in this line. The word 'by' is repeated.

Suggested change
* an opaque ``manager_ctx`` handle used by by the producer to store additional information.
* an opaque ``manager_ctx`` handle used by the producer to store additional information.

:cpp:class:`TensorObj <tvm::ffi::TensorObj>` lives on the heap, contains a reference counter and a :c:struct:`DLTensor` descriptor embedded inside it.
Once the reference count drops to zero, the cleanup logic deallocates both the descriptor, and returns the ownership of the underlying data buffer.

:cpp:class:`Tensor <tvm::ffi::Tensor>` is the recommended interface for passing around managed tensors, and use owning tensors only when you need one or more of the following:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The phrasing of this sentence is a bit awkward. It can be improved for better readability by splitting it into two sentences.

Suggested change
:cpp:class:`Tensor <tvm::ffi::Tensor>` is the recommended interface for passing around managed tensors, and use owning tensors only when you need one or more of the following:
:cpp:class:`Tensor <tvm::ffi::Tensor>` is the recommended interface for passing around managed tensors. Use owning tensors only when you need one or more of the following:

What Tensor is not
~~~~~~~~~~~~~~~~~~

TVM-FFI is not a tensor library. While presenting a unified standardized representation to tensors,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The preposition 'to' is not idiomatic here. 'for' would be more appropriate in this context.

Suggested change
TVM-FFI is not a tensor library. While presenting a unified standardized representation to tensors,
TVM-FFI is not a tensor library. While presenting a unified standardized representation for tensors,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant