搭建cloudflare worker实现全速下载huggingface大模型

最近在玩ComfyUI的时候受到了下载模型的强烈痛苦,网上找了一圈也没有找到称心如意的工具,直接用代理下载大模型的话,流量很快就会告急...,而huggingface-clihf-transfer也各有各的问题。

为什么不使用huggingface-cli和HF-Ttransfer

为什么不使用huggingface-cli和HF-Ttransfer

  1. 下载huggingface上的大模型一般用huggingface-cli可以较快的下载,但是经过自测也只能占满下行带宽的10%~20%,但是huggingface的CDN服务器不是太稳定(因为有时你分配到的边缘节点很慢),这会影响huggingface-cli的下载速度。所以本脚本的目的是通过自建cloudflare workers来代理huggingface服务器进行并行下载。

  2. HF-Ttransfer的下载速度比原版huggingface-cli要快很多,但是经常会卡住、且无法中断,如果强行中断会丢失数据从零开始。

最后自己想了个办法,通过aria2可以多源下载的特点,在多个开源脚本的基础上自己糊了一个脚本,实现了满速下载大模型,具体细节请看这里。这里主要记录一下cloudflare woker脚本的部署方法。

需要准备的东西

  1. 注册一个cloudflare账号
  2. 白嫖或者买一个域名,因为cloudflare的域名DNS污染很严重,最好是用自己的域名,再说现在域名也不贵。
  3. 如果域名不是在cloudflare上购买的,就需要从其他域名服务商转移到cloudflare,让cloudflare来托管域名。cloudflare的DNS修改是真的快,用了之后再也回不去了。

开始

首先要先登录cloudflare,进入cloudflare的dashboard面板,选择Workers和Pages

file

概述页面点击创建

file

点击创建worker

file

这里名字可以随便填,如果要创建多个就r1r2这样的名字即可,填了之后你就会获得一个worker.dev的三级域名,不过因为我们要用自己的域名,所以无所谓。

file

填了名字后直接点击部署cloudflare会先创建一个默认的hello world脚本。

创建好后会进入woker详情页面,此时选择编辑代码进入脚本编辑器:

file
file

现在到去这里下载worker.js,把其中的内容复制出来,粘贴到编辑器中,或者直接将下面的内容复制进去:

/**
 * Welcome to Cloudflare Workers! This is your first worker.
 *
 * - Run "npm run dev" in your terminal to start a development server
 * - Open a browser tab at http://localhost:8787/ to see your worker in action
 * - Run "npm run deploy" to publish your worker
 *
 * Learn more at https://developers.cloudflare.com/workers/
 */

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})
const specialCases = {
  "*": {
    "Origin": "DELETE",
    "Referer": "DELETE"
  }
}
function handleSpecialCases(request) {
  const url = new URL(request.url);
  const rules = specialCases[url.hostname] || specialCases["*"];
  for (const [key, value] of Object.entries(rules)) {
    switch (value) {
      case "KEEP":
        break;
      case "DELETE":
        request.headers.delete(key);
        break;
      default:
        request.headers.set(key, value);
        break;
    }
  }
}
async function handleRequest(request) {
  const url = new URL(request.url);
  if (url.pathname === "/") {
    return new Response("Please enter the link after the /")
  };
  const actualUrlStr = url.pathname.replace("/", "") + url.search + url.hash;
  const actualUrl = new URL(actualUrlStr);
  const modifiedRequest = new Request(actualUrl, {
    headers: request.headers,
    method: request.method,
    body: request.body,
    redirect: 'follow'
  });
  handleSpecialCases(modifiedRequest);
  const response = await fetch(modifiedRequest);
  const modifiedResponse = new Response(response.body, response);
  modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
  return modifiedResponse;
}
file

然后点击右上角部署

部署成功后点击左上角r5(你刚刚填的名字)返回上一页,选择设置栏,在域和路由处点击添加

file

在弹出的侧边栏选择自定义域,填写你托管在cloudflare上的域名,起一个二级域名的名字,比如r5.yourdomain.com

file

结束

此时你的代理域名就搭建好了,你可以这样使用:

https://r5.yourdomain.com/https://xxx.com/file.zip

下载速度还可以,至少有好几Mb/s。

如果只使用一个代理服务器的速度肯定还是很慢,如何使用aria2实现多个源服务器并行下载,请参考我这个脚本

更多内容请关注我的博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容