From bcecdbb7b4524a0726472b051a68e51d1505c650 Mon Sep 17 00:00:00 2001 From: pytorchbot Date: Mon, 7 Sep 2026 09:11:44 +0000 Subject: [PATCH] Bump PyTorch pin to nightly dev20260906 --- .ci/docker/ci_commit_pins/pytorch.txt | 2 +- .../c10/c10/util/BFloat16-math.h | 298 +----------------- .../core/portable_type/c10/c10/util/irange.h | 122 +------ .../c10/c10/util/safe_numerics.h | 8 +- .../c10/torch/headeronly/util/BFloat16.h | 2 +- .../c10/torch/headeronly/util/complex.h | 2 +- torch_pin.py | 2 +- 7 files changed, 9 insertions(+), 427 deletions(-) diff --git a/.ci/docker/ci_commit_pins/pytorch.txt b/.ci/docker/ci_commit_pins/pytorch.txt index 6c3fe42ddf3..d86f498522f 100644 --- a/.ci/docker/ci_commit_pins/pytorch.txt +++ b/.ci/docker/ci_commit_pins/pytorch.txt @@ -1 +1 @@ -release/2.14 +071dd4d98ee0ca692fbe0cb3e9f3b95955d73329 diff --git a/runtime/core/portable_type/c10/c10/util/BFloat16-math.h b/runtime/core/portable_type/c10/c10/util/BFloat16-math.h index bce89e8acd9..4410002b9e6 100644 --- a/runtime/core/portable_type/c10/c10/util/BFloat16-math.h +++ b/runtime/core/portable_type/c10/c10/util/BFloat16-math.h @@ -1,299 +1,3 @@ #pragma once -#include -#include - -C10_CLANG_DIAGNOSTIC_PUSH() -#if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion") -C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion") -#endif - -namespace c10 { -template -struct is_reduced_floating_point - : std::integral_constant< - bool, - std::is_same_v || std::is_same_v> {}; - -template -constexpr bool is_reduced_floating_point_v = - is_reduced_floating_point::value; -} // namespace c10 - -namespace std { - -#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) -using c10::is_reduced_floating_point; -using c10::is_reduced_floating_point_v; -#endif // !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) - -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T acos(T a) { - return std::acos(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T asin(T a) { - return std::asin(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T atan(T a) { - return std::atan(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T atanh(T a) { - return std::atanh(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T erf(T a) { - return std::erf(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T erfc(T a) { - return std::erfc(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T exp(T a) { - return std::exp(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T expm1(T a) { - return std::expm1(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline bool isfinite(T a) { - return std::isfinite(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T log(T a) { - return std::log(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T log10(T a) { - return std::log10(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T log1p(T a) { - return std::log1p(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T log2(T a) { - return std::log2(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T ceil(T a) { - return std::ceil(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T cos(T a) { - return std::cos(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T floor(T a) { - return std::floor(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T nearbyint(T a) { - return std::nearbyint(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T sin(T a) { - return std::sin(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T tan(T a) { - return std::tan(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T sinh(T a) { - return std::sinh(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T cosh(T a) { - return std::cosh(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T tanh(T a) { - return std::tanh(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T trunc(T a) { - return std::trunc(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T lgamma(T a) { - return std::lgamma(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T sqrt(T a) { - return std::sqrt(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T rsqrt(T a) { - return 1.0f / std::sqrt(float(a)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T abs(T a) { - return std::abs(float(a)); -} -#if defined(_MSC_VER) && defined(__CUDACC__) -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T pow(T a, double b) { - return std::pow(float(a), float(b)); -} -#else -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T pow(T a, double b) { - return std::pow(float(a), b); -} -#endif -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T pow(T a, T b) { - return std::pow(float(a), float(b)); -} -template < - typename T, - typename std::enable_if_t, int> = 0> -inline T fmod(T a, T b) { - return std::fmod(float(a), float(b)); -} - -/* - The following function is inspired from the implementation in `musl` - Link to License: https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT - ---------------------------------------------------------------------- - Copyright © 2005-2020 Rich Felker, et al. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ---------------------------------------------------------------------- - */ -template < - typename T, - typename std::enable_if_t, int> = 0> -C10_HOST_DEVICE inline T nextafter(T from, T to) { - // Reference: - // https://git.musl-libc.org/cgit/musl/tree/src/math/nextafter.c - using int_repr_t = uint16_t; - constexpr uint8_t bits = 16; - union { - T f; - int_repr_t i; - } ufrom = {from}, uto = {to}; - - // get a mask to get the sign bit i.e. MSB - int_repr_t sign_mask = int_repr_t{1} << (bits - 1); - - // short-circuit: if either is NaN, return NaN - if (from != from || to != to) { - return from + to; - } - - // short-circuit: if they are exactly the same. - if (ufrom.i == uto.i) { - return from; - } - - // mask the sign-bit to zero i.e. positive - // equivalent to abs(x) - int_repr_t abs_from = ufrom.i & ~sign_mask; - int_repr_t abs_to = uto.i & ~sign_mask; - if (abs_from == 0) { - // if both are zero but with different sign, - // preserve the sign of `to`. - if (abs_to == 0) { - return to; - } - // smallest subnormal with sign of `to`. - ufrom.i = (uto.i & sign_mask) | int_repr_t{1}; - return ufrom.f; - } - - // if abs(from) > abs(to) or sign(from) != sign(to) - if (abs_from > abs_to || ((ufrom.i ^ uto.i) & sign_mask)) { - ufrom.i--; - } else { - ufrom.i++; - } - - return ufrom.f; -} - -} // namespace std - -C10_CLANG_DIAGNOSTIC_POP() +#include diff --git a/runtime/core/portable_type/c10/c10/util/irange.h b/runtime/core/portable_type/c10/c10/util/irange.h index cc52d443ee5..c9dd7e574e1 100644 --- a/runtime/core/portable_type/c10/c10/util/irange.h +++ b/runtime/core/portable_type/c10/c10/util/irange.h @@ -1,123 +1,3 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - #pragma once -#include - -#include -#include -#include -#include - -namespace c10 { - -namespace detail { - -template < - typename I, - bool one_sided = false, - std::enable_if_t, int> = 0> -struct integer_iterator { - using iterator_category = std::input_iterator_tag; - using value_type = I; - using difference_type = std::ptrdiff_t; - using pointer = I*; - using reference = I&; - - explicit constexpr integer_iterator(I val) : value(val) {} - - constexpr I operator*() const { - return value; - } - - constexpr I const* operator->() const { - return &value; - } - - constexpr integer_iterator& operator++() { - ++value; - return *this; - } - - constexpr integer_iterator operator++(int) { - const auto copy = *this; - ++*this; - return copy; - } - - constexpr bool operator==(const integer_iterator& other) const { - if constexpr (one_sided) { - // Range-for loops' end test is `begin != end`, not `begin < - // end`. To handle `c10::irange(n)` where n < 0 (which should be - // empty), we just make `begin != end` fail whenever `end` is - // negative. - return is_negative(other.value) || value == other.value; - } else { - return value == other.value; - } - // Suppress "warning: missing return statement at end of non-void function" - // which Nvidia's Robert Crovella confirms is an NVCC compiler error - // here https://stackoverflow.com/a/64561686/752843 on 2020-10-27 - // `__builtin_unreachable();` would be best here, but it's not - // available with all compilers. So we instead return an arbitrary - // value trusting that this line will, in fact, never be reached. - return false; // Horrible hack - } - - constexpr bool operator!=(const integer_iterator& other) const { - return !(*this == other); - } - - protected: - I value; -}; - -} // namespace detail - -template < - typename I, - bool one_sided = false, - std::enable_if_t, bool> = true> -struct integer_range { - public: - constexpr integer_range(I begin, I end) : begin_(begin), end_(end) {} - using iterator = detail::integer_iterator; - constexpr iterator begin() const { - return begin_; - } - constexpr iterator end() const { - return end_; - } - - private: - iterator begin_; - iterator end_; -}; - -/// Creates an integer range for the half-open interval [begin, end) -/// If end<=begin, then the range is empty. -/// The range has the type of the `end` integer; `begin` integer is -/// cast to this type. -template < - typename Integer1, - typename Integer2, - std::enable_if_t, bool> = true, - std::enable_if_t, bool> = true> -constexpr integer_range irange(Integer1 begin, Integer2 end) { - // If end<=begin then the range is empty; we can achieve this effect by - // choosing the larger of {begin, end} as the loop terminator - return { - static_cast(begin), - std::max(static_cast(begin), end)}; -} - -/// Creates an integer range for the half-open interval [0, end) -/// If end<=begin, then the range is empty -template < - typename Integer, - std::enable_if_t, bool> = true> -constexpr integer_range irange(Integer end) { - return {Integer(), end}; -} - -} // namespace c10 +#include diff --git a/runtime/core/portable_type/c10/c10/util/safe_numerics.h b/runtime/core/portable_type/c10/c10/util/safe_numerics.h index bfdb968ff96..f695fa28e77 100644 --- a/runtime/core/portable_type/c10/c10/util/safe_numerics.h +++ b/runtime/core/portable_type/c10/c10/util/safe_numerics.h @@ -8,8 +8,8 @@ // GCC has __builtin_mul_overflow from before it supported __has_builtin #ifdef _MSC_VER #define C10_HAS_BUILTIN_OVERFLOW() (0) -#include #include +#include #else #define C10_HAS_BUILTIN_OVERFLOW() (1) #endif @@ -68,9 +68,7 @@ C10_ALWAYS_INLINE bool mul_overflows(T a, T b, T* out) { // This test isn't exact, but avoids doing integer division *out = a * b; constexpr int bits = sizeof(T) * 8; - return ( - (c10::llvm::countLeadingZeros(a) + c10::llvm::countLeadingZeros(b)) < - bits); + return (std::countl_zero(a) + std::countl_zero(b)) < bits; } #endif } @@ -98,7 +96,7 @@ bool safe_multiplies_u64(It first, It last, uint64_t* out) { prod *= x; // log2(0) isn't valid, so need to track it specially is_zero |= (x == 0); - prod_log2 += c10::llvm::Log2_64_Ceil(x); + prod_log2 += std::bit_width(x - 1); } *out = prod; // This test isn't exact, but avoids doing integer division diff --git a/runtime/core/portable_type/c10/torch/headeronly/util/BFloat16.h b/runtime/core/portable_type/c10/torch/headeronly/util/BFloat16.h index 9aa08c265bd..2c6ce79771a 100644 --- a/runtime/core/portable_type/c10/torch/headeronly/util/BFloat16.h +++ b/runtime/core/portable_type/c10/torch/headeronly/util/BFloat16.h @@ -471,7 +471,7 @@ class numeric_limits { return c10::BFloat16(0x7FC0, c10::BFloat16::from_bits()); } static constexpr c10::BFloat16 signaling_NaN() { - return c10::BFloat16(0x7F80, c10::BFloat16::from_bits()); + return c10::BFloat16(0x7FA0, c10::BFloat16::from_bits()); } static constexpr c10::BFloat16 denorm_min() { return c10::BFloat16(0x0001, c10::BFloat16::from_bits()); diff --git a/runtime/core/portable_type/c10/torch/headeronly/util/complex.h b/runtime/core/portable_type/c10/torch/headeronly/util/complex.h index c349602dcf0..265b2506f14 100644 --- a/runtime/core/portable_type/c10/torch/headeronly/util/complex.h +++ b/runtime/core/portable_type/c10/torch/headeronly/util/complex.h @@ -161,7 +161,7 @@ struct alignas(sizeof(T) * 2) complex { template explicit C10_HOST_DEVICE complex(const thrust::complex& other) : real_(other.real()), imag_(other.imag()) {} -// NOTE can not be implemented as follow due to ROCm bug: +// NOTE can not be implemented as follows due to ROCm bug: // explicit C10_HOST_DEVICE complex(const thrust::complex &other): // complex(other.real(), other.imag()) {} #endif diff --git a/torch_pin.py b/torch_pin.py index f46d5b67ec0..0561b21b913 100644 --- a/torch_pin.py +++ b/torch_pin.py @@ -1,2 +1,2 @@ TORCH_VERSION = "2.14.0" -# NIGHTLY_VERSION = "dev20260318" Temporarily pinning to stable release candidate. Revert https://github.com/pytorch/executorch/pull/18287 +NIGHTLY_VERSION = "dev20260906"