1. torchvision.datasets.utils.download_url的代理
找到对应的文件/root/data1/anaconda3/envs/decouple_diffusion/lib/python3.12/site-packages/torchvision/datasets/utils.py
:
修改前:
def _get_redirect_url(url: str, max_hops: int = 3) -> str:initial_url = urlheaders = {"Method": "HEAD", "User-Agent": "USER_AGENT"}for _ in range(max_hops + 1):with urllib.request.urlopen(urllib.request.Request(url, headers=headers)) as response:if response.url == url or response.url is None:return urlurl = response.urlelse:raise RecursionError(f"Request to {initial_url} exceeded {max_hops} redirects. The last redirect points to {url}.")
修改后:
def _get_redirect_url(url: str, max_hops: int = 3) -> str:initial_url = urlheaders = {"Method": "HEAD", "User-Agent": "USER_AGENT"}# 设置代理proxy_handler = urllib.request.ProxyHandler({'http': 'http://192.168.155.245:19970','https': 'http://192.168.155.245:19970' # 如果需要支持 HTTPS})opener = urllib.request.build_opener(proxy_handler)urllib.request.install_opener(opener)for _ in range(max_hops + 1):with urllib.request.urlopen(urllib.request.Request(url, headers=headers)) as response:if response.url == url or response.url is None:return urlurl = response.urlelse:raise RecursionError(f"Request to {initial_url} exceeded {max_hops} redirects. The last redirect points to {url}.")
修改点说明:
-
ProxyHandler 配置代理:
设置 http 和 https 的代理地址。
-
build_opener 和 install_opener:
使用 build_opener 构建带有代理的处理器。
使用 install_opener 让后续的 urlopen 请求使用代理。 -
兼容 HTTPS 请求:
如果目标 URL 包括 HTTPS,确保设置 https 的代理。
2. 推荐:如果不想修改安装包的内部文件,可以在程序运行最开始设置
例如运行python main.py
,在main.py
主文件最开始设置:
import urllib.request# 设置代理
proxy_handler = urllib.request.ProxyHandler({'http': 'http://192.168.155.245:19970','https': 'http://192.168.155.245:19970' # 如果需要支持 HTTPS
})
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)
3. from_pretrained 的代理
vae = AutoencoderKL.from_pretrained(f"stabilityai/sd-vae-ft-{args.vae}",proxies={'http': 'http://192.168.155.xxx:19970','https': 'http://192.168.155.xxx:19970'}).to(device)