В настоящее время я экспериментирую с модификацией KV-кеша модели LLaVA, чтобы выполнять контролируемые вмешательства во время генерации (аналогично методам управления кешем в недавних исследованиях). Цель состоит в том, чтобы изменить кэшированные тензоры значений ключа после фазы предварительного заполнения, а затем продолжить декодирование из измененного кеша.
Однако всякий раз, когда я пытаюсь возобновить генерацию с помощью model.generate() с моими измененными прошлыми_ключевыми значениями, я постоянно сталкиваюсь со следующей ошибкой:
Код:
def generate_with_steering(model, processor, image, prompt_text, steering_k_list, steering_v_list, coeff_k, coeff_v):
"""
Generates a caption with one-shot KV cache steering, as described in the paper.[1]
"""
prompt = f"USER: \n{prompt_text}\nASSISTANT:"
inputs = processor(text=prompt, images=image, return_tensors='pt').to("cuda", torch.float16)
# 1. Prefill the KV cache by running a forward pass
with torch.no_grad():
outputs = model(**inputs, use_cache=True)
past_key_values = outputs.past_key_values
# 2. Modify the KV cache object
for i in range(len(steering_k_list)):
k, v = past_key_values
num_heads = k.shape[1]
head_dim = k.shape[3]
reshaped_k = steering_k_list.reshape(num_heads, head_dim)
reshaped_v = steering_v_list.reshape(num_heads, head_dim)
# Apply the steering vector IN-PLACE to the cache of the *last* token
# This modifies the tensors *inside* the past_key_values object
k[0, :, -1, :] += coeff_k * reshaped_k
v[0, :, -1, :] += coeff_v * reshaped_v
# 3. Generate text using
output = model.generate(
input_ids=inputs['input_ids'][:, -1:],
past_key_values=past_key_values, # Pass the original, modified Cache object
max_new_tokens=100,
do_sample=False
)
full_response_list = processor.batch_decode(output, skip_special_tokens=True)
# The output from generate() when using past_key_values might not include the prompt
return full_response_list[0].strip()
Ошибка:
--- 2. Generating WITH STEERING (k_coeff=0.1, v_coeff=2.0) ---
Traceback (most recent call last):
File "/home/gpuuser3/Pulkit/CACHE_STEERING/kv-steering-for-vlm/src/verify_steering_vector.py", line 138, in
steered_caption = generate_with_steering(
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/Pulkit/CACHE_STEERING/kv-steering-for-vlm/src/verify_steering_vector.py", line 85, in generate_with_steering
output = model.generate(
^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/torch/utils/_contextlib.py", line 120, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 2781, in _sample
model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/models/llava/modeling_llava.py", line 466, in prepare_inputs_for_generation
model_inputs = super().prepare_inputs_for_generation(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 574, in prepare_inputs_for_generation
inputs_embeds, input_ids = self._cache_dependant_input_preparation(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 476, in _cache_dependant_input_preparation
or (cache_position[-1] >= input_ids.shape[1]) # Exception 3
~~~~~~~~~~~~~~^^^^
IndexError: index -1 is out of bounds for dimension 0 with size 0
Подробнее здесь: https://stackoverflow.com/questions/798 ... ith-size-0
IndexError: индекс -1 выходит за пределы измерения 0 с размером 0. ⇐ Python
Программы на Python
-
Anonymous
1762504369
Anonymous
В настоящее время я экспериментирую с модификацией KV-кеша модели LLaVA, чтобы выполнять контролируемые вмешательства во время генерации (аналогично методам управления кешем в недавних исследованиях). Цель состоит в том, чтобы изменить кэшированные тензоры значений ключа после фазы предварительного заполнения, а затем продолжить декодирование из измененного кеша.
Однако всякий раз, когда я пытаюсь возобновить генерацию с помощью model.generate() с моими измененными прошлыми_ключевыми значениями, я постоянно сталкиваюсь со следующей ошибкой:
Код:
def generate_with_steering(model, processor, image, prompt_text, steering_k_list, steering_v_list, coeff_k, coeff_v):
"""
Generates a caption with one-shot KV cache steering, as described in the paper.[1]
"""
prompt = f"USER: \n{prompt_text}\nASSISTANT:"
inputs = processor(text=prompt, images=image, return_tensors='pt').to("cuda", torch.float16)
# 1. Prefill the KV cache by running a forward pass
with torch.no_grad():
outputs = model(**inputs, use_cache=True)
past_key_values = outputs.past_key_values
# 2. Modify the KV cache object
for i in range(len(steering_k_list)):
k, v = past_key_values[i]
num_heads = k.shape[1]
head_dim = k.shape[3]
reshaped_k = steering_k_list[i].reshape(num_heads, head_dim)
reshaped_v = steering_v_list[i].reshape(num_heads, head_dim)
# Apply the steering vector IN-PLACE to the cache of the *last* token
# This modifies the tensors *inside* the past_key_values object
k[0, :, -1, :] += coeff_k * reshaped_k
v[0, :, -1, :] += coeff_v * reshaped_v
# 3. Generate text using
output = model.generate(
input_ids=inputs['input_ids'][:, -1:],
past_key_values=past_key_values, # Pass the original, modified Cache object
max_new_tokens=100,
do_sample=False
)
full_response_list = processor.batch_decode(output, skip_special_tokens=True)
# The output from generate() when using past_key_values might not include the prompt
return full_response_list[0].strip()
Ошибка:
--- 2. Generating WITH STEERING (k_coeff=0.1, v_coeff=2.0) ---
Traceback (most recent call last):
File "/home/gpuuser3/Pulkit/CACHE_STEERING/kv-steering-for-vlm/src/verify_steering_vector.py", line 138, in
steered_caption = generate_with_steering(
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/Pulkit/CACHE_STEERING/kv-steering-for-vlm/src/verify_steering_vector.py", line 85, in generate_with_steering
output = model.generate(
^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/torch/utils/_contextlib.py", line 120, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 2781, in _sample
model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/models/llava/modeling_llava.py", line 466, in prepare_inputs_for_generation
model_inputs = super().prepare_inputs_for_generation(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 574, in prepare_inputs_for_generation
inputs_embeds, input_ids = self._cache_dependant_input_preparation(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gpuuser3/.pyenv/versions/kv-steering-vlm/lib/python3.11/site-packages/transformers/generation/utils.py", line 476, in _cache_dependant_input_preparation
or (cache_position[-1] >= input_ids.shape[1]) # Exception 3
~~~~~~~~~~~~~~^^^^
IndexError: index -1 is out of bounds for dimension 0 with size 0
Подробнее здесь: [url]https://stackoverflow.com/questions/79812040/indexerror-index-1-is-out-of-bounds-for-dimension-0-with-size-0[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия