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

[Bug Report] `boot_transformers(hf_model=...)` without `device=` can record the wrong `cfg.device`

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

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

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

2026年10月26日 から。

  • #1949 @tivris による — マージ済み

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
56/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
python, pytorch

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

bug complexity-simple TransformerBridge

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, dev at 34c5d77f.
  • 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.
主要言語
Python
スター
3.9k
フォーク
708
平均マージ
1日 12時間
マージ済み PR(30日)
77

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

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

TransformerLensOrg/TransformerLens のほかの issue

TransformerLensOrg/TransformerLens の issue をすべて見る

似ている issue

Python の issue をもっと見る

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

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