[torchlib] log2 and log10 lose float64 precision

Cerrado Apto para principiantes
#3,143 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 4 días

@Syedmudassir1604 ya está trabajando en esto.

Desde el 2/11/2026.

  • #3148 de @Syedmudassir1604 — abierto
  • #3151 de @usmanmateen — fusionado

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

Empieza con las implementaciones de torchlib de aten_log2 y aten_log10, que dividen entre un CastLike de la constante float32 Log(2.0) o Log(10.0). Ejecuta el reproductor del issue para ver la desviación de los valores exportados en float64 respecto a la salida de PyTorch. Se da por terminado cuando los valores exportados para n = 8 y n = 1024 coinciden con PyTorch en float64 y torch.floor(torch.log2(n)) da 3 y 10.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

In a float64 model, torch.log2 and torch.log10 export with only about float32 accuracy, so whole-number results come out just below the whole number:

import torch

class Model(torch.nn.Module):
    def forward(self, x):
        return torch.log2(x), torch.log10(x)

x = torch.tensor([8.0, 1000.0], dtype=torch.float64)
onnx_program = torch.onnx.export(Model(), (x,), dynamo=True)
torch.set_printoptions(precision=17)
print(*onnx_program(x))  # [2.99999999175649368, 9.96578425727775219]  [0.90308997445095363, 2.99999995833973321]
print(*Model()(x))       # [3.00000000000000000, 9.96578428466208699]  [0.90308998699194354, 3.00000000000000000]

aten_log2 and aten_log10 divide by op.CastLike(op.Log(2.0), self). Log runs on a float32 constant and only the result is cast, so the graph holds 0.6931471824645996 instead of log(2) = 0.6931471805599453 as a float64 initializer, and every result is off by about 3e-9 relative. That's within the 1e-7 float64 tolerance of assert_onnx_program, which is why the op tests pass.

It matters wherever the result is floored or compared, for example torch.floor(torch.log2(n)) for a bit length or a number of levels: the exported model gives 2 for n = 8 and 9 for n = 1024, where PyTorch gives 3 and 10.

Versions: onnxscript 0.7.2 and main (682b59de), torch 2.14.1, onnxruntime 1.31.0, Linux, CPU.

Lenguaje dominante
Python
Estrellas
457
Forks
149
Merge medio
3 d 16 h
PR fusionados (30 d)
24

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/onnxscript

Todos los issues de microsoft/onnxscript

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.