最近租服务器跑实验代码,在模型初次加载时会下载stable diffusion的一系列预训练权重,但服务器一直卡在 Downloading data from https://huggingface.co/fchollet/stable-diffusion/resolve/main/kcv_encoder.h5 ,最后报错
File /usr/local/miniconda3/lib/python3.10/site-packages/keras_cv/src/models/stable_diffusion/image_encoder.py:60, in ImageEncoder.__init__(self, download_weights)
29 super().__init__(
30 [
31 keras.layers.Input((None, None, 3)),
(...)
56 ]
57 )
59 if download_weights:
---> 60 image_encoder_weights_fpath = keras.utils.get_file(
61 origin="https://huggingface.co/fchollet/stable-diffusion/resolve/main/vae_encoder.h5", # noqa: E501
62 file_hash="c60fb220a40d090e0f86a6ab4c312d113e115c87c40ff75d11ffcf380aab7ebb", # noqa: E501
63 )
64 self.load_weights(image_encoder_weights_fpath)
File /usr/local/miniconda3/lib/python3.10/site-packages/keras/src/utils/data_utils.py:351, in get_file(fname, origin, untar, md5_hash, file_hash, cache_subdir, hash_algorithm, extract, archive_format, cache_dir)
349 raise Exception(error_msg.format(origin, e.code, e.msg))
350 except urllib.error.URLError as e:
--> 351 raise Exception(error_msg.format(origin, e.errno, e.reason))
352 except (Exception, KeyboardInterrupt):
353 if os.path.exists(fpath):
Exception: URL fetch failure on https://huggingface.co/fchollet/stable-diffusion/resolve/main/vae_encoder.h5: None -- [Errno 99] Cannot assign requested address
应该是被墙了,所以进行了下面的一些尝试。
尝试1:修改环境变量(失败)
无论是在终端添加 HF_ENDPOINT=“https://hf-mirror.com”,还是在constant.py中替换原本的HF_ENDPOINT,都不管用。。
尝试2:直接修改下载链接(失败)
注意到:
File /usr/local/miniconda3/lib/python3.10/site-packages/keras_cv/src/models/stable_diffusion/image_encoder.py:60
if download_weights:
---> 60 image_encoder_weights_fpath = keras.utils.get_file(
61 origin="https://huggingface.co/fchollet/stable-diffusion/resolve/main/vae_encoder.h5", # noqa: E501
62 file_hash="c60fb220a40d090e0f86a6ab4c312d113e115c87c40ff75d11ffcf380aab7ebb", # noqa: E501
63 )
64 self.load_weights(image_encoder_weights_fpath)
直接将里面的网站改成镜像网站"https://hf-mirror.com/fchollet/stable-diffusion/resolve/main/kcv_encoder.h5",结果报错:
“Exception: URL fetch failure on https://hf-mirror.com/fchollet/stable-diffusion/resolve/main/kcv_encoder.h5: 403 -- Forbidden”
服务器被拒了。。。。。
尝试3:手动把权重下载好后放入模型储存权重的文件(失败)
权重文件kcv_encoder.h5下好后准备把它放到stable diffusion存放权重文件的目录下。。
但现实很骨感。。。我不知道那个文件在哪。。于是跟着deepseek一顿操作。。啥models/stable-diffusion呀,啥~/.cache/huggingface/hub/呀都搞了一遍。。。。。头都大了,最终以失败告终
究极尝试:直接改源码里的读取路径 (成功)
此时的我耐心已被耗光,虽直接将源码里的权重加载路径换成我自己的,如下:
结果很丝滑,成功了!>^<
后面类似的情况我也都是这样解决的:下载权重–>改读取路径
最终也是成功把代码跑起来了,当时看看时间,已经是凌晨2点了…
嗐,介就是人生啊~