Почему версия Llama 2 7b работает, а версия 70b — нет?

Я использую что-то похожее на это для запуска Llama 2.

      from os.path import dirname
from transformers import LlamaForCausalLM, LlamaTokenizer
import torch 

model = "/Llama-2-70b-chat-hf/"
# model = "/Llama-2-7b-chat-hf/"

tokenizer = LlamaTokenizer.from_pretrained(dirname(model))  

model = LlamaForCausalLM.from_pretrained(dirname(model)) 

eval_prompt = """
Summarize this dialog:
A: Hi Tom, are you busy tomorrow’s afternoon?
B: I’m pretty sure I am. What’s up?
A: Can you go with me to the animal shelter?.
B: What do you want to do?
A: I want to get a puppy for my son.
B: That will make him so happy.
A: Yeah, we’ve discussed it many times. I think he’s ready now.
B: That’s good. Raising a dog is a tough issue. Like having a baby ;-) 
A: I'll get him one of those little dogs.
B: One that won't grow up too big;-)
A: And eat too much;-))
B: Do you know which one he would like?
A: Oh, yes, I took him there last Monday. He showed me one that he really liked.
B: I bet you had to drag him away.
A: He wanted to take it home right away ;-).
B: I wonder what he'll name it.
A: He said he’d name it after his dead hamster – Lemmy  - he's  a great Motorhead fan :-)))
---
Summary:
"""

model_input = tokenizer(eval_prompt, return_tensors="pt")   

model.eval()
with torch.no_grad():
    print(tokenizer.decode(model.generate(**model_input, max_new_tokens=100)[0], skip_special_tokens=True))

Версия 7b выводит ответ. Но версия 70b загружает шарды и после этого выдает ошибку. size_mismatchчасть здесь повторяется много раз (с разным весом).

      Loading checkpoint shards: 100%|███████████████████████████████████████████████| 15/15 [11:56<00:00, 47.78s/it]
Traceback (most recent call last):
  File "/llama2.py", line 52, in <module>
    model = LlamaForCausalLM.from_pretrained(dirname(model))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/miniconda3/envs/llama2/lib/python3.11/site-packages/transformers/modeling_utils.py", line 2795, in from_pretrained
    ) = cls._load_pretrained_model(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/miniconda3/envs/llama2/lib/python3.11/site-packages/transformers/modeling_utils.py", line 3173, in _load_pretrained_model
    raise RuntimeError(f"Error(s) in loading state_dict for {model.__class__.__name__}:\n\t{error_msg}")
RuntimeError: Error(s) in loading state_dict for LlamaForCausalLM:
    size mismatch for model.layers.0.self_attn.k_proj.weight: copying a param with shape torch.Size([1024, 8192]) from checkpoint, the shape in current model is torch.Size([8192, 8192]).
    size mismatch for model.layers.0.self_attn.v_proj.weight: copying a param with shape torch.Size([1024, 8192]) from checkpoint, the shape in current model is torch.Size([8192, 8192]).

You may consider adding `ignore_mismatched_sizes=True` in the model `from_pretrained` method.


Я получаю еще одну ошибку из-за игнорирования несовпадающих размеров.KeyError: 'lm_head.weight'. Но если он работает с 7b, то почему не с 70b?

Изменить: Требования к ОЗУ составляют более 100 ГБ ОЗУ, но у меня в несколько раз больше. У меня 12 Мб видеопамяти.

2 ответа

Недостаточное оборудование

вы ничего не упомянули об оборудовании, на котором вы его запускаете, поэтому я могу только предположить, что это классический случай недостаточного оборудования. Как правило, вам необходимо иметь как минимум 1 ГБ ОЗУ (желательно VRAM, в зависимости от архитектуры) для каждого миллиарда параметров модели.

с моделью 70b у вас должно быть 70 ГБ видеопамяти (или унифицированной оперативной памяти), что на практике обычно означает 96 ГБ

пример Чтобы запустить модель LAMa2 с квантованием, вы можете использовать следующие шаги:

Установите библиотеку квантования. Вы можете сделать это, следуя инструкциям в документации Hugging Face: https://huggingface.co/docs/optimum/concept_guides/quantization.

Квантуйте модель. Это можно сделать, выполнив следующую команду: Optimum-quantize --model lama2 --precision int8

Экспортируйте квантованную модель. Это можно сделать, выполнив следующую команду: Optimum-export --model lama2-int8 --framework pytorch Запустите квантованную модель. Вы можете сделать это, загрузив модель в PyTorch и затем вызвав метод вперед(). Вот пример того, как запустить квантованную модель LAMa2:

Другие вопросы по тегам