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

也希望开源和 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 helpers
    env                 Print information about the environment.
    login               Log in using a token from huggingface.co/settings/tokens
    whoami              Find out which huggingface.co account you are logged in as.
    logout              Log out
    repo                {create} Commands to interact with your huggingface.co repos.
    upload              Upload a file or a folder to a repo on the Hub
    download            Download files from the Hub
    lfs-enable-largefiles
                        Configure 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