x
This commit is contained in:
@@ -101,6 +101,56 @@ def patch7_rocm_break_import_cycle():
|
||||
print('Patch 7: already applied or pattern not found.')
|
||||
|
||||
|
||||
def patch9_registry_model_impl_compat():
|
||||
"""补丁 9:registry.py —— vllm main 与 transformers v4 兼容
|
||||
|
||||
问题:vllm main 的 ModelRegistry 大量访问 model_config.model_impl,
|
||||
该属性是 vllm ModelConfig 的字段(默认 "auto"),但 inspect 链路传入的
|
||||
有时是 transformers config 对象(如 Qwen2VLConfig),v4 没有此属性 →
|
||||
AttributeError → "Model architectures [...] failed to be inspected"。
|
||||
同时 _try_resolve_transformers 末尾调用 model_config._get_transformers_backend_cls(),
|
||||
v4 的 config 也没有该方法。
|
||||
|
||||
根因:mineru[core] 锁定 transformers<5.0.0(v4),vllm main 期望 v5。
|
||||
本补丁把所有 model_config.model_impl 访问改成 getattr 兜底(缺属性时当 "auto",
|
||||
走 fallback 分支匹配 vllm 注册表),并给 _get_transformers_backend_cls 加兜底。
|
||||
|
||||
采用逐处 getattr 替换,不依赖方法定位(比方法注入更可靠)。
|
||||
"""
|
||||
f = os.path.join(VLLM_DIR, 'model_executor', 'models', 'registry.py')
|
||||
if not os.path.exists(f):
|
||||
print('Patch 9: registry.py not found; skipping.')
|
||||
return
|
||||
c = open(f).read()
|
||||
if '# mineru-rocm: model_impl v4 compat' in c:
|
||||
print('Patch 9: already applied (model_impl v4 compat present).')
|
||||
return
|
||||
|
||||
# 把 model_config.model_impl 访问替换为 getattr 兜底
|
||||
before = c.count('model_config.model_impl')
|
||||
c2 = c.replace(
|
||||
'model_config.model_impl',
|
||||
'getattr(model_config, "model_impl", "auto")'
|
||||
)
|
||||
replaced = before - c2.count('model_config.model_impl')
|
||||
|
||||
# _get_transformers_backend_cls 兜底:v4 无此方法
|
||||
c2 = c2.replace(
|
||||
'return model_config._get_transformers_backend_cls()',
|
||||
'return getattr(model_config, "_get_transformers_backend_cls", lambda: None)()'
|
||||
)
|
||||
|
||||
# 写入幂等标记(注释,便于重入检测)
|
||||
c2 = '# mineru-rocm: model_impl v4 compat\n' + c2
|
||||
|
||||
if c2 != c:
|
||||
open(f, 'w').write(c2)
|
||||
print(f'Patch 9: registry.py model_impl v4 compat applied '
|
||||
f'({replaced} access(es) wrapped).')
|
||||
else:
|
||||
print('Patch 9: no changes applied (pattern not found).')
|
||||
|
||||
|
||||
def ensure_vllm_dist_info():
|
||||
"""为 /opt/vllm 源码导入创建最小 dist-info。
|
||||
|
||||
@@ -233,6 +283,7 @@ def install_sitecustomize_force_rocm():
|
||||
def main():
|
||||
patch6_init_platform_fallback()
|
||||
patch7_rocm_break_import_cycle()
|
||||
patch9_registry_model_impl_compat()
|
||||
install_sitecustomize_force_rocm()
|
||||
try:
|
||||
ensure_vllm_installed()
|
||||
|
||||
Reference in New Issue
Block a user