[Bug] [Relax][ONNX] OneHot does not convert floating-point depth to int64
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- machine-learning
Línea de trabajo
Empieza en python/tvm/relax/frontend/onnx/onnx_frontend.py, en el convertidor OneHot enlazado en el issue, y compara cómo maneja la profundidad entera y la de coma flotante. Ejecuta la reproducción proporcionada con una instalación de TVM habilitada para LLVM; se considera terminado cuando ambos tipos de profundidad se convierten y producen la salida esperada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Expected behavior
OneHot-11 permits floating-point depth and requires converting it to int64 before use. Depth 3.0 should behave like int64 3.
Actual behavior
The int64-depth control executes correctly. Changing only depth to float32 fails during conversion:
TypeError: Cannot convert from type `float` to `int`
The converter passes the result of depth.value.numpy().tolist() directly as num_classes. The final Cast keeps the output dtype explicit.
Environment
TVM 0.28.dev0, LLVM 18.1.3, Linux x86_64; Python 3.12.3, NumPy 2.5.4, ONNX 1.22.0, ORT 1.29.0. The installed binary build revision is unknown; current main was inspected statically, not rebuilt.
Steps to reproduce
Run with an LLVM-enabled TVM installation:
import numpy as np
import onnx
import tvm
from onnx import TensorProto as T, helper as h, numpy_helper as nh
from onnx.reference import ReferenceEvaluator
from tvm import relax
from tvm.relax.frontend.onnx import from_onnx
x = np.array([0, 2], dtype="int64")
expected = np.array([[1, 0, 0], [0, 0, 1]], dtype="float32")
for depth_dtype in ("int64", "float32"):
model = h.make_model(h.make_graph([
h.make_node("OneHot", ["x", "depth", "values"], ["raw"]),
h.make_node("Cast", ["raw"], ["y"], to=T.FLOAT)], "onehot",
[h.make_tensor_value_info("x", T.INT64, [2])],
[h.make_tensor_value_info("y", T.FLOAT, [2, 3])],
[nh.from_array(np.array(3, dtype=depth_dtype), "depth"),
nh.from_array(np.array([0, 1], dtype="float32"), "values")]),
opset_imports=[h.make_opsetid("", 11)], ir_version=10)
onnx.checker.check_model(model, full_check=True)
np.testing.assert_array_equal(ReferenceEvaluator(model).run(None, {"x": x})[0], expected)
try:
mod = from_onnx(model, keep_params_in_input=False)
vm = relax.VirtualMachine(relax.build(mod, target="llvm"), tvm.cpu())
np.testing.assert_array_equal(vm["main"](tvm.runtime.tensor(x)).numpy(), expected)
print(depth_dtype, "control passed")
except Exception as error:
if depth_dtype == "int64":
raise
print(depth_dtype, type(error).__name__, str(error).splitlines()[-1])
Triage
- needs-triage
- Lenguaje dominante
- Python
- Estrellas
- 13.9k
- Forks
- 4k
- Merge medio
- 8 h 2 min
- PR fusionados (30 d)
- 180
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/tvm
-
needs-triage type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
Los mantenedores suelen responder en 1 día
-
needs-triage type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
needs-triage type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
[Bug][Relax] ReorderTakeAfterMatmul fails on vector dot productsPosiblemente ocupada @hiyufan la tomó hace 10 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
apache/tvm#20595 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
needs-triage type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
Todos los issues de apache/tvm
Issues similares
-
area:docs documentation effort:M ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
mczielinski/ob-analytics#423 ·
Los mantenedores suelen responder en 1 día
-
flaky: test_ci_eval_scope_exclude never-matches case spends its 1s budget on the rollout waitAbiertoneeds-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
gke-labs/kube-agents#4838 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
danyuchn/asd-ste100-skill#60 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 64/100
Gathin23/cleanyourtv#3299 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
autowarefoundation/autoware_carla_scenario#1485 ·
Los mantenedores suelen responder en 1 día