Трансформеры Класс LlamaForCasualLM: Тайна атрибута base_modelPython

Программы на Python
Ответить
Anonymous
 Трансформеры Класс LlamaForCasualLM: Тайна атрибута base_model

Сообщение Anonymous »

Вопрос:
У меня возникла проблема с библиотекой преобразователей, в частности с инициализацией конвейера. Когда я обращаюсь к атрибуту base_model модели LlamaForCausalLM, кажется, что она повторяется бесконечно.
Вот пример того, что я вижу:

Код: Выделить всё

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

# let's rock the smallest model on hf
MODEL_NAME = "arnir0/Tiny-LLM"

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)

INPUT = ["the secret to baking a really good cake is ", "a baguette is "]

if __name__ == "__main__":
pipeline = pipeline(
task="text-generation",
model=MODEL_NAME,
device="mps"
)
for out in pipeline(INPUT):
print(out[0]["generated_text"])
Я отлаживаю демо-версию с использованием библиотеки преобразователей в VSCode, и у меня возник вопрос, связанный с функцией конвейера. В частности, когда я создаю конвейер с помощью конвейера("text-generation"), он возвращает объект Pipeline_class с атрибутом model.
Проверив атрибут model, я замечаю, что это экземпляр LlamaForCausalLM, который имеет атрибут base_model, указывающий на LlamaModel. Однако, когда я обращаюсь к атрибуту base_model LlamaModel, кажется, что он повторяется бесконечно, при этом атрибут base_model указывает на другой (или сам?) объект LlamaModel.

Код: Выделить всё

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
>>> MODEL_NAME = "arnir0/Tiny-LLM"
>>> tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
>>> model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
>>> INPUT = ["the secret to baking a really good cake is ", "a baguette is "]
>>> pipeline = pipeline(task="text-generation", model=MODEL_NAME, device="mps")
Device set to use mps
>>> model = pipeline.model
>>> model.base_model
LlamaModel(
(embed_tokens): Embedding(32000, 192)
(layers): ModuleList(
(0): LlamaDecoderLayer(
(self_attn): LlamaAttention(
(q_proj): Linear(in_features=192, out_features=192, bias=False)
(k_proj): Linear(in_features=192, out_features=96, bias=False)
(v_proj): Linear(in_features=192, out_features=96, bias=False)
(o_proj): Linear(in_features=192, out_features=192, bias=False)
)
(mlp): LlamaMLP(
(gate_proj): Linear(in_features=192, out_features=1024, bias=False)
(up_proj): Linear(in_features=192, out_features=1024, bias=False)
(down_proj): Linear(in_features=1024, out_features=192, bias=False)
(act_fn): SiLUActivation()
)
(input_layernorm): LlamaRMSNorm((192,), eps=1e-05)
(post_attention_layernorm): LlamaRMSNorm((192,), eps=1e-05)
)
)
(norm): LlamaRMSNorm((192,), eps=1e-05)
(rotary_emb): LlamaRotaryEmbedding()
)
>>> model.base_model.base_model
LlamaModel(
(embed_tokens): Embedding(32000, 192)
(layers): ModuleList(
(0): LlamaDecoderLayer(
(self_attn): LlamaAttention(
(q_proj): Linear(in_features=192, out_features=192, bias=False)
(k_proj): Linear(in_features=192, out_features=96, bias=False)
(v_proj): Linear(in_features=192, out_features=96, bias=False)
(o_proj): Linear(in_features=192, out_features=192, bias=False)
)
(mlp): LlamaMLP(
(gate_proj): Linear(in_features=192, out_features=1024, bias=False)
(up_proj): Linear(in_features=192, out_features=1024, bias=False)
(down_proj): Linear(in_features=1024, out_features=192, bias=False)
(act_fn): SiLUActivation()
)
(input_layernorm): LlamaRMSNorm((192,), eps=1e-05)
(post_attention_layernorm): LlamaRMSNorm((192,), eps=1e-05)
)
)
(norm): LlamaRMSNorm((192,), eps=1e-05)
(rotary_emb): LlamaRotaryEmbedding()
)
Мои вопросы:
  • Завершится ли этот рекурсивный цикл? Есть ли условие, которое разорвет цикл или он будет продолжаться бесконечно?
  • Почему атрибут модели застревает в этом цикле? Это конструктивный выбор в библиотеке преобразователей, или есть какая-то особая особенность причина такого поведения?
  • Связано ли рекурсивное поведение атрибута model с model.config? Я проверил model.config, и он кажется нормальным, но я не уверен, есть ли между ними связь.
Среда:
  • Python 3.13
  • трансформеры 4.57.1
  • torch 2.9.1
  • sentencepiece 0.2.1
  • токенизаторы 0.22.1
  • uv 0.7.22
  • VSCode: 1.106.0, Arm64


Подробнее здесь: https://stackoverflow.com/questions/798 ... te-mystery
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»