[Bug Report] `boot_transformers(hf_model=...)` without `device=` can record the wrong `cfg.device`
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 56/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Área
- backend, machine-learning
Línea de trabajo
Start in transformer_lens/model_bridge/sources/transformers/source.py at the device selection and pre-loaded model fallback noted in the report. Compare that flow with build_bridge_from_module, which takes cfg.device from the model. Reproduce with a pre-loaded model on a different device and check bridge calls, run_with_hooks, and generate; done when cfg.device matches the weights' device and those calls no longer fail.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
Without device=, TransformerBridge.boot_transformers(..., hf_model=model) keeps cfg.device at get_device() unless the model has an hf_device_map, but never moves the model. When the weights are on another device, calls that move their inputs to cfg.device fail, including bridge("text"), run_with_hooks on text and generate. run_with_cache with a single-string input works, because it moves the tokenized inputs to the weights' device.
Code example
from transformers import AutoModelForCausalLM
from transformer_lens.model_bridge import TransformerBridge
hf_model = AutoModelForCausalLM.from_pretrained("gpt2").to("mps")
bridge = TransformerBridge.boot_transformers("gpt2", hf_model=hf_model)
print(bridge.cfg.device) # cpu
bridge("Hello world")
# RuntimeError: Placeholder storage has not been allocated on MPS device!
Loading with device_map="auto" instead of .to("mps") fails the same way, because a single-device load sets no hf_device_map. A model left on the CPU, where from_pretrained puts it by default, fails with TRANSFORMERLENS_ALLOW_MPS=1 (cfg.device is mps). On a CUDA machine, get_device() returns cuda, so the same CPU model gets cfg.device cuda.
System Info
- Source checkout installed with
uv,devat34c5d77f. - macOS 27.2, Apple M5; Python 3.12.14; PyTorch 2.11.0; transformers 5.13.0; CPU and MPS.
Additional context
The get_device() default applies whenever no device map resolves (transformer_lens/model_bridge/sources/transformers/source.py:261-264), which is always the case with hf_model=, since device_map, n_devices and max_memory are rejected alongside it. The fallback for a pre-loaded model without an hf_device_map, which reads its first parameter (:414-419), only runs while cfg.device is None, which it never is here. build_bridge_from_module already takes cfg.device from the model.
Proposed fix: call get_device() only when boot_transformers loads the model itself, so that cfg.device stays None for hf_model without device= until it is read from the model after the load. An explicit device= keeps its current behavior: it is recorded but not applied to a pre-loaded model.
The MODEL_PATH cells in demos/LLaMA.ipynb and demos/LLaMA_GPU_Quantized.ipynb load the model on the CPU and pass device=device, so on CUDA or MPS their generate call gets inputs on the accelerator and weights on the CPU. Should boot_transformers move a pre-loaded model to an explicit device=?
Checklist
- I have checked that there is no similar issue in the repo.
- Lenguaje dominante
- Python
- Estrellas
- 3.9k
- Forks
- 708
- Merge medio
- 2 d 3 h
- PR fusionados (30 d)
- 88
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
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 TransformerLensOrg/TransformerLens
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
TransformerLensOrg/TransformerLens#1939 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Proposal] Whisper adapter for TransformerBridgePosiblemente ocupada @dipo101 la tomó hace 3 días. Abiertocomplexity-moderate new-architecture TransformerBridge
TransformerLensOrg/TransformerLens#1938 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
[Bug Report] Granite MoE Hybrid grouped experts produce incorrect or unstable outputs on MPSPosiblemente ocupada @janmenjayap la tomó hace 14 días. Abiertobug complexity-simple TransformerBridge
TransformerLensOrg/TransformerLens#1886 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Community Feedback Requested Research Reproduction seen_by_maintainers TransformerBridge
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
TransformerLensOrg/TransformerLens#1884 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
[Proposal] Contextual Decomposition: Nonlinear Source Attribution and Dataset-Wide Ranking on GPT-2AbiertoCommunity Feedback Requested Research Reproduction seen_by_maintainers
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
TransformerLensOrg/TransformerLens#1883 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de TransformerLensOrg/TransformerLens
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
nansencenter/geodataset#39 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
awslabs/visual-asset-management-system#804 ·
Los mantenedores suelen responder en 1 día
-
follow-up
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
[18.0] werkzeug: AttributeErrorAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
odoo/odoo#297927 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
link-rot
Dificultad 1/5 Menos de una hora Aptitud para principiantes 67/100