Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Float scalars in float64 programs are rounded to float32 by ScalarToTensorPass

クローズ
#24,167 コメント 0 件 リアクション 0 件 担当者 2 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@JacobSzwejbka がすでに取り組んでいます。

2026年10月27日 から。

  • #24168 @usmanmateen による — マージ済み

評価

この issue はまだ評価されていません。

説明

bug module: exir triaged
🐛 Describe the bug

In a float64 program, ops with a Python float operand lose precision after lowering: the scalar is rounded to float32 before the op runs.

import torch
from executorch.exir import to_edge
from executorch.extension.pybindings.portable_lib import _load_for_executorch_from_buffer


class M(torch.nn.Module):
    def forward(self, x):
        return x * 0.1


x = torch.tensor([1.0, 3.0, 123456.789], dtype=torch.float64)
prog = to_edge(torch.export.export(M(), (x,))).to_executorch()
print(_load_for_executorch_from_buffer(prog.buffer).forward((x,))[0].tolist())
print(M()(x).tolist())
[0.10000000149011612, 0.30000000447034836, 12345.679083964951]
[0.1, 0.30000000000000004, 12345.6789]

The same happens for x + 0.1, x - 0.1, x / 0.1, 0.1 - x and torch.deg2rad(x) (which multiplies by π/180): relative errors of about 1e-9 to 1.5e-8, where float64 should be exact to ~1e-16.

ScalarToTensorPass turns the scalar into torch.tensor(value), which is float32 by default. RemoveMixedTypeOperators then casts that constant to float64 with a _to_dim_order_copy, but by then 0.1 is already 0.10000000149011612. Float32 programs are unaffected.

Creating the constant as float64 when the op already has a float64 tensor operand keeps the value exact, and also drops the _to_dim_order_copy from those graphs. Other dtypes keep the current behavior. I'll open a PR with that.

Versions

executorch 1.5.1 (exir/passes/scalar_to_tensor_pass.py is the same on main at 5b14a2f), torch 2.14.1+cpu, Python 3.12, Linux x86_64 (WSL2).

cc @JacobSzwejbka @angelayi

主要言語
Python
スター
5.1k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
698

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

pytorch/executorch のほかの issue

pytorch/executorch の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。