节省时间:AI 模型靠谱下载方案汇总

这篇文章,想分享下我日常是如何下载模型的,包括下载来源和工具使用细节,希望对折腾模型的你也有帮助。

也希望开源和 AI 领域的研究者、从业者在做技术调研和落地实践的时候,都能节约一些时间。

写在前面

之前写了很多模型相关的文章,或多或少都涉及到模型的下载。因为模型文件都比较大,所以相对稳定快速的下载,算是一个比较刚需的事情。

尤其是,需要折腾到本地或者国内服务器上对模型进行后续的微调的时候,首先需要完成模型的下载。

至于各种镜像站,就不展开了,因为多数镜像站的时效性和更新、还有稳定性都有一些问题,暂时只推荐比较稳定或者非盈利的机构服务。

额外的下载经验

我通常会在下载模型的时候,使用 Docker 来做一些辅助的工作,使用一个干净的轻量 Docker Python 镜像来作为基础执行环境。

使用 Docker 快速启动一个干净的下载环境

这样可以比较方便的安装下载工具,而不需要担心因为错过最新版本的工具更新,导致下载速度慢或者下载异常,也不需要担心下载工具的更新损坏或影响本地环境中的其他 Python 程序的依赖。

# 下载一个只有 50MB 的 Python 轻量环境
docker pull python:3.10-slim
# 将本地目录挂载到容器里,一会作为模型下载目录使用
docker run --rm -it -v `pwd`:/models python:3.10-slim bash

接着,进入容器环境后,执行下面的命令将软件源更新:

sed -i 's/snapshot.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list.d/debian.sources
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

然后,就可以根据自己的情况下载必要的模型下载工具进行模型下载了。当然,别忘记进入工作目录 /models

cd /models

当然,如果下载的模型时间比较长,我一般会将模型作为后台应用运行:

# 创建一个持续运行的 Python 容器
docker run -d --name=downloader -v `pwd`:/models python:3.10-slim tail -f /etc/hosts
# 使用命令进入容器进行配置和下载模型
docker exec -it downloader bash

我们先来聊聊 HuggingFace。

目前最受欢迎的开源模型社区:抱脸 HuggingFace

HuggingFace 开源 AI 社区

HuggingFace 是我最常逛和下载模型的网站,也是最早成立的 AI 领域的垂直社区。我之前多次在文章中提到过如何使用 HF 官方的 huggingface-hub CLI 程序下载模型,以及如何使用 HuggingFace 社区的全家桶来玩模型。

GitHub 组织:https://github.com/huggingface/

在官方最近推出了新的基于 Rust 构建的下载工具 HF Transfer 后,能够大幅的超越原始的基于 Python 写的 CLI 程序的下载速度,达到 500MB/s 以上的下载速度。

官方 CLI 程序的使用:Huggingface Hub

除了在 HuggingFace 的 Spaces 之外,在各种环境(服务器、Colab)想使用官方 CLI 时,第一步都是下载安装模型工具:

pip install huggingface_hub[cli]

这里不推荐使用流行的 Transformers 包来下载的原因是因为相比较使用 Transformers,使用专用的 CLI 下载工具,能够实现断点续传,能够指定下载路径,更加方便我们对于模型资源的管理、硬件资源的使用。

使用 --help 能够看到 CLI 支持哪些功能:

# huggingface-cli --help
usage: huggingface-cli <command> [<args>]positional arguments:{env,login,whoami,logout,repo,upload,download,lfs-enable-largefiles,lfs-multipart-upload,scan-cache,delete-cache}huggingface-cli command helpersenv                 Print information about the environment.login               Log in using a token from huggingface.co/settings/tokenswhoami              Find out which huggingface.co account you are logged in as.logout              Log outrepo                {create} Commands to interact with your huggingface.co repos.upload              Upload a file or a folder to a repo on the Hubdownload            Download files from the Hublfs-enable-largefilesConfigure your repository to enable upload of files > 5GB.scan-cache          Scan cache directory.delete-cache        Delete revisions from the cache directory.optional arguments:-h, --help            show this help message and exit

对于本篇文章而言,我们只需要关注 download 即可。

HuggingFace CLI 的下载控制能力非常多,我们接下来以去年年末微软发布的 PHI-2 为例,来聊聊使用这个工具的下载。

PHI-2 的 HuggingFace 的网址是 https://huggingface.co/microsoft/phi-2,我们将网址中的“组织和项目名” 复制出来,然后拼在命令中就能够开始模型的下载了:

huggingface-cli download microsoft/phi-2

但是,我非常不建议使用默认命令来下载,因为它会将下载的模型保存在你的根目录的缓存文件夹中,并且会使用 Git Blob 来保存模型文件,存储空间比直接下载模型要大不少。

所以,我推荐在下载参数上,添加一些额外的参数,来完成更高效率的下载:

huggingface-cli download microsoft/phi-2 --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download

比如,在上面的命令中强制的将下载目标文件夹 --local-dir 和下载使用的缓存目录 --cache-dir 都设置到了当前目录下,开启 --local-dir-use-symlinks=False 可以让我们下载的文件后续都以非软链文件保存,方便后续保存或者上传服务器。最后,添加 --resume-download 可以确保我们始终接着之前的下载进度继续,如果我们的下载进度有中断。

如果你只想下载仓库中的指定文件,可以再进一步调整命令,比如:

# 下载 microsoft/phi-2/model-00001-of-00002.safetensors
huggingface-cli download microsoft/phi-2 model-00001-of-00002.safetensors --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download
# 下载 microsoft/phi-2/model-00002-of-00002.safetensors
huggingface-cli download microsoft/phi-2 model-00002-of-00002.safetensors --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download

如果我们需要下载在 HuggingFace 上经过申请登记或者付费才能使用的模型,在上面的命令最后添加 token 参数就好了:

# Token 获取在这里 https://huggingface.co/settings/tokens
之前的命令... --token TOKEN

新版工具的使用:HF Transfer

如果想使用 HuggingFace 的新版工具,我们的安装命令要调整下:

pip install huggingface_hub[cli] hf_transfer

启动新版工具快速下载也很简单,同样的,对之前的命令做一些调整就好:

HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download microsoft/phi-2 model-00001-of-00002.safetensors --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False

首先是在命令上添加 HF_HUB_ENABLE_HF_TRANSFER=1 切换到新的 Rust 工具的下载模式。其次是去掉上面命令行中的 --resume-download 分块下载,新版工具目前还不支持这个功能。

当命令执行后,我们就能使用更快的速度从 HuggingFace 上下载 AI 模型了。

搭配社区爱好者的加速器:HF Mirror

HF Mirror 镜像站

因为一些原因,HuggingFace 在国内的访问时灵时不灵的,好在有社区爱好者做了一件很值得点赞的事情,使用 Caddy + CloudFlare 对 HuggingFace 做了镜像。

我们只需要在上面的下载命令前面加上一个环境变量就能够进行模型的下载啦:

HF_ENDPOINT=https://hf-mirror.com 上文的命令...

甚至,你还可以通过这个镜像站点来直接访问 HuggingFace 上的仓库 Wiki 页面,比如下面的链接就能够通过加速器域名来访问零一万物的 Yi-34B-Chat 模型页面:

https://hf-mirror.com/01-ai/Yi-34B-Chat

阿里和 CCF 背书的:魔搭 ModelScope

前年年中的时候,ModelScope 成立了,随后在社区的祝福和质疑声中,迅速成为了类似 “海外谷歌,国内百度” 状态的 “海外 HuggingFace,国内 ModelScope”,目前是国内 AI 模型下载量不争的最大社区。

以最近从 HuggingFace 同步的第一个开源 MoE 模型 Mixtral-8x7B-Instruct-v0.1 举例,不到一个月的时间,目前的下载量在 119 万次。

ModelScope 魔搭社区

因为魔搭社区拥有完整的备案信息,所以能够合法和稳定的向国内社区用户提供稳定的服务。

不过目前,尤其是海外模型基本首发都在 HuggingFace,魔搭需要搬运回来,存在一定的“时差”,以及模型仓库在开源后基本都有持续的更新,在魔搭上的项目因为是官方账号和社区开发者为爱发电地在做陆陆续续的搬运,存在部分模型上架较晚以及上架后的模型程序更新不及时的问题,加上本身是中文站,站内基本只有国内社区开发者互动,整个社区相对还比较早期。

不论如何,期待这个社区也能越来越好。

ModelScope 模型快速下载

ModelScope 推出了类似 HuggingFace Hub CLI 的工具,开源在 GitHub 上 modelscope 有着类似的功能:支持上传和下载模型。

GitHub 组织:https://github.com/modelscope/

想要使用魔搭社区的模型,同样需要先完成工具的安装:

pip install modelscope

相比 HuggingFace ,使用 ModelScope 下载会简单一些,暂时没有 CLI 下载工具,只有一条下载的路径,就是调用 Python 代码来下载。以及因为本身服务器和 CDN 都在国内,默认下载速度就挺快,不需要镜像站来打辅助。

具体使用上,通常我们有两种方式。我们以使用 ModelScope 下载上文同款模型:的微软 PHI-2 模型为例。

我们可以将下面的内容保存为 download.py

from modelscope import snapshot_download
snapshot_download('AI-ModelScope/phi-2', cache_dir="./models/")

然后,执行 python download.py,就能够开始模型的下载了。

或者,我们也可以在命令行中执行下面的命令,包含上面等价代码的 CLI 命令:

python -c "from modelscope import snapshot_download;snapshot_download('AI-ModelScope/phi-2', cache_dir='./models/')"

命令执行完毕后,同样的,模型也就开始以一个不错的速度进行下载啦。

需要注意的是,目前因为模型基本都靠魔搭官方和社区来人工同步,相比较 HuggingFace 社区能够做到的模型文件和模型程序始终保持最新,ModelScope 是做不到的,所以在 ModelScope 上下载的模型,我们最好是判断和验证下是否是最新的。

通常发布有一段时间的模型,我们可以使用在 ModelScope 上下载的大尺寸的模型(如果模型没有更新的话),以及需要去 HuggingFace 上再下载和更新下相关程序。

借助 Colab 或海外服务器做模型转存

除了上面的方式之外,我们还可以利用 Google Colab 的超大带宽,和国内包括百度盘、阿里盘等等能够下满带宽的网盘来相对快速的下载模型(可能要开个会员啥的,偶尔用用可以借账号)。

Google Colab

在 Colab 下载模型,我们使用上文提到的 HuggingFace CLI 就好,当我们完成模型文件的下载后,使用类似下面的工具,可以相对快速把模型上传到我们自己的网盘。

如果你使用阿里云盘,可以试试这个项目:aoaostar/alidrive-uploader。如果你使用百度网盘,可以试试这个项目:houtianze/bypy。其他的网盘同理。

通用流程是在 Colab 的 Notebook 中完成命令的安装,然后执行程序指定好模型路径作为上传路径,开始上传,耐心等待上传完毕就完事了。

相比较开一台海外的 VPS 或者上传到国内各种云服务器的 OSS 上,上传到网盘,无疑是成本最低的方案。

国内非盈利组织机构的模型下载

除此之外,不得不提一类模型的下载,就是来自国内研究院和实验室的模型下载。

不过这类站点的模型下载和上面是有一些差别的,一般只有“自家”的模型,当你需要使用它们发布的开源模型的时候,可以使用这个方案。

从官方配套网站这种源头下载模型的好处是:

  1. 速度比较有保障,不论是下载速度,还是发布时效。
  2. 能够更大概率确保我下载的模型权重是正确的,总归不能在自家网站上上传错误的模型吧。

这里提两个组织,分别是智源研究院的模型发布站 ,和浦江实验室的模型发布站。

这两个网站虽然都写着注册,但是实际上我们只要打开模型文件仓库,点击具体的模型,就能够使用 10MB/s+ 的速度,完成模型文件的下载啦。

最后

这篇文章,就先写到这里啦。

希望你下载模型愉快,早晨很快,中午很快,晚上也很快。

–EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年01月09日
统计字数: 7523字
阅读时间: 16分钟阅读
本文链接: https://soulteary.com/2024/01/09/summary-of-reliable-download-solutions-for-ai-models.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序:发送小程序订阅消息

文档&#xff1a;小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 目录 步骤一&#xff1a;获取模板 ID步骤二&#xff1a;小程序端获取参数2.1、获取消息下发权限2.2、获取登录凭证&#xff08;code&#xff09; 步骤三&#xff1a;后端调用接口下发订阅消息…

【Web】CTFSHOW PHP命令执行刷题记录(全)

目录 web29 web30 web31 web32 web33 web34 web35 web36 web37-39 web40 web41 &#xff08;y4✌脚本&#xff09; web42 -44 web45 web46 -49 web50 web51 web52 web53 web54 web55-56 web57 web58 web59 web60 web61 web62 web63-65 web66-67 w…

QT 信号与槽

.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();public slots:void buttonLable();priv…

rke2 Online Deploy Rancher v2.8.0 latest (helm 在线部署 rancher v2.8.0)

文章目录 1. 简介2. 预备条件3. 安装 helm4. 安装 cert-manager4.1 yaml 安装4.2 helm 安装 5. 安装 rancher6. 验证7. 界面预览 1. 简介 Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托…

文档扫描与矫正-仿射变换

图像变换是计算机视觉和图像处理中的关键技术之一&#xff0c;它允许我们对图像进行各种形式的变形、调整和校正。其中&#xff0c;仿射变换是一种常见的变换方式。 在文档扫描过程中&#xff0c;由于拍摄角度和畸变等原因&#xff0c;文档图像可能存在一定程度的形变。仿射变…

【LeetCode】组合两个表(mysql)

题目 编写解决方案&#xff0c;报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中&#xff0c;则报告为 null 。 以 任意顺序 返回结果表。 结果格式如下所示。 答 select firstName ,lastName,city,state from Person left join Address …

软路由之爱快基于L2TP 实现

申明&#xff1a;本文仅针对国内SSTP&#xff0c;适用于国内的游戏加速&#xff0c;禁止一切利用该技术的翻墙行为。 相信很多接触过爱快的人都需要连接L2TP或PPTP&#xff0c;本文主要介绍通过爱快iKuai的L2TP 来实现异地组网。 一、准备工作 1、爱快 v3.x 2个&#xff08;免…

SpringMVC源码解析——HTTP请求处理

在SpringMVC源码解析——DispatcherServlet的逻辑处理中&#xff0c;最后介绍到了org.springframework.web.servlet.DispatcherServlet的doDispatch方法中关于处理Web HTTP请求的核心代码是调用AbstractHandlerMethodAdapter类的handle方法&#xff0c;源码如下&#xff1a; /*…

作业:通过两台linux主机配置ssh实现互相免密登陆

做题步骤&#xff1a; 一.开启两个Linux主机&#xff0c;并且用ssh连接&#xff0c;要能够ping通 我这里是server&#xff1a;192.168.81.129 client&#xff1a;192.168.81.130 举例 步骤&#xff1a; 1.安装服务软件 2.运行软件程序 3.根据自定配置提供对应的服务/etc/chr…

期末查分系统(c,链表实现)

主要功能&#xff1a; 分为三个身份: 学生:可以通过学号查询个人分数 老师&#xff1a;可以看所有学生成绩&#xff0c;单科排名&#xff08;正序&#xff0c;倒序&#xff09;&#xff0c;统计绩点&#xff0c;查看绩点排名前百分之n的学生 管理员端&#xff1a;可以创建链…

用React给XXL-JOB开发一个新皮肤(二):目录规划和路由初始化

目录 一. 简述二. 目录规划三. Vite 配置 3.1. 配置路径别名3.2. 配置 less 四. 页面 4.1. 入口文件4.2. 骨架文件4.3. 普通页面 五. 路由配置六. 预览启动 一. 简述 上一篇文章我们介绍了项目初始化&#xff0c;此篇文章我们会先介绍下当前项目的目录规划&#xff0c;接着对…

Magics 教程

文章目录 基本流程基本操作页面的介绍基本操作 基本流程 基本操作 页面的介绍 右侧是工具页&#xff0c;可以直接进行调整&#xff0c;也可以在选项&帮助->自定义用户界面 那里进行相关的调整 基本操作 直接拖动鼠标左键&#xff1a;选中物体鼠标右键&#xff1a; 长按…

JVM工作原理与实战(十二):打破双亲委派机制-自定义类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、打破双亲委派机制的方法 二、自定义类加载器 1.Tomcat自定义类加载器案例 2.自定义类加载器详解 3.案例解析 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执…

RAG:让大语言模型拥有特定的专属知识

作为一个在Chatbot领域摸爬滚打了7年的从业者&#xff0c;笔者可以诚实地说&#xff0c;在大语言模型的推动下&#xff0c;检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术正在快速崛起。 RAG的搜索请求和生成式AI技术&#xff0c;为搜…

【教学类-45-06】正确 X-Y之间的三连加减题混合 (竖向排列)(44格:11题“++ ”11题“--”11题“ +-”11题“ -+” )

作品展示&#xff1a; 背景需求&#xff1a; 把以下四款3连题 混在一起&#xff0c;每种题目随机抽取11题&#xff0c;一共44格 出现问题&#xff1a; 1、- 、-里面有重复题 2、升序排列最好竖排展示 素材准备: ​ ​ 问题改正 1、单元格修改&#xff1a;确保竖列写入 …

【Docker项目实战】使用Docker部署nullboard任务管理工具

【Docker项目实战】使用Docker部署nullboard任务管理工具 一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 注意事项 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

C# WPF 数据绑定

需求 后台变量发生改变,前端对应的相关属性值也发生改变 实现 接口 INotifyPropertyChanged 用于通知客户端(通常绑定客户端)属性值已更改。 示例 示例一 官方示例代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using Sys…

spring boot + mybatis + websocket + js实战

项目技术&#xff1a;spring boot mybatis websocket js 需求背景&#xff1a;当添加一个女孩时&#xff0c;页面的socket收到消息&#xff0c;打印最新的所有女生list&#xff0c;这样可以进一步在react/vue前端框架下&#xff0c;实现当A用户新增了某业务数据后&#xff…

迅为RK3568开发板Android11/12/Linux编译驱动到内核

在平时的驱动开发中&#xff0c;经常需要在内核中配置某种功能&#xff0c;为了方便大家开发和学习&#xff0c;本小 节讲解如何在内核中添加驱动。具体的讲解原理讲解请参考本手册的驱动教程。 Android11 源码如果想要修改内核&#xff0c;可以运行以下命令进行修改: cd ke…

ffmpeg 视频分辨率修改 质量压缩

随着手机像素的提高&#xff0c;拍摄视频也越来越大&#xff0c;10秒的视频动辄 二三十兆&#xff0c;这给视频传输和播放都带来了 诸多不变。一般都需要 前端或或者后端 对视频进行压缩。由于我这边前端是 H5&#xff0c;所以只能后端进行压缩&#xff0c; 采用主流压缩库采用…