Почему версия 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: