Вот стратегию, которую я сейчас рассматриваю, но почему-то она не работает. не работает.
Я могу использовать библиотеку проверки, чтобы получить код класса, найти целевую строку, заменить ее другой строкой и использовать exec для установки измененного класса.
Демонстрационный код с использованием проверки выглядит следующим образом:
Код: Выделить всё
def patch_qwen():
import inspect
import transformers.models.qwen2.modeling_qwen2 as qwen2
replace_str = " rotary_seq_len = kv_seq_len"
search_str = "position_ids[:, -1].max().item()"
src = inspect.getsource(qwen2.Qwen2FlashAttention2).splitlines()
print('\n'.join(src)) # first print
for i, line in enumerate(src):
if search_str in line:
# print(f"target str find {search_str} at {i}")
src[i] = replace_str
break
src = '\n'.join(src)
exec(src, qwen2.__dict__)
src = inspect.getsource(qwen2.Qwen2FlashAttention2)
print("------------------------------------------------")
print(src)# second print
Может ли кто-нибудь дать мне немного объяснение, почему это не работает и как решить проблему?
Подробнее здесь: https://stackoverflow.com/questions/791 ... at-runtime
Мобильная версия