Преобразование модели GPT2 h5 в факел для преобразования в ggml — несоответствие формыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование модели GPT2 h5 в факел для преобразования в ggml — несоответствие формы

Сообщение Anonymous »


Я хочу преобразовать модель .h5-gpt2-medium в ggml. Более подробная информация: https://github.com/ggerganov/ggml/issues/745

Процесс выполняется с помощью скрипта в библиотеке ggml, который вызывает функции преобразования. В модели была небольшая разница: она была создана с vocab.size 50255, тогда как исходный GPT2 — 50257, и я исправил это с помощью отступов, добавленных в скрипт для преобразования при чтении этого слоя.

Что-то вроде

@tf.function защита нетерпеливого_f(символический_вес): print("PAD????",symbolic_weight.shape[0]*symbolic_weight.shape[1]) прокладки = tf.constant([[0, 2], [0,0]]) #добавляем 2 после dim 0 символический_вес = tf.pad(символический_вес, отступы, «константа», 0) печать(symbolic_weight.shape) вернуть символический_вес Это в скрипте modeling_tf_utils.py

def load_tf_weights_from_h5(model,solved_archive_file, ignore_mismatched_sizes=False, _prefix=None): #(...) если save_weight_value не имеет значения None: print("saved_weight_value=",saved_weight_value) печать (saved_weight_value.shape) # Проверьте, отличается ли форма текущего веса от формы из файла H5 печать("SAVED_WEIGHT") печать (saved_weight_value) печать (saved_weight_value.shape) если save_weight_value.shape[0] == 50255: сохраненное_вес_значение = нетерпеливый_f(сохраненное_вес_значение) print("ПОСЛЕ ЗАПОЛНЕНИЯ SAVED_WEIGHT:") печать (saved_weight_value) печать (saved_weight_value.shape) ss = input("Нажмите клавишу...") Он проходит через чтение модели tf, а затем вылетает при запуске сопоставления ее с pytorch с несоответствием форм, что является грубым, это от [50257,1024] (tf) до [1024,1024]. ``` питон (...) K.int_shape(symbolic_weight)= (1024,) Traceback (последний вызов последний): Файл "/home/tosh/ggml/examples/gpt-2/convert-h5-to-ggml.py", строка 80, в модель = GPT2Model.from_pretrained(dir_model, low_cpu_mem_usage=True, from_tf=True) #from_tf Файл «/home/tosh/.local/lib/python3.10/site-packages/transformers/modeling_utils.py», строка 3469, в from_pretrained модель, loading_info = load_tf2_checkpoint_in_pytorch_model( Файл «/home/tosh/.local/lib/python3.10/site-packages/transformers/modeling_tf_pytorch_utils.py», строка 468, в load_tf2_checkpoint_in_pytorch_model вернуть load_tf2_model_in_pytorch_model( Файл «/home/tosh/.local/lib/python3.10/site-packages/transformers/modeling_tf_pytorch_utils.py», строка 477, в load_tf2_model_in_pytorch_model вернуть load_tf2_weights_in_pytorch_model( Файл «/home/tosh/.local/lib/python3.10/site-packages/transformers/modeling_tf_pytorch_utils.py», строка 495, в load_tf2_weights_in_pytorch_model вернуть load_tf2_state_dict_in_pytorch_model( Файл «/home/tosh/.local/lib/python3.10/site-packages/transformers/modeling_tf_pytorch_utils.py», строка 565, в load_tf2_state_dict_in_pytorch_model отсутствующие_ключи, неожиданные_ключи = pt_model.load_state_dict(new_pt_params_dict, strict=False) Файл "/home/tosh/.local/lib/python3.10/site-packages/torch/nn/modules/module.py", строка 2041, в load_state_dict поднять RuntimeError('Ошибки при загрузке state_dict для {}:\n\t{}'.format( RuntimeError: ошибки при загрузке state_dict для GPT2Model: несоответствие размера для wpe.weight: копирование параметра с формой torch.Size([50257, 1024]) из контрольной точки, фигура в текущей модели — torch.Size([1024, 1024]). .../transformers/modeling_tf_utils.py

def load_tf_weights_from_h5(model,solved_archive_file, ignore_mismatched_sizes=False, _prefix=None): несовпадающие_слои = [] # Читаем файл H5 с h5py.File(resolved_archive_file, «r») как sharded_checkpoint_file: # Получить имя каждого слоя из файла H5 save_h5_model_layers_name = set(load_attributes_from_hdf5_group(sharded_checkpoint_file, "layer_names")) ... При прямом проходе считывания модели tf второй слой имеет такую ​​форму.

Я упомянул две темы с другими проблемами, связанными с несоответствиями при преобразовании gpt2, но они кажутся разными и более старыми.

Кроме того, судя по последнему журналу ошибок, процесс преобразования применяет одну и ту же форму/тензор [50257,1024] ко многим другим [1024,1024], [1024], [1024,3072], [3072], ... , [1024, 4096], [4096, 1024] ... Либо он не выдвигает какой-то указатель из tf-части, либо пытается, потому что несовпадение, не знаю - эту часть кода не изучал.
SYMBOLIC_WEIGHT: (50257, 1024) SYMBOLIC_WEIGHT: (1024, 1024) SYMBOLIC_WEIGHT: (1024,) SYMBOLIC_WEIGHT: (1024,) SYMBOLIC_WEIGHT:
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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