现在,每天都有各种大模型不断涌现,这些模型文件通常都很大。如何快速又靠谱地下载这些开源大模型,放到我们的环境中,进行后续的微调、量化和部署工作呢?以下是我的一些经验分享。
准备 Docker 基础环境
首先,从 Docker Hub 拉取一个精简版的 Python 镜像,
docker pull python:3.10-slim
然后,创建并运行容器,这里有两种方法,一种是启动一个临时容器,将当前工作目录挂载到容器的 /models
目录,并启动 bash
会话。
docker run --rm -it -v `pwd`:/models python:3.10-slim bash
另一种是后台运行容器,适合下载模型时间比较长的场景,启动一个名为 downloader
的容器,将当前工作目录挂载到容器的 /models
目录,并在后台运行 tail -f /etc/hosts
命令以保持容器运行。
docker run -d --name=downloader -v `pwd`:/models python:3.10-slim tail -f /etc/hosts
接着进入后台运行中的 downloader
容器,更换镜像源,加速下载。
docker exec -it downloader 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
Hugging Face 社区模型的下载
官方 CLI 程序 Huggingface Hub
首先,在上面的 Docker 容器环境中安装官方 CLI 工具,
pip install huggingface_hub[cli]
我们以通义千问的 Qwen2-7B 为例,来看看这个工具的使用。
Qwen2-7B 的 Hugging Face 网址是 https://huggingface.co/Qwen/Qwen2-7B ,将网址中的“组织和项目名”复制出来,然后拼在命令中就能够开始模型的下载了。
huggingface-cli download Qwen/Qwen2-7B
但是,使用默认命令来下载会将下载的模型保存在你的根目录的缓存文件夹中,并且会使用 Git Blob 来保存模型文件,存储空间比直接下载模型要大不少。
所以我们可以添加一些额外参数,来完成更高效率的下载,
huggingface-cli download Qwen/Qwen2-7B --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download
在上面的命令中,我将模型下载的目标目录和下载缓存目录设置到当前目录下, --local-dir-use-symlinks=False
表示我们下载的文件,不使用符号链接来指向缓存目录中的文件,而是保存到本地目录,方便后续上传到服务器。 --resume-download
选项启用断点续传,如果之前下载过程因某种原因中断,将尝试从中断点继续下载。
如果你只想下载指定的文件,可以用以下命令,
# 下载 Qwen/Qwen2-7B/model-00001-of-00004.safetensors
huggingface-cli download Qwen/Qwen2-7B model-00001-of-00004.safetensors --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download
如果我们需要下载在 Hugging Face 上需要申请许可或付费才能使用的模型,可以在上述命令的最后添加一个 token
参数:
huggingface-cli download Qwen/Qwen2-7B --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download --token YOUR_TOKEN_HERE
新工具 HF Transfer
首先,安装 HF Transfer ,
pip install huggingface_hub[cli] hf_transfer
来看看新版工具 HF Transfer 的使用,
HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download Qwen/Qwen2-7B --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False
新的 HF Transfer 工具旨在加快从 Hugging Face Hub 下载和上传文件的过程,特别是在高带宽场景中有益。但是,它目前不支持 --resume-download
选项。如果下载中断,该工具无法从中断处恢复,而是会退回到 huggingface_hub
提供的常规下载方法。这意味着你需要删除所有不完整的文件并从头开始重新下载,以确保下载完整且正确。
社区爱好者的下载加速器 HF Mirror
搭配社区爱好者提供的镜像,可以加速模型的下载,我们只需要在上面的下载命令前面加上一个环境变量就行啦:
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download Qwen/Qwen2-7B --local-dir=./models/ --cache-dir=./cache --local-dir-use-symlinks=False --resume-download
ModelScope 魔搭社区模型的下载
ModelScope 有类似 Hugging Face Hub CLI 的工具,开源在 GitHub 上 https://github.com/modelscope/modelscope ,有类似的功能:支持上传和下载模型。
想要使用魔搭社区的模型,同样需要先完成工具的安装,
pip install modelscope
如果只安装 ModelScope 的核心框架,下载模型时会提示缺少依赖。
它提供了 CLI 下载工具,我们使用 ModelScope 下载上文同款模型 Qwen2-7B :
modelscope download --model 'Qwen/Qwen2-7B' --include '*.json' --local_dir './local_dir' --cache_dir './cache_dir'
其中, --include
过滤指定文件, cache_dir
和 local_dir
同时指定, local_dir
优先级高, cache_dir
将被忽略,模型文件将被下载在 ./local_dir
。
它也提供了调用 Python 代码来下载的方式,
from modelscope import snapshot_download
snapshot_download('qwen/Qwen2-7B', cache_dir="./models/")
以上是我的一些经验,希望对喜欢折腾模型的你有帮助,大家下载大模型都很快。
微信公众号「padluo」,分享数据科学家的自我修养,既然遇见,不如一起成长。关注【老罗说AI】公众号,后台回复【文章】,获得整理好的【老罗说AI】文章全集。