From 7a8a8d3ebc474f9a79d4bd6223062677efb58170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=9E=97=5FCyril=20Pilgrim?= Date: Tue, 28 Jan 2025 14:51:30 +0800 Subject: [PATCH] push --- __pycache__/model_loader.cpython-312.pyc | Bin 5272 -> 4740 bytes model_loader.py | 66 ++++++++--------------- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/__pycache__/model_loader.cpython-312.pyc b/__pycache__/model_loader.cpython-312.pyc index 4d93b08bce3184196a7c38abe69bbba92e04ec6e..3225aff84e950f4c4edf8a18416933d113b0bcbc 100644 GIT binary patch delta 2008 zcmah~eM}Tb6rb7M+uPgQyMyC^L*SsClsheLk%Cl65&2N8(I$MTR~vG&3mo28cNbB! zSCpC*ZBry;BE(v3(xe#tLtE33CbsntjY*T{C?@EMsY(5){&gy$js2%HhYO@J=_LE! zoA-Y6X5PFvZ%4gHi><#{EIh#DQf##Qre(zH9O%KbQ$PeF33@|h^G8Hk3XKx8K=;vWDXFR~IJfIhRxibl+ZgV4)8 zBBt$Lm@u^VMT3%;8abC|ZjJ1d!hu7Q?1dK}{sgJ>5DjugObn(%(W#y4Pcn+q`E;T z^+6rpi+Zuw1ntnp$5d9kM(L62JIItqjZmM}GayFCD2-OE%jZd*#&Cwxv4c>fTksAL ze=({bc-ceEEuH=_+F{M&-`MI8_bH|C$r04b6z3+aq9jEXN!r)ZOAOCV%l2XBWWLZ9 z35t^35%sG*N`enXL@B6rhygi4MHIBrPzD*)Z>Z!M9Bd&TvVf)xTVDGOPY;867G%3; zvr4D4N{7sIuEO!|vF`EUSa6~`UbW@=+8I}SoXedRL|tsEYNf| ze={>@&Xzvhf2@Bvb}aS<8f16zM(p^?`Z~5g9sR+ch5{NemO(eVXl#I1v|v2Ka~MD} z`K%os;m*RtsL0d~Mf9=hE%Q_0IPt75zxC@2QKp!jySbM*S{Ponl*6mnh7oN)#c^=-~hcF z^g}mLU)LS326A4^yy8mJR$QAIr3ntlAQa6p^GD`>s5|hcqYc6iCJj45LxKzLMc)YT zuB_mvLUqx0FO{$bLjG>4BPvHaB}IwI@*2FPHNp7%)QFcxWfn)JS&hh@JsqNYFe)W@ zQQ9BqlsZEGXkRvl-amf!&&!t|Oni0!%TFJi`u_eWKRh})wxQ7LL|3f!19ps%GYD}I zl1WGwCJAn@Uy;K8kR%f)vXkg&MU@kVs2m8ZGU*8kTbCRO;iE~a><@$`QDzC2+czz^_8 zo5xy?)yi?)ybgnVxrJ!KR$fzJs)M&|&N*gD6J7?SWOtS!czxv*JSUjI(a2dCplf z>s&wWTtCIfTX)69&<$sJs2Srjy|a$0X-C!6s`$?LA``cO5zC zVVcW|`RLp6jN-UZ{P%n<%1?Lh+5|yb&Qkz!pmX-TctPbQWvcAE{TF)T`L#3ljd5Y) zKS`QcpDUz5zVg;qu>^^?kNKe#Yq;h_9v9xko%0r zQj$nX4{FR<BA=4xQ}add9Qr&Xo3kv|U={i{qlQftCWq!TDz>+h zZI@2*oU6f|x-TfbBm1y{{KJ$cOmOrN-Ug=IK)3^(zk`}Pz;hd9{Kd3DSO=eg6ibFF L)aNK*h_`` delta 2481 zcmbtWYit|G5#GH!9(l(jDN=mtL5X%m*>qw#vMNIf3Au@0ZtF)Ixj{^zP-)&tCQXXM z-O)-4vPuorb>gI^ux?Goaiky)AV5y+KHxY=-6U|W7HEM|kP9)in>2tZyT8I%LR-W? z+FjC=gg$_xUEpSCc4ohC_I7Xf#yuIY@wWy84{-ZH%?u5gCydVFD7MZ55r{Af0_7eC zV9BNe6z-`g9b*CvBtAN-iLn7TrVVIIHWSswxBwU913Uy2=mVl=9Ej{JMK}Nm=tWl2 zhhabvSy797!$i7u^Vj8gNK%xz?4|OyeTk?V-WL~x(XjelS1_RjqkH%LVcWQQ*~nXE)l-)S?jMvCCxj`}0Ool13CsIyw*u z4kr}!26M(m#g)7;7>|mQJTMYek0^OQ78j+cG9ZR!bWqdEYGezZjZSEG=`~n!lO`L` zoMzAVKVbWLu)+e)a@)Rn(Y}4&zWt;=*WjKSnjD&nPDW>Z*^WI64PVLX>T>9D_EAq! z01aC+PfZ0T1KF*<1(*LXH0|JXwwj#De0ubS(bK6HQW^9z`wYio><@Qzc0u$Rdkz}V zDQzqCpljN0XhM|kdpw8zG=5foj$YPH!^5bBds;}sSu%!OibeamM)W3UMStgnvAXgo z-ZD1H;w{r|+_EH_(hgHen9{1QwK!c;i{rTUI0!hPHdg!*cST$8)rTs2Qd`+Wkr(wB z1?O5?It;R<5*BfjbK=m7e3B8XE}CZ_oXr%U+73lA0VXo4H;Kg zLLo@r{;-L@pRyzd8!9Qo_wV}KE1IRD9;4>&7d<|U^d}9ZD zam_HRazarDWGNO`rGXGW?0H>6kp>2XikcwRZTal<^3Q&>^xhBMiRZBCF1$E>_u93> zh4DM-6NSl{7Wdst@7#I)?WOn67vA~l($!Pgx%}1}c;wD2fpC{8%j;i0nJ&CIg*pr_ zXh%;Qx(-+4c-cw>sSmP^2s;rDBAi&{H6wC(Se3OzHx0`1*uaP^sd6wpEQxtqQRO_> z^K3{OQN!_JnVkJRrN;A&bSxP4>SY1(#x_r$8>tlhJd|WFj#Bhkl-Dzcox za=ZTF#d_a-z3;Zwk>SyST=TY^YxAm>aaqz_(aPfp=Oc?w|Gd+mvo;W~+mmbbta6$f zOIlNO0$c6bJrjE}-$XkOELxlAtf=%wySV zPgd~!Z8ZeZrzYoE2e7*C0UEQ|-8s8^x^`M90N-9GT4;feO%R&br()Kdqpdun=F zaJ|!yM}Fn2>2cCG9FWL5u9v27G}ZQW(lVL~kjL zw{m?BdhT&&pN0OlMbqa%->BLNjcB~;5d1RwxXSJ~;RIxIr_1C{DG41`l*3qzgO8Y< z_ZX=06j{JpKBugjx)mC0MWPiSL64fZHTpG{>HZ?X-Q|O&?y9s(EV+ctp_JKSFqXfP z4#H54UN!q!@>R$j`q(pMc$eWx^0zJ_ke=12hU+8X1E156iWz&j0`b diff --git a/model_loader.py b/model_loader.py index a26141f..9d2e95a 100644 --- a/model_loader.py +++ b/model_loader.py @@ -1,20 +1,19 @@ import os import torch -import folder_paths from typing import Tuple -from transformers import AutoModelForCausalLM, AutoProcessor # 添加正确导入 -from janus.models import MultiModalityCausalLM, VLChatProcessor # type: ignore +from transformers import AutoModelForCausalLM, AutoTokenizer +from janus.models import VLChatProcessor # type: ignore +import folder_paths class DeepSeekModelLoader: """Model loader node for DeepSeek Janus Pro""" - + def __init__(self): self.local_model_path = None - + @staticmethod def get_available_models(): """Scan models/deepseek_janus/Janus-Pro directory and return subfolder names""" - import os models_path = folder_paths.models_dir deepseek_janus_path = os.path.join(models_path, "deepseek_janus", "Janus-Pro") if not os.path.exists(deepseek_janus_path): @@ -22,7 +21,6 @@ class DeepSeekModelLoader: f"目录未找到: {deepseek_janus_path}. " "请确保模型放置在正确的位置。" ) - # 获取所有子文件夹名称 model_names = [ name for name in os.listdir(deepseek_janus_path) if os.path.isdir(os.path.join(deepseek_janus_path, name)) @@ -33,7 +31,7 @@ class DeepSeekModelLoader: "请下载并将模型放置在正确的位置。" ) return model_names - + @classmethod def INPUT_TYPES(cls): return { @@ -44,7 +42,7 @@ class DeepSeekModelLoader: }), }, } - + RETURN_TYPES = ("DEEPSEEK_MODEL", "DEEPSEEK_TOKENIZER") RETURN_NAMES = ("model", "tokenizer") FUNCTION = "load_model" @@ -52,7 +50,6 @@ class DeepSeekModelLoader: def load_model(self, model_name: str, use_local: bool) -> Tuple: """Load DeepSeek Janus Pro model and processor""" - # 设置设备和数据类型 device = "cuda" if torch.cuda.is_available() else "cpu" try: dtype = torch.bfloat16 @@ -62,11 +59,9 @@ class DeepSeekModelLoader: try: if use_local: - # 获取ComfyUI根目录 models_path = folder_paths.models_dir - # 构建模型路径 - model_dir = os.path.join(models_path, "deepseek_janus", "Janus-Pro", model_name) - + model_dir = os.path.join(models_path, "deepseek_janus", "Janus-Pro", os.path.basename(model_name)) + if not os.path.exists(model_dir): raise ValueError( f"本地模型未在 {model_dir} 找到. " @@ -76,41 +71,24 @@ class DeepSeekModelLoader: else: model_path = model_name + # 确保 model_path 是字符串 + model_path = str(model_path) + print(f"从 {model_path} 加载 DeepSeek Janus 模型") - - # 加载处理器和模型 - try: - processor = VLChatProcessor.from_pretrained( - str(model_path), - trust_remote_code=True, - use_fast=False - ) - except Exception as e: - raise ValueError( - f"无法从 {model_path} 加载处理器. 请确保已下载正确的模型文件并将其放置在 models/deepseek_janus/Janus-Pro 文件夹中. 错误:{str(e)}" - ) + + # 加载 tokenizer 和 processor + tokenizer = AutoTokenizer.from_pretrained(model_path) + processor = VLChatProcessor.from_pretrained(model_path, image_processor=None, tokenizer=tokenizer) + + # 加载模型 + model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True, torch_dtype=dtype, device_map="auto") - try: - model = AutoModelForCausalLM.from_pretrained( - str(model_path), - trust_remote_code=True, - torch_dtype=dtype, - device_map="auto" - ) - except Exception as e: - raise ValueError( - f"无法从 {model_path} 加载模型. 请确保已下载正确的模型文件并将其放置在 models/deepseek_janus/Janus-Pro 文件夹中. 错误:{str(e)}" - ) - - # 将模型移动到正确的设备和数据类型 model = model.to(dtype).to(device).eval() - - print("DeepSeek Janus 模型加载成功") + return (model, processor) except Exception as e: - print(f"加载模型时出错: {str(e)}") - raise + raise ValueError(f"加载模型时出错: {str(e)}") # 节点类映射 NODE_CLASS_MAPPINGS = { @@ -120,4 +98,4 @@ NODE_CLASS_MAPPINGS = { # 节点显示名称映射 NODE_DISPLAY_NAME_MAPPINGS = { "DeepSeekModelLoader": "Multimodal Loader" -} \ No newline at end of file +}