4、模型获取:从Hugging Face下载原始模型(PyTorch格式),以Llama 3为例

好,咱们正式开始动手了。

模型转换的第一步,你得先有模型文件。说白了,GGUF格式不是凭空变出来的,它需要从原始的PyTorch模型转换而来。而目前最主流的模型来源,就是Hugging Face。

4.1 为什么选Hugging Face?

我个人习惯把Hugging Face叫做「模型界的GitHub」。你想想看,几乎所有主流的大模型——Llama、Mistral、Qwen、Falcon——都在上面有官方或社区上传的权重文件。

我刚开始做模型部署那会儿,还得自己从各种论文项目里扒拉权重,经常遇到下载链接失效、格式不统一的问题。后来Hugging Face统一了模型格式和下载方式,确实省了不少事。

核心要点:我们下载的是PyTorch格式的原始模型,通常包含多个.safetensors或.bin文件,以及一个config.json配置文件。这些文件后续会被转换成单个GGUF文件。

4.2 准备工作:安装依赖工具

在下载模型之前,先把工具链装好。我建议你用Python的虚拟环境,避免依赖冲突。

# 创建虚拟环境(推荐)
python -m venv gguf_env
source gguf_env/bin/activate  # Linux/Mac
# 或者 gguf_env\Scripts\activate  # Windows

# 安装Hugging Face官方库
pip install huggingface_hub

# 如果你需要直接加载模型做测试,可以装transformers
pip install transformers torch

小提示:huggingface_hub是轻量级的,只负责下载。transformers则更重,但可以让你在下载前验证模型结构。我个人习惯两个都装,反正不占多少空间。

4.3 下载Llama 3模型:两种方式

Llama 3是Meta开源的模型,目前有8B和70B两个版本。我们以8B版本为例,因为它对硬件要求友好,适合练习。

方式一:命令行下载(推荐)

这是我最常用的方式。一行命令搞定,而且支持断点续传——嗯,这个功能很重要,我遇到过好几次下载到一半网络断了,要是从头再来真的会崩溃。

# 登录Hugging Face(需要先注册账号,并申请Llama 3的访问权限)
huggingface-cli login

# 下载模型(以meta-llama/Meta-Llama-3-8B为例)
huggingface-cli download meta-llama/Meta-Llama-3-8B --local-dir ./llama3-8b-original

这里有个坑,我得提醒你:Llama 3需要申请访问权限。你需要在Hugging Face上登录账号,找到模型页面,点击「Agree and access repository」按钮。Meta那边审核很快,一般几分钟到几小时就能通过。

注意:如果你没有申请权限就直接下载,会收到403错误。我曾经在项目里帮同事排查了半天,最后发现是他忘了点同意按钮……

方式二:Python脚本下载

如果你需要在代码里控制下载流程,或者想集成到自动化脚本里,可以用Python方式。

from huggingface_hub import snapshot_download

# 下载整个仓库
model_id = "meta-llama/Meta-Llama-3-8B"
local_dir = "./llama3-8b-original"

snapshot_download(
    repo_id=model_id,
    local_dir=local_dir,
    local_dir_use_symlinks=False,
    resume_download=True  # 支持断点续传
)

print(f"模型已下载到: {local_dir}")

4.4 下载后的文件结构

下载完成后,咱们看看里面都有什么。我打开目录给你看看:

llama3-8b-original/
├── config.json          # 模型配置文件
├── tokenizer.json       # 分词器
├── tokenizer_config.json
├── special_tokens_map.json
├── model-00001-of-00004.safetensors  # 分片权重文件1
├── model-00002-of-00004.safetensors  # 分片权重文件2
├── model-00003-of-00004.safetensors  # 分片权重文件3
├── model-00004-of-00004.safetensors  # 分片权重文件4
├── model.safetensors.index.json      # 分片索引文件
└── ...

你可能会问:为什么有这么多文件?

原因很简单。Llama 3 8B模型有80亿参数,每个参数用16位浮点数存储,算下来大约16GB。这么大的文件不可能单个传输,所以Hugging Face把它分成了4个分片。每个分片大约4GB,方便下载和管理。

关键文件说明:

  • config.json:模型架构定义,包含层数、注意力头数、隐藏层维度等。GGUF转换时会读取这个文件。
  • .safetensors文件:实际的权重数据。safetensors格式比传统的.bin更安全,不会在加载时执行任意代码。
  • tokenizer.json:分词器文件,决定了模型如何把文本转换成token ID。

4.5 验证下载是否完整

下载完成后,我建议你做个快速验证。别等到转换时才发现文件损坏,那就白费功夫了。

# 检查文件数量
ls -la ./llama3-8b-original/ | wc -l

# 检查总大小
du -sh ./llama3-8b-original/

# 用Python快速加载config验证
import json
with open("./llama3-8b-original/config.json", "r") as f:
    config = json.load(f)
print(f"模型名称: {config['_name_or_path']}")
print(f"隐藏层维度: {config['hidden_size']}")
print(f"层数: {config['num_hidden_layers']}")
print(f"注意力头数: {config['num_attention_heads']}")

如果输出正常,说明模型下载没问题。我一般还会看一眼文件大小,8B模型完整下载后应该在15-16GB左右。如果差太多,可能是下载中断了,需要重新跑一下。

经验之谈:如果你网络不太好,可以试试用镜像站。把Hugging Face的域名换成hf-mirror.com,速度会快很多。命令改成:

export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download meta-llama/Meta-Llama-3-8B --local-dir ./llama3-8b-original

4.6 本章知识体系

下面这张图帮你梳理了模型获取的完整流程:

模型获取流程:从Hugging Face到本地文件 步骤1:准备工作 安装huggingface_hub 步骤2:申请权限 登录HF + 同意协议 步骤3:下载模型 CLI或Python方式 步骤4:验证文件完整性 检查文件数量 + 大小 + config ✅ 下载完成:本地模型目录 包含:config.json + .safetensors分片 + tokenizer 总大小约15-16GB(Llama 3 8B) 下一步:使用这些原始文件进行GGUF格式转换

4.7 常见问题与避坑

最后,我把自己踩过的坑整理一下,你遇到了可以直接对照:

问题 原因 解决方法
403 Forbidden 未申请模型访问权限 去HF页面点击同意协议
下载到一半卡住 网络不稳定 加resume_download=True参数
文件大小不对 下载不完整 删除目录重新下载
缺少tokenizer文件 只下载了权重分片 用snapshot_download下载整个仓库

嗯,模型拿到手了,文件也验证过了。接下来就可以进入真正的转换环节了。

专注资料整理