2023年 huggingface.co 国内可用 IP,修改/etc/hosts 可高速访问,附代码
2023年10月30更新
目前反馈所有IP已经不可用,有兴趣的同学可以尝试,理论上这个方法适用于所有内容
原理分析
huggingface.co
使用的 CDN 与其它 GFW 清单重合,很多 IP 无法使用。
解决办法是找到与 google、fb 无重合的 IP 段。
几百上千 G 的模型文件怎么搞,走代理还是肉身背硬盘拷?
step 1. 查找全球可用 IP
https://17ce.com/site/dns/20230915_fc0261d053b311eeac17e316c626d952:1.html
挑选 IP 的时候注意避开敏感名称
step 2,配置 hosts 以后验证
13.33.174.80 huggingface.co www.huggingface.co cdn-lfs.huggingface.co
- git clone 模型
git lfs clone https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat
- 手动下载模型
wget https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat/resolve/main/pytorch_model-00001-of-00003.bin
通过程序自动测试可用 IP
import re
import requests
iplist = "https://17ce.com/site/dns/20230915_fc0261d053b311eeac17e316c626d952:1.html"
text = requests.get(iplist)
# 使用正则表达式匹配 IP 地址的模式
ip_pattern = r'>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})<'
# 使用 findall 函数找到所有匹配的 IP 地址
ip_addresses = re.findall(ip_pattern, str(text.content))
print("found {} ip".format(len(ip_addresses)))
ip_addresses = set(ip_addresses)
for ip in ip_addresses:
url = f"http://{ip}/baichuan-inc/Baichuan2-13B-Chat/resolve/main/tokenizer_config.json"
header = {
"Host": "huggingface.co"
}
try:
response = requests.head(url, headers=header, timeout=5)
print(f"{ip} connect success")
except:
log = ""
多线程版本
import re
import requests
from concurrent.futures import ThreadPoolExecutor
def check_ip(ip):
url = f"http://{ip}/baichuan-inc/Baichuan2-13B-Chat/resolve/main/tokenizer_config.json"
header = {
"Host": "huggingface.co"
}
try:
response = requests.head(url, headers=header, timeout=3)
print(f"{ip} : success")
except Exception as e:
ip = ""
def main():
iplist = [
"https://17ce.com/site/dns/20240312_477424e0e05511eebb8373aada47cca9:1.html"
]
for ip_list in iplist:
text = requests.get(ip_list)
ip_pattern = r'>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})<'
ip_addresses = re.findall(ip_pattern, str(text.content))
ip_addresses = set(ip_addresses)
print("Found {} IPs".format(len(ip_addresses)))
with ThreadPoolExecutor(max_workers=10) as executor:
executor.map(check_ip, ip_addresses)
if __name__ == "__main__":
main()