fix config saving compatibility issue for transformers 4.45+
config = AutoConfig.from_pretrained("OpenGVLab/InternVL2-1B", trust_remote_code=True)
config.save_pretrained("internvl2-1b")
raises error:
if llm_config['architectures'][0] == 'LlamaForCausalLM':
KeyError: 'architectures'
the root cause that transformers added validation of non-default parameters for generation during config saving it requires initialize configuration class without parameters and as the result llm_config comes as None (and according to code above it become {} at llm config class init stage)
Try to downgrade to transformers==4.44.2
@Yeshenglong unfortunatly, I can not to do that, my project requires to use transformers 4.45. Can you please thinking about small fix for issue? I provided workaround that works for me (from logical point of view, it is really bug in code, you allow to provide empty dictionary as llm_config but after that does not care that it can be provided, so some default values should be filled.)
@Yeshenglong
. The cause is that llm_config is a None object, initialized with an empty dictionary. For InternVL2-8B-MPO
, I just handle that with this code:
self.vision_config = InternVisionConfig(**vision_config)
# Check architecture to initialize config
llm_config_architectures = llm_config.get("architectures", ["InternLM2ForCausalLM"])[0]
if llm_config_architectures == "LlamaForCausalLM":
self.llm_config = LlamaConfig(**llm_config)
elif llm_config_architectures == "InternLM2ForCausalLM":
self.llm_config = InternLM2Config(**llm_config)
elif llm_config_architectures == "Phi3ForCausalLM":
self.llm_config = Phi3Config(**llm_config)
elif llm_config_architectures == "Qwen2ForCausalLM":
self.llm_config = Qwen2Config(**llm_config)
else:
raise ValueError("Unsupported architecture: {}".format(llm_config_architectures))
I set the default value and executed the code with transformers==4.46.*. @katuni4ka you can refer to this solution if you wanna upgrade your transformers version