xx025 / stable-video-diffusion-webui

stable-video-diffusion-webui, img to videos| 图片生成视频
215 stars 36 forks source link

请问`python run.py`时下载的模型来自哪里? #3

Closed snakeninny closed 11 months ago

snakeninny commented 11 months ago

你好,感谢你的开源精神,让我能早日尝鲜SVD👍

我的情况是这样的:我有一台服务器,能上网,但不方便科学上网;还有一台笔记本,能上网,也方便科学上网。 我在服务器里部署你的WebUI时,执行最后一步python run.py时,报错:

Traceback (most recent call last):
  File "/home/zyl/stable-video-diffusion-webui/run.py", line 6, in <module>
    from modules.model import infer
  File "/home/zyl/stable-video-diffusion-webui/modules/model.py", line 19, in <module>
    from modules.model_setting import device, model, filter_x
  File "/home/zyl/stable-video-diffusion-webui/modules/model_setting.py", line 22, in <module>
    model, filter_x = load_model(
  File "/home/zyl/stable-video-diffusion-webui/modules/utils.py", line 17, in load_model
    model = instantiate_from_config(config.model).to(device).eval().requires_grad_(False)
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/util.py", line 175, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/models/diffusion.py", line 59, in __init__
    self.conditioner = instantiate_from_config(
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/util.py", line 175, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/modules/encoders/modules.py", line 79, in __init__
    embedder = instantiate_from_config(embconfig)
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/util.py", line 175, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/modules/encoders/modules.py", line 1039, in __init__
    self.open_clip = instantiate_from_config(open_clip_embedding_config)
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/util.py", line 175, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "/home/zyl/stable-video-diffusion-webui/generative-models/sgm/modules/encoders/modules.py", line 591, in __init__
    model, _, _ = open_clip.create_model_and_transforms(
  File "/home/zyl/miniconda3/envs/svd/lib/python3.10/site-packages/open_clip/factory.py", line 382, in create_model_and_transforms
    model = create_model(
  File "/home/zyl/miniconda3/envs/svd/lib/python3.10/site-packages/open_clip/factory.py", line 281, in create_model
    checkpoint_path = download_pretrained(pretrained_cfg, cache_dir=cache_dir)
  File "/home/zyl/miniconda3/envs/svd/lib/python3.10/site-packages/open_clip/pretrained.py", line 552, in download_pretrained
    target = download_pretrained_from_hf(model_id, cache_dir=cache_dir)
  File "/home/zyl/miniconda3/envs/svd/lib/python3.10/site-packages/open_clip/pretrained.py", line 522, in download_pretrained_from_hf
    cached_file = hf_hub_download(model_id, filename, revision=revision, cache_dir=cache_dir)
  File "/home/zyl/.local/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 118, in _inner_fn
    return fn(*args, **kwargs)
  File "/home/zyl/.local/lib/python3.10/site-packages/huggingface_hub/file_download.py", line 1377, in hf_hub_download
    raise LocalEntryNotFoundError(
huggingface_hub.utils._errors.LocalEntryNotFoundError: An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on.

连不上huggingface,也就是你提到的需要科学上网,下载其他的模型。我能想到的围魏救赵方式是用笔记本把这些模型下载下来,然后上传到服务器里。所以问题就来了:

我需要下载哪些模型呢?

谢谢!

xx025 commented 11 months ago

如果你的服务器和笔记本在一个局域网下可以用这个方法,直接填写局域网中的代理地址和端口 https://github.com/xx025/stable-video-diffusion-webui/blob/1593f619fb3431610184ebf27ad378cea64761f6/setting.py#L3-L7

我在国内服务器上部署的时候也遇到这个问题了,我的解决方案是 在服务器上安装一个v2raya 当然 clash 也可以 ,然后将上面代码中的代理地址填写你的代理端口

它里面具体的下载细节我也不清楚,😯

xx025 commented 11 months ago

如果你用autodl 平台可以直接使用这个 Docker

snakeninny commented 11 months ago

谢谢,我的服务器和笔记本不在同一局域网下;服务器是租的腾讯云,之前是可以用clash了,但最近我被封过一次(我只是科学上网的用户而不是供应商,且科学上网的出发点只是下载AI模型等,没有做任何违反法律道德的事情),且前两天发现我常用的clash for linux项目已经404了,所以猜测最近风声比较紧。我不想自己的服务器再次被封,所以计划服务器不再安装科学上网服务,所以需要科学上网的东西都通过我的本地笔记本下载后上传到服务器里

xx025 commented 11 months ago

谢谢,我的服务器和笔记本不在同一局域网下;服务器是租的腾讯云,之前是可以用clash了,但最近我被封过一次(我只是科学上网的用户而不是供应商,且科学上网的出发点只是下载AI模型等,没有做任何违反法律道德的事情),且前两天发现我常用的clash for linux项目已经404了,所以猜测最近风声比较紧。我不想自己的服务器再次被封,所以计划服务器不再安装科学上网服务,所以需要科学上网的东西都通过我的本地笔记本下载后上传到服务器里

通过ssh反向代理解决服务器没网的问题 https://blog.csdn.net/zkkksssss/article/details/123603780

可以试试这个方案,亲测可行

snakeninny commented 11 months ago

看了半天这个ssh反向代理解决方案,没太明白……操作了一下,那些参数需要如何设置,我也不太懂。可以看看你下载的模型放在了哪里吗?我手动下载然后上传过去好了

xx025 commented 11 months ago

假设你在本地代理软件正常工作,如clash一般会有一个端口设置,这个端口默认是7890

那么在你笔记本电脑上实际 可以通过 代理 http://127.0.0.1:7890 进行上网

如下图

image

在这句ssh 语句中

local_socket_port 就是7890

remote_available_port 这个就是服务器没被占用的一个可用端口即可,也可以填写7890,不过我在setting.py 代理地址我写了2233 这样你可以写2233 代码中就不用更改了

{user}@{host} -p {remote_ssh_port} 是ssh 登录的用户和地址和端口信息

如 root@111.111.111.112 -p 22 如果,替换成你自己的即可

ssh -N -R 127.0.0.1:{remote_available_port}:127.0.0.1:{local_socket_port} {user}@{host} -p {remote_ssh_port}

ssh -N -R 127.0.0.1:2233:127.0.0.1:7890 {user}@{host} -p {remote_ssh_port}

最后将setting.py 中的关于代理的注释取消即可,不用更改代码

snakeninny commented 11 months ago

可以了,谢谢你! 我的操作如下,供其他人参考: 本机(我的笔记本,用的是clash for windows,端口是7890):

# user和host是ssh到远程服务器时用的user和host
ssh -N -R 127.0.0.1:2233:127.0.0.1:7890 user@host

远程服务器:

export http_proxy="socks5h://127.0.0.1:2233"; export https_proxy="socks5h://127.0.0.1:2233"
export http_proxy=http://127.0.0.1:2233; export https_proxy=http://127.0.0.1:2233

svd的settings.py:

# 取消以下2行注释
os.environ['http_proxy'] = 'http://127.0.0.1:2233/'
os.environ['https_proxy'] = 'http://127.0.0.1:2233/'
xx025 commented 11 months ago

一种代理设置方法:使用xshell 隧道让服务器通过本地代理上网