Вопрос:
У меня возникла проблема с библиотекой преобразователей, в частности с инициализацией конвейера. Когда я обращаюсь к атрибуту 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.
Завершится ли этот рекурсивный цикл? Есть ли условие, которое разорвет цикл или он будет продолжаться бесконечно?
Почему атрибут модели застревает в этом цикле? Это конструктивный выбор в библиотеке преобразователей, или есть какая-то особая особенность причина такого поведения?
Связано ли рекурсивное поведение атрибута model с model.config? Я проверил model.config, и он кажется нормальным, но я не уверен, есть ли между ними связь.
[b]Вопрос:[/b] У меня возникла проблема с библиотекой преобразователей, в частности с инициализацией конвейера. Когда я обращаюсь к атрибуту base_model модели LlamaForCausalLM, кажется, что она повторяется бесконечно. Вот пример того, что я вижу: [code]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"]) [/code] Я отлаживаю демо-версию с использованием библиотеки преобразователей в VSCode, и у меня возник вопрос, связанный с функцией конвейера. В частности, когда я создаю конвейер с помощью конвейера("text-generation"), он возвращает объект Pipeline_class с атрибутом model. Проверив атрибут model, я замечаю, что это экземпляр LlamaForCausalLM, который имеет атрибут base_model, указывающий на LlamaModel. Однако, когда я обращаюсь к атрибуту base_model LlamaModel, кажется, что он повторяется бесконечно, при этом атрибут base_model указывает на другой (или сам?) объект LlamaModel. [code]>>> 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() ) [/code] Мои вопросы: [list] [*][b]Завершится ли этот рекурсивный цикл?[/b] Есть ли условие, которое разорвет цикл или он будет продолжаться бесконечно?
[*][b]Почему атрибут модели застревает в этом цикле?[/b] Это конструктивный выбор в библиотеке преобразователей, или есть какая-то особая особенность причина такого поведения?
[*][b]Связано ли рекурсивное поведение атрибута model с model.config?[/b] Я проверил model.config, и он кажется нормальным, но я не уверен, есть ли между ними связь.