Skip to content

Conversation

@QiJune
Copy link
Collaborator

@QiJune QiJune commented Aug 12, 2025

This reverts commit 9a8195e.

Summary by CodeRabbit

  • New Features

    • Improved wheel build flow: optional reuse of current Python env, stricter NVIDIA PyTorch container compatibility checks, and clearer errors for mismatched PyTorch versions.
    • More reliable cross-platform stub generation with better handling of CUDA/NVIDIA libs.
  • Chores

    • Adjusted runtime library search paths to improve CUDA linkage robustness (no functional changes).
    • Split OpenCV Docker installation into separate steps for cleaner layering (no functional changes).
  • Refactor

    • Consolidated stub generation logic into the main build process, simplifying configuration and reducing fragility.

Description

Test Coverage

GitHub Bot Help

/bot [-h] ['run', 'kill', 'skip', 'reuse-pipeline'] ...

Provide a user friendly way for developers to interact with a Jenkins server.

Run /bot [-h|--help] to print this help message.

See details below for each supported subcommand.

Details

run [--reuse-test (optional)pipeline-id --disable-fail-fast --skip-test --stage-list "A10-PyTorch-1, xxx" --gpu-type "A30, H100_PCIe" --test-backend "pytorch, cpp" --add-multi-gpu-test --only-multi-gpu-test --disable-multi-gpu-test --post-merge --extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx" --detailed-log --debug(experimental)]

Launch build/test pipelines. All previously running jobs will be killed.

--reuse-test (optional)pipeline-id (OPTIONAL) : Allow the new pipeline to reuse build artifacts and skip successful test stages from a specified pipeline or the last pipeline if no pipeline-id is indicated. If the Git commit ID has changed, this option will be always ignored. The DEFAULT behavior of the bot is to reuse build artifacts and successful test results from the last pipeline.

--disable-reuse-test (OPTIONAL) : Explicitly prevent the pipeline from reusing build artifacts and skipping successful test stages from a previous pipeline. Ensure that all builds and tests are run regardless of previous successes.

--disable-fail-fast (OPTIONAL) : Disable fail fast on build/tests/infra failures.

--skip-test (OPTIONAL) : Skip all test stages, but still run build stages, package stages and sanity check stages. Note: Does NOT update GitHub check status.

--stage-list "A10-PyTorch-1, xxx" (OPTIONAL) : Only run the specified test stages. Examples: "A10-PyTorch-1, xxx". Note: Does NOT update GitHub check status.

--gpu-type "A30, H100_PCIe" (OPTIONAL) : Only run the test stages on the specified GPU types. Examples: "A30, H100_PCIe". Note: Does NOT update GitHub check status.

--test-backend "pytorch, cpp" (OPTIONAL) : Skip test stages which don't match the specified backends. Only support [pytorch, cpp, tensorrt, triton]. Examples: "pytorch, cpp" (does not run test stages with tensorrt or triton backend). Note: Does NOT update GitHub pipeline status.

--only-multi-gpu-test (OPTIONAL) : Only run the multi-GPU tests. Note: Does NOT update GitHub check status.

--disable-multi-gpu-test (OPTIONAL) : Disable the multi-GPU tests. Note: Does NOT update GitHub check status.

--add-multi-gpu-test (OPTIONAL) : Force run the multi-GPU tests in addition to running L0 pre-merge pipeline.

--post-merge (OPTIONAL) : Run the L0 post-merge pipeline instead of the ordinary L0 pre-merge pipeline.

--extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx" (OPTIONAL) : Run the ordinary L0 pre-merge pipeline and specified test stages. Examples: --extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx".

--detailed-log (OPTIONAL) : Enable flushing out all logs to the Jenkins console. This will significantly increase the log volume and may slow down the job.

--debug (OPTIONAL) : Experimental feature. Enable access to the CI container for debugging purpose. Note: Specify exactly one stage in the stage-list parameter to access the appropriate container environment. Note: Does NOT update GitHub check status.

For guidance on mapping tests to stage names, see docs/source/reference/ci-overview.md
and the scripts/test_to_stage_mapping.py helper.

kill

kill

Kill all running builds associated with pull request.

skip

skip --comment COMMENT

Skip testing for latest commit on pull request. --comment "Reason for skipping build/test" is required. IMPORTANT NOTE: This is dangerous since lack of user care and validation can cause top of tree to break.

reuse-pipeline

reuse-pipeline

Reuse a previous pipeline to validate current commit. This action will also kill all currently running builds associated with the pull request. IMPORTANT NOTE: This is dangerous since lack of user care and validation can cause top of tree to break.

@QiJune QiJune requested review from a team as code owners August 12, 2025 06:40
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 12, 2025

📝 Walkthrough

Walkthrough

Updates add a CUDA stubs rpath to nanobind/pybind CMake targets, split OpenCV install into two Dockerfile layers, and significantly refactor scripts/build_wheel.py: revamped venv handling, NVIDIA PyTorch container compatibility checks, and inlined cross-platform stub generation, removing several helper functions and adjusting type hints and control flow.

Changes

Cohort / File(s) Summary
CMake rpath updates
cpp/tensorrt_llm/nanobind/CMakeLists.txt, cpp/tensorrt_llm/pybind/CMakeLists.txt
Add -Wl,-rpath,'${CUDA_TOOLKIT_ROOT_DIR}/targets/x86_64-linux/lib/stubs' to non-Windows LINK_FLAGS for TRTLLM_*_MODULE targets.
Docker layering tweak
docker/Dockerfile.multi
Split OpenCV uninstall/cleanup and install into two RUN steps; functional result unchanged.
Wheel build refactor and stubgen inline
scripts/build_wheel.py
Refactor setup_venv to return paths reliably; add NVIDIA PyTorch container checks; inline Linux/Windows stub generation; remove create_cuda_stub_links and generate_python_stubs_* helpers; adjust type hints (extra_cmake_vars to List[str]); update control flow for Windows options.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant build_wheel.py
  participant Venv
  participant CMake
  participant StubGen

  User->>build_wheel.py: main(args)
  build_wheel.py->>Venv: setup_venv(project_dir, requirements, no_venv)
  Venv-->>build_wheel.py: venv_python, venv_conan
  build_wheel.py->>build_wheel.py: Check NVIDIA_PYTORCH_VERSION compatibility
  build_wheel.py->>CMake: Configure/Build (extra_cmake_vars, jobs)
  CMake-->>build_wheel.py: Build artifacts
  alt Windows
    build_wheel.py->>StubGen: Run pybind11-stubgen via temp script (if pybind)
  else Linux
    build_wheel.py->>build_wheel.py: Prepare LD_LIBRARY_PATH, libnvidia-ml symlink
    build_wheel.py->>StubGen: Run nanobind.stubgen or pybind11_stubgen (+ extras)
  end
  StubGen-->>build_wheel.py: Stubs generated
  build_wheel.py-->>User: Wheel + stubs
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • yuanjingx87
  • jiaganc
  • niukuo
  • Shixiaowei02
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @coderabbitai title anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@QiJune
Copy link
Collaborator Author

QiJune commented Aug 12, 2025

/bot run

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (1)
cpp/tensorrt_llm/nanobind/CMakeLists.txt (1)

55-55: Same architecture portability issue as in pybind CMakeLists.txt

This has the same hardcoded x86_64-linux path issue that will break on ARM64/aarch64 systems.

🧹 Nitpick comments (4)
docker/Dockerfile.multi (1)

74-75: Splitting OpenCV installation creates unnecessary Docker layer

Splitting the OpenCV installation into two separate RUN commands creates an additional Docker layer without clear benefit. The uninstall and reinstall could be combined into a single command to reduce layer count and image size.

Combine into a single RUN command:

-RUN pip3 uninstall -y opencv && rm -rf /usr/local/lib/python3*/dist-packages/cv2/
-RUN pip3 install opencv-python-headless --force-reinstall --no-deps --no-cache-dir
+RUN pip3 uninstall -y opencv && \
+    rm -rf /usr/local/lib/python3*/dist-packages/cv2/ && \
+    pip3 install opencv-python-headless --force-reinstall --no-deps --no-cache-dir
scripts/build_wheel.py (3)

123-123: Missing return type annotation for setup_venv function

The function signature was modified to remove the return type annotation, but it still returns a tuple (venv_python, venv_conan). The return type should be preserved for better type safety.

Add the return type annotation:

-def setup_venv(project_dir: Path, requirements_file: Path, no_venv: bool):
+def setup_venv(project_dir: Path, requirements_file: Path, no_venv: bool) -> tuple[Path, Path]:

289-289: Using mutable default argument for List parameter

Using list() as a default argument creates a new list instance for each function call, which is correct but unconventional. The standard Python idiom is to use None as default and initialize inside the function to avoid potential confusion.

Use the standard Python idiom:

-         extra_cmake_vars: List[str] = list(),
+         extra_cmake_vars: List[str] = None,

Then at the beginning of the function:

if extra_cmake_vars is None:
    extra_cmake_vars = []

742-742: Line exceeds maximum length limit

Line 742 exceeds the 120 character limit. Consider breaking it up for better readability.

-                    new_library_path = "/usr/local/cuda/compat:/usr/local/cuda/compat/lib:/usr/local/cuda/compat/lib.real"
+                    new_library_path = (
+                        "/usr/local/cuda/compat:"
+                        "/usr/local/cuda/compat/lib:"
+                        "/usr/local/cuda/compat/lib.real"
+                    )
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0dc4b4e and 49beea1.

📒 Files selected for processing (4)
  • cpp/tensorrt_llm/nanobind/CMakeLists.txt (1 hunks)
  • cpp/tensorrt_llm/pybind/CMakeLists.txt (1 hunks)
  • docker/Dockerfile.multi (1 hunks)
  • scripts/build_wheel.py (5 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py

📄 CodeRabbit Inference Engine (CODING_GUIDELINES.md)

**/*.py: Python code should conform to Python 3.8+.
Indent Python code with 4 spaces. Do not use tabs.
Always maintain the namespace when importing in Python, even if only one class or function from a module is used.
Python filenames should use snake_case (e.g., some_file.py).
Python classes should use PascalCase (e.g., class SomeClass).
Python functions and methods should use snake_case (e.g., def my_awesome_function():).
Python local variables should use snake_case. Prefix k for variable names that start with a number (e.g., k_99th_percentile).
Python global variables should use upper snake_case and prefix G (e.g., G_MY_GLOBAL).
Python constants should use upper snake_case (e.g., MY_CONSTANT).
Avoid shadowing variables declared in an outer scope in Python.
Initialize all externally visible members of a Python class in the constructor.
For interfaces that may be used outside a Python file, prefer docstrings over comments.
Comments in Python should be reserved for code within a function, or interfaces that are local to a file.
Use Google style docstrings for Python classes and functions, which can be parsed by Sphinx.
Attributes and variables in Python can be documented inline; attribute docstrings will be rendered under the class docstring.
Avoid using reflection in Python when functionality can be easily achieved without it.
When using try-except blocks in Python, limit the except to the smallest set of errors possible.
When using try-except blocks to handle multiple possible variable types in Python, keep the body of the try as small as possible, using the else block to implement the logic.

Files:

  • scripts/build_wheel.py
**/*.{cpp,h,hpp,cc,cxx,cu,py}

📄 CodeRabbit Inference Engine (CODING_GUIDELINES.md)

All TensorRT-LLM Open Source Software code should contain an NVIDIA copyright header that includes the current year. This includes .cpp, .h, .cu, .py, and any other source files which are compiled or interpreted.

Files:

  • scripts/build_wheel.py
🪛 Ruff (0.12.2)
scripts/build_wheel.py

742-742: Line too long (122 > 120)

(E501)


752-752: Line too long (126 > 120)

(E501)

🔇 Additional comments (3)
scripts/build_wheel.py (3)

364-364: Good fix for Windows multi-device flag handling

Using extend() instead of concatenation is the correct approach for list operations.


746-763: Robust handling of libnvidia-ml.so detection and symlink creation

The logic correctly handles the case where only the unversioned libnvidia-ml.so exists (common in build containers) by creating a symlink to libnvidia-ml.so.1. This prevents import errors at runtime.


160-191: Well-implemented NVIDIA PyTorch container compatibility checks

The addition of comprehensive checks for NVIDIA PyTorch container compatibility is excellent. It properly:

  1. Detects the container environment via NVIDIA_PYTORCH_VERSION
  2. Validates PyTorch installation and version compatibility
  3. Provides clear error messages and warnings for common issues
  4. Prevents subtle compatibility problems between NVIDIA and PyPI PyTorch distributions

@tensorrt-cicd
Copy link
Collaborator

PR_Github #14919 [ run ] triggered by Bot

@MartinMarciniszyn MartinMarciniszyn enabled auto-merge (squash) August 12, 2025 07:24
@QiJune
Copy link
Collaborator Author

QiJune commented Aug 12, 2025

/bot skip --comment "cpp single GPU tests are good, skip multi-GPU tests to unblock CI"

@MartinMarciniszyn MartinMarciniszyn merged commit 8845e0f into NVIDIA:main Aug 12, 2025
4 of 5 checks passed
@tensorrt-cicd
Copy link
Collaborator

PR_Github #14938 [ ] completed with state FAILURE
Not allowed on merged PR

MartinMarciniszyn added a commit to MartinMarciniszyn/TensorRT-LLM that referenced this pull request Aug 12, 2025
@tensorrt-cicd
Copy link
Collaborator

PR_Github #14919 [ run ] completed with state SUCCESS
/LLM/main/L0_MergeRequest_PR pipeline #11261 completed with status: 'SUCCESS'
Pipeline passed with automatic retried tests. Check the rerun report for details.

MartinMarciniszyn added a commit to MartinMarciniszyn/TensorRT-LLM that referenced this pull request Aug 15, 2025
MartinMarciniszyn added a commit to MartinMarciniszyn/TensorRT-LLM that referenced this pull request Aug 18, 2025
This reverts commit 8845e0f.

Signed-off-by: Martin Marciniszyn Mehringer <11665257+MartinMarciniszyn@users.noreply.github.com>
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.

5 participants