Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
78b66f3
Pin katex to the last release the docs image's node can run
pytorchbot Sep 3, 2026
a4f3724
Build PyTorch from source on macOS the way PyTorch now expects
pytorchbot Sep 3, 2026
3824707
Run the ROCm jobs on the ROCm version that has this PyTorch
pytorchbot Sep 3, 2026
444aea9
Accept the derived shim spelling for the Metal custom ops
pytorchbot Sep 3, 2026
b0e5861
Build only the ATen-mode Buck targets as C++20
pytorchbot Sep 3, 2026
e391761
Bump the PyTorch pin to 2.14
pytorchbot Sep 3, 2026
206db24
Accept the derived shim spelling for the CUDA int4 pack matmul
pytorchbot Sep 3, 2026
cc663a7
Build the Vulkan op tests as C++20, which ATen now requires
pytorchbot Sep 3, 2026
15928ed
Let the PyTorch source build use the image's cmake, so it finds BLAS …
pytorchbot Sep 3, 2026
6735cc4
Stop the image build scanning for C++20 modules it does not have scan…
pytorchbot Sep 3, 2026
e99879a
Add the two AOTI shims PyTorch 2.14 links against, and export all three
pytorchbot Sep 3, 2026
1174a16
Pin the CUDA fallback kernel the backend just started advertising
pytorchbot Sep 3, 2026
e1f33f9
Pin the other direction of the moved overflow boundary
pytorchbot Sep 3, 2026
b750eed
Shorten the comments added by this stack
pytorchbot Sep 3, 2026
380a40d
Update the cortex-m expectations 2.14 changes
pytorchbot Sep 3, 2026
3ff10a3
Sort lifted constants with the other constants when building a delegate
pytorchbot Sep 3, 2026
5d0b30b
Share the observer across dropout, which is an identity in eval mode
pytorchbot Sep 3, 2026
286cd1a
Update the operator counts 2.14 changes, measured not guessed
pytorchbot Sep 3, 2026
6c6ad01
Make the two new shims answer correctly, and pin the ATen test standard
pytorchbot Sep 4, 2026
b4134d2
Close the rest of the review findings on this stack
pytorchbot Sep 4, 2026
d3b3763
Correct the build and shim work this change adds
pytorchbot Sep 4, 2026
5ada9cf
Say what the tests and comments actually check
pytorchbot Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci/docker/ci_commit_pins/pytorch.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
release/2.13
release/2.14
4 changes: 3 additions & 1 deletion .ci/docker/common/install_docs_reqs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ if [ -n "$BUILD_DOCS" ]; then

apt-get update
apt-get install -y --no-install-recommends yarn
yarn global add katex --prefix /usr/local
# katex 0.18.5 requires commander@15 / node >= 22.12; pin to the last
# release compatible with the node 16 installed above
yarn global add katex@0.18.4 --prefix /usr/local

sudo apt-get -y install doxygen

Expand Down
20 changes: 15 additions & 5 deletions .ci/docker/common/install_pytorch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -76,21 +76,31 @@ install_pytorch_and_domains() {
# the image compiler cannot satisfy. The venv inherits the image's
# site-packages, so PyTorch still builds against the same numpy.
#
# Keep the list in sync with pytorch/pyproject.toml [build-system].requires.
# Keep in sync with pytorch/pyproject.toml [build-system].requires.
local build_venv=/tmp/pytorch-build-venv
rm -rf "${build_venv}"
conda_run python -m venv --system-site-packages "${build_venv}"
# No pip cmake: scikit-build-core would prefer it over the image's, and it
# searches site-packages, where MKL and libomp are not.
conda_run "${build_venv}/bin/pip" install build "scikit-build-core>=1.0" \
"setuptools>=77.0.0,<82" "cmake>=3.27,<4" ninja "packaging>=24.2" \
"typing-extensions>=4.10.0" pyyaml six
conda_run "${build_venv}/bin/python" -m build --wheel --no-isolation
ninja "packaging>=24.2" "typing-extensions>=4.10.0" pyyaml six numpy
# These images have no module scanner, and nothing here uses modules.
conda_run env CMAKE_CXX_SCAN_FOR_MODULES=OFF \
"${build_venv}/bin/python" -m build --wheel --no-isolation
rm -rf "${build_venv}"
pip_install "$(echo dist/*.whl)"

# A build with no BLAS succeeds silently. Run from / to import the wheel.
(cd / && conda_run python -c "
import torch
assert torch._C.has_lapack, 'built without LAPACK'
torch.linalg.qr(torch.randn(4, 4))
")

# Grab the pinned audio and vision commits from PyTorch
TORCHAUDIO_VERSION=release/2.11
export TORCHAUDIO_VERSION
TORCHVISION_VERSION=release/0.28
TORCHVISION_VERSION=release/0.29
export TORCHVISION_VERSION

install_domains
Expand Down
2 changes: 1 addition & 1 deletion .ci/scripts/test-rocm-aoti.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

set -euo pipefail

ROCM_VERSION="${ROCM_VERSION:-7.1}"
ROCM_VERSION="${ROCM_VERSION:-7.2}"
ROCM_PATH="${ROCM_PATH:-/opt/rocm}"
PYTORCH_ROCM_INDEX="${PYTORCH_ROCM_INDEX:-https://download.pytorch.org/whl/test/rocm${ROCM_VERSION}}"
TORCHAO_ROCM_WHEEL_BASE="${TORCHAO_ROCM_WHEEL_BASE:-https://download.pytorch.org/whl/nightly/rocm${ROCM_VERSION}}"
Expand Down
2 changes: 1 addition & 1 deletion .ci/scripts/test-rocm-voxtral.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

set -euo pipefail

ROCM_VERSION="${ROCM_VERSION:-7.1}"
ROCM_VERSION="${ROCM_VERSION:-7.2}"
ROCM_PATH="${ROCM_PATH:-/opt/rocm}"
EXPECTED_ROCM_ARCH="${EXPECTED_ROCM_ARCH:-gfx950}"
EXPECTED_WARP_SIZE="${EXPECTED_WARP_SIZE:-64}"
Expand Down
33 changes: 23 additions & 10 deletions .ci/scripts/utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ install_pytorch_and_domains() {
local python_version=$(python -c 'import platform; v=platform.python_version_tuple(); print(f"{v[0]}{v[1]}")')
local torch_release=$(cat version.txt)
# Download key must match the upload key below (basename of dist/*.whl,
# which always carries setup.py's resolved +gitHASH). Branch-ref pins
# like `release/2.13` would otherwise produce `+gitrelease` here and
# which always carries the build's resolved +gitHASH). Branch-ref pins
# like `release/2.14` would otherwise produce `+gitrelease` here and
# never hit the cache.
local torch_short_hash=$(git rev-parse --short=7 HEAD)
local torch_wheel_path="cached_artifacts/pytorch/executorch/pytorch_wheels/${system_name}/${python_version}"
Expand All @@ -127,18 +127,31 @@ install_pytorch_and_domains() {
if [[ "${torch_wheel_not_found}" == "1" ]]; then
echo "No cached wheel found, continue with building PyTorch at ${TORCH_VERSION}"

# Install PyTorch's own build-time deps so the source build does not
# silently inherit them from whatever else happens to be in the env
# (e.g. executorch's requirements-ci.txt).
pip install -r requirements-build.txt
git submodule update --init --recursive
if [[ "$(uname -m)" == "aarch64" ]]; then
export BUILD_IGNORE_SVE_UNAVAILABLE=1
fi
USE_DISTRIBUTED=1 python setup.py bdist_wheel
# PyTorch dropped setup.py. Build in a throwaway environment that can see the
# active one, so its build requirements, which pin a cmake that would be
# preferred over the one on PATH, cannot disturb what is installed here.
#
# Keep in sync with pytorch/pyproject.toml [build-system].requires.
local build_venv=/tmp/pytorch-build-venv
rm -rf "${build_venv}"
python -m venv --system-site-packages "${build_venv}"
"${build_venv}/bin/pip" install build "scikit-build-core>=1.0" ninja \
"packaging>=24.2" "typing-extensions>=4.10.0" pyyaml six numpy
USE_DISTRIBUTED=1 "${build_venv}/bin/python" -m build --wheel --no-isolation
rm -rf "${build_venv}"
pip install "$(echo dist/*.whl)"

# Invariant: the basename setup.py just produced must match the cache
# A build with no BLAS succeeds silently, so check rather than assume.
(cd / && python -c "
import torch
assert torch._C.has_lapack, 'built without LAPACK'
torch.linalg.qr(torch.randn(4, 4))
")

# Invariant: the basename the build just produced must match the cache
# URL we'd reconstruct on the next run. If they diverge (someone edits
# torch_wheel_name above, or PyTorch renames its wheels), the cache
# will silently miss and every macOS run will fall back to a ~30-min
Expand Down Expand Up @@ -178,7 +191,7 @@ install_pytorch_and_domains() {
# Grab the pinned audio and vision commits from PyTorch
TORCHAUDIO_VERSION=release/2.11
export TORCHAUDIO_VERSION
TORCHVISION_VERSION=release/0.28
TORCHVISION_VERSION=release/0.29
export TORCHVISION_VERSION

install_domains
Expand Down
2 changes: 1 addition & 1 deletion .ci/scripts/wheel/test_cpp_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -991,7 +991,7 @@ def test_every_shipped_header_compiles(work_dir: Path) -> None:
# These say in their own text that they must not be included directly, and name the header to
# include instead. Including one anyway is a use error rather than a packaging defect.
"c10/util/complex_math.h",
"c10/util/complex_utils.h",
"torch/headeronly/util/complex_utils.h",
)

source = work_dir / "header_probe.cpp"
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/rocm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ jobs:
strategy:
fail-fast: false
matrix:
rocm-version: ["7.1"]
rocm-version: ["7.2"]
uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main
permissions:
id-token: write
Expand Down Expand Up @@ -206,7 +206,7 @@ jobs:
strategy:
fail-fast: false
matrix:
rocm-version: ["7.1"]
rocm-version: ["7.2"]
with:
timeout: 180
no-sudo: true
Expand Down Expand Up @@ -248,7 +248,7 @@ jobs:
strategy:
fail-fast: false
matrix:
rocm-version: ["7.1"]
rocm-version: ["7.2"]
with:
timeout: 180
no-sudo: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/windows-msvc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ jobs:

- name: Install build dependencies
shell: pwsh
run: python -m pip install pyyaml torch==2.13.0 --extra-index-url https://download.pytorch.org/whl/test/cpu
run: python -m pip install pyyaml torch==2.14.0 --extra-index-url https://download.pytorch.org/whl/test/cpu

- name: Build ExecuTorch
shell: pwsh
Expand Down
5 changes: 5 additions & 0 deletions backends/aoti/common_shims.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ AOTITorchError aoti_torch_get_numel(Tensor* tensor, int64_t* ret_numel) {
return Error::Ok;
}

AOTITorchError aoti_torch_is_defined(Tensor* tensor, bool* ret_is_defined) {
*ret_is_defined = tensor != nullptr;
return Error::Ok;
}

// Device and layout utility functions
int32_t aoti_torch_device_type_cpu() {
// Let's say cpu is 0 for ET as well
Expand Down
4 changes: 4 additions & 0 deletions backends/aoti/common_shims.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ aoti_torch_get_dim(Tensor* tensor, int64_t* ret_dim);
AOTI_SHIM_EXPORT AOTITorchError
aoti_torch_get_numel(Tensor* tensor, int64_t* ret_numel);

// PyTorch has an undefined-tensor state with no equivalent here: null check.
AOTI_SHIM_EXPORT AOTITorchError
aoti_torch_is_defined(Tensor* tensor, bool* ret_is_defined);

// Utility functions for device and layout information
AOTI_SHIM_EXPORT int32_t aoti_torch_device_type_cpu();
AOTI_SHIM_EXPORT int32_t aoti_torch_layout_strided();
Expand Down
8 changes: 8 additions & 0 deletions backends/aoti/common_shims_slim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@ AOTITorchError aoti_torch_get_numel(Tensor* tensor, int64_t* ret_numel) {
return Error::Ok;
}

AOTITorchError aoti_torch_is_defined(Tensor* tensor, bool* ret_is_defined) {
if (ret_is_defined == nullptr) {
return Error::InvalidArgument;
}
*ret_is_defined = tensor != nullptr && tensor->defined();
return Error::Ok;
}

int32_t aoti_torch_layout_strided() {
// Slimtensor only support strided layout, the return value will always be 0,
// a.k.a at::Layout::Strided;
Expand Down
4 changes: 4 additions & 0 deletions backends/aoti/common_shims_slim.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ aoti_torch_get_dim(Tensor* tensor, int64_t* ret_dim);
AOTI_SHIM_EXPORT AOTITorchError
aoti_torch_get_numel(Tensor* tensor, int64_t* ret_numel);

// Undefined means either a null handle or a tensor whose storage was released.
AOTI_SHIM_EXPORT AOTITorchError
aoti_torch_is_defined(Tensor* tensor, bool* ret_is_defined);

AOTI_SHIM_EXPORT int32_t aoti_torch_layout_strided();

// ============================================================
Expand Down
8 changes: 8 additions & 0 deletions backends/apple/metal/metal_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,24 @@ def get_device_name(cls) -> str:
@classmethod
def get_supported_fallback_kernels(cls) -> Dict[str, Any]:
return {
# An operator named the way it is registered also needs the name
# Inductor derives for it, so several appear under both.
"aoti_torch_mps_addmm_out": None,
"aoti_torch_mps_bmm_out": None,
"aoti_torch_mps_convolution": None,
"aoti_torch_mps_mm_out": None,
"at::_ops::_scaled_dot_product_attention_math_for_mps::call": None,
"aoti_torch_mps__scaled_dot_product_attention_math_for_mps": None,
"at::_ops::_scaled_dot_product_attention_math_for_mps_v2::call": None,
"aoti_torch_mps__scaled_dot_product_attention_math_for_mps_v2": None,
"torchao::_linear_fp_act_4bit_weight": None,
"aoti_torch_mps__linear_fp_act_4bit_weight": None,
"at::_ops::topk::call": None,
"aoti_torch_mps_topk": None,
"metal::gather_qmv": None,
"aoti_torch_mps_gather_qmv": None,
"metal::gated_delta_rule": None,
"aoti_torch_mps_gated_delta_rule": None,
}

@classmethod
Expand Down
2 changes: 1 addition & 1 deletion backends/arm/test/misc/test_transpose_counts.py
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ def forward(self, x: torch.Tensor):
"groupnorm_channels_last": TransposeCountCase(
GroupNormModule(),
(torch.randn(1, 4, 4, 4).to(memory_format=torch.channels_last),),
2,
1,
),
"cumsum_rank4_dim3_channels_last": TransposeCountCase(
CumsumModule(),
Expand Down
5 changes: 4 additions & 1 deletion backends/cortex_m/test/misc/test_portable_int8.py
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,10 @@ def _quantize_and_export(
OP_CASES,
xfails=xfails,
strict=False,
skips={"while_loop": "Has been observed to hang randomly."},
skips={
"while_loop": "Has been observed to hang randomly.",
"dropout": "Not training, so it folds away and no node survives to carry int8.",
},
)
def test_shared_qspec_portable_int8_ops(op_case: OpCase) -> None:
tester = CortexMTester(op_case.module, op_case.example_inputs)
Expand Down
18 changes: 13 additions & 5 deletions backends/cortex_m/test/models/test_ds_cnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,20 @@
"executorch_exir_dialects_edge__ops_aten_linear_default": 1,
"executorch_exir_dialects_edge__ops_aten_relu_default": 9,
"executorch_exir_dialects_edge__ops_aten_view_copy_default": 1,
"executorch_exir_dialects_edge__ops_dim_order_ops__clone_dim_order_default": 2,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why did these get removed? Not complaining, just curious. :)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good question, and worth writing down.

On PyTorch 2.14 these graphs no longer contain a dim order clone at all, so the
count cannot match any number. The check is an exact-count assertion, so the entry
has to go rather than change value.

Two things I checked before deleting them, since a vanished op can also mean
something upstream silently stopped working:

The same tests pass on the base branch with these entries present, so this is the
new PyTorch changing the graph rather than an existing problem.

It is not caused by either of the recent dim order passes on main, the one that
removes non-contiguous dim order and the one that replaces input dim order clones
with permutations. Both are already in the base commit, and these tests are green
there.

If the clone is expected to survive for this backend, then this is worth a closer
look rather than a test update, and I am happy to dig further. From what I can see
the clone was only there to make the input contiguous, and 2.14 gets to the same
graph without it, so dropping the expectation looks right.

"executorch_exir_dialects_edge__ops_quantized_decomposed_dequantize_per_channel_default": 18,
"executorch_exir_dialects_edge__ops_quantized_decomposed_dequantize_per_tensor_default": 17,
"executorch_exir_dialects_edge__ops_quantized_decomposed_quantize_per_tensor_default": 15,
}

ops_after_transforms: dict[str, int] = {
"executorch_exir_dialects_edge__ops_aten_view_copy_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_dequantize_per_tensor_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_dequantize_per_tensor_default": 3,
"executorch_exir_dialects_edge__ops_cortex_m_pad_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_quantize_per_tensor_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_quantize_per_tensor_default": 3,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_avg_pool2d_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_conv2d_default": 4,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_depthwise_conv2d_default": 5,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_linear_default": 1,
"executorch_exir_dialects_edge__ops_dim_order_ops__clone_dim_order_default": 2,
}

test_cases = {
Expand All @@ -43,11 +41,21 @@
}


ops_absent_after_transforms: list[str] = [
"executorch_exir_dialects_edge__ops_dim_order_ops__clone_dim_order_default",
]


@parametrize("test_case", test_cases)
def test_dialect_ds_cnn(test_case):
inputs = test_case.get_example_inputs()
tester = CortexMTester(test_case.model, inputs)
tester.test_dialect(ops_before_transforms, ops_after_transforms, qtol=1)
tester.test_dialect(
ops_before_transforms,
ops_after_transforms,
qtol=1,
ops_absent_after_transforms=ops_absent_after_transforms,
)


@parametrize("test_case", test_cases)
Expand Down
12 changes: 8 additions & 4 deletions backends/cortex_m/test/models/test_mobilenet_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,20 @@
"executorch_exir_dialects_edge__ops_aten_hardtanh_default": 35,
"executorch_exir_dialects_edge__ops_aten_linear_default": 1,
"executorch_exir_dialects_edge__ops_aten_view_copy_default": 1,
"executorch_exir_dialects_edge__ops_dim_order_ops__clone_dim_order_default": 1,
"executorch_exir_dialects_edge__ops_quantized_decomposed_dequantize_per_channel_default": 104,
"executorch_exir_dialects_edge__ops_quantized_decomposed_dequantize_per_tensor_default": 79,
"executorch_exir_dialects_edge__ops_quantized_decomposed_quantize_per_tensor_default": 67,
}

ops_after_transforms: dict[str, int] = {
"executorch_exir_dialects_edge__ops_aten_view_copy_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_dequantize_per_tensor_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_quantize_per_tensor_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_dequantize_per_tensor_default": 2,
"executorch_exir_dialects_edge__ops_cortex_m_quantize_per_tensor_default": 2,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_add_default": 10,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_avg_pool2d_default": 1,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_conv2d_default": 35,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_depthwise_conv2d_default": 17,
"executorch_exir_dialects_edge__ops_cortex_m_quantized_linear_default": 1,
"executorch_exir_dialects_edge__ops_dim_order_ops__clone_dim_order_default": 1,
}

# Use larger sample set for calibration to get better quantization
Expand All @@ -54,6 +52,11 @@
}


ops_absent_after_transforms: list[str] = [
"executorch_exir_dialects_edge__ops_dim_order_ops__clone_dim_order_default",
]


@parametrize("test_case", test_cases)
def test_dialect_mv2(test_case):
inputs = test_case.get_example_inputs()
Expand All @@ -63,6 +66,7 @@ def test_dialect_mv2(test_case):
ops_after_transforms,
qtol=10,
calibration_samples=calibration_samples,
ops_absent_after_transforms=ops_absent_after_transforms,
)

# assert that top 1 output matches
Expand Down
4 changes: 3 additions & 1 deletion backends/cortex_m/test/tester.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ def test_dialect(
qtol=0,
atol=1e-03,
calibration_samples=None,
ops_absent_after_transforms=None,
):
"""
Test the python dialect op implementation.
Expand All @@ -142,13 +143,14 @@ def test_dialect(
)
else:
quantization_stage = None

self.quantize(quantization_stage)
self.export()
self.to_edge()
self.check_count(ops_before_transforms)
self.run_passes()
self.check_count(ops_after_transforms)
if ops_absent_after_transforms:
self.check_not(ops_absent_after_transforms)
self.run_method_and_compare_outputs(
inputs=self.example_inputs, qtol=qtol, atol=atol
)
Expand Down
3 changes: 3 additions & 0 deletions backends/cuda/cuda_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,10 @@ def get_supported_fallback_kernels(cls) -> Dict[str, Any]:
return {}
return {
"at::_ops::_weight_int4pack_mm::call": None,
# Also under the shim name Inductor derives for it.
"aoti_torch_cuda__weight_int4pack_mm": None,
"at::_ops::sort_stable::call": None,
"aoti_torch_cuda_sort_stable": None,
"aoti_torch_cuda_randint_low_out": None,
"executorch_cuda::int4_plain_mm": None,
"aoti_torch_cuda_int4_plain_mm": None,
Expand Down
Binary file modified backends/cuda/runtime/aoti_cuda_shims.lib
Binary file not shown.
Loading
Loading