download-model.ipynb 说明文档

这份 notebook 的任务非常单纯:

它和 00_check_env.ipynb 的后半部分其实是同一类工作,只是这里把“下载模型”单独拿出来了。

如果你已经在课程镜像里看到了:

/root/course_lora/models/tiny-gpt2

那通常就不用再重复运行这份 notebook。

所以它更像:


一、这份 notebook 在整个实验里的位置

你可以这样理解:

也就是说,这份 notebook 并不直接训练模型,它只是准备训练所需的本地权重。


二、Cell 0:开场说明

# 下载模型

### tiny-gpt2 模型已经下载到了 /root/course_lora/models/tiny-gpt2 下面,不需要再下载了哈。

这一格其实已经把最重要的信息告诉你了:

如果你本地已经有:

那你通常可以跳过这份 notebook。


三、Cell 1:设置证书路径

代码:

# 设置证书,访问 HuggingFace
# 命令行:ind /etc/ssl /usr/local/share/ca-certificates /etc/ca-certificates -type f \( -name "*.crt" -o -name "*.pem" \) 2>/dev/null | head -50

import os

ca_path = "/etc/ssl/certs/ca-certificates.crt"   # 改成你实际找到的路径
os.environ["REQUESTS_CA_BUNDLE"] = ca_path
os.environ["CURL_CA_BUNDLE"] = ca_path
os.environ["SSL_CERT_FILE"] = ca_path

print("CA bundle set to:", ca_path)

这一格在做什么

它在解决:

逐行解释

import os

导入 os 模块,用来设置环境变量。

ca_path = "/etc/ssl/certs/ca-certificates.crt"

指定系统证书文件的位置。

如果你的系统不是这个路径,就需要改成真正存在的证书路径。

os.environ["REQUESTS_CA_BUNDLE"] = ca_path

告诉 requests 去哪里找证书。

os.environ["CURL_CA_BUNDLE"] = ca_path

告诉 curl 去哪里找证书。

os.environ["SSL_CERT_FILE"] = ca_path

告诉更底层的 SSL 组件去哪里找证书。

print("CA bundle set to:", ca_path)

打印当前设置,方便检查。

这一格什么时候重要

如果你看到这类报错,它就非常重要:

如果下载本来就正常,这一格通常不会带来额外问题。


四、Cell 2:加载代理环境变量

代码:

# 设置科学上网,访问 Github 和 HuggingFace
# 命令行:/etc/network_turbo

import subprocess
import os

result = subprocess.run(
    'bash -c "source /etc/network_turbo && env | grep proxy"',
    shell=True,
    capture_output=True,
    text=True
)

for line in result.stdout.splitlines():
    if '=' in line:
        var, value = line.split('=', 1)
        os.environ[var] = value

print("Proxy variables loaded:")
for k in ["http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"]:
    print(k, os.environ.get(k))

这一格在做什么

它在尝试把系统里已有的代理配置读进当前 notebook。

目的就是:

逐行解释

import subprocess

导入 Python 的系统命令执行模块。

result = subprocess.run(...)

运行下面这段 shell 命令:

bash -c "source /etc/network_turbo && env | grep proxy"

它的意思是:

  1. 读取 /etc/network_turbo
  2. 把里面可能设置的代理环境变量激活
  3. 筛出和 proxy 有关的项

shell=True

说明传入的是整段 shell 命令。

capture_output=True

抓取命令输出,方便后面在 Python 里处理。

text=True

把输出按字符串处理,而不是字节流。

for line in result.stdout.splitlines():

按行遍历命令输出。

if '=' in line:

只有包含 = 的行,才像环境变量赋值。

var, value = line.split('=', 1)

把一行拆成:

os.environ[var] = value

把这些代理变量写进当前 Python 进程。

print(k, os.environ.get(k))

把几个常见代理变量打印出来,方便确认是否真的加载到了。

这一格什么时候有用

如果模型下载经常超时、连接失败、访问不到 Hugging Face,它就很有帮助。


五、Cell 3:设置 Hugging Face 镜像站

代码:

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

这一格在做什么

它告诉 Hugging Face 相关下载逻辑:

为什么重要

在国内网络环境下,直接访问 Hugging Face 官方站点有时不稳定。
这一步是在做最简单的“下载入口替换”。

逐行解释

os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

设置环境变量 HF_ENDPOINT,让后续 from_pretrained(...) 优先用镜像地址。


六、Cell 4:真正下载模型并保存到本地

代码:

# 下载模型,存到本地。

from transformers import AutoTokenizer

model_name = "sshleifer/tiny-gpt2"
save_dir = "/root/course_lora/models/tiny-gpt2"

tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.save_pretrained(save_dir)

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(model_name)
model.save_pretrained(save_dir)

这一格在做什么

这格开始真正下载模型资源,并把它们保存到本地。

它做了两件事:

  1. 下载 tokenizer 并保存
  2. 下载模型权重并保存

逐行解释

from transformers import AutoTokenizer

导入自动 tokenizer 加载器。

model_name = "sshleifer/tiny-gpt2"

指定模型名字。

这里选的是非常小的 tiny-gpt2,目的不是训练强模型,而是:

save_dir = "/root/course_lora/models/tiny-gpt2"

定义本地保存目录。

后面课程 notebook 都默认从这个目录读模型。

tokenizer = AutoTokenizer.from_pretrained(model_name)

从 Hugging Face 加载 tokenizer。

tokenizer.save_pretrained(save_dir)

把 tokenizer 保存到本地目录。

from transformers import AutoModelForCausalLM

导入因果语言模型类。

model = AutoModelForCausalLM.from_pretrained(model_name)

从 Hugging Face 加载模型权重。

model.save_pretrained(save_dir)

把模型权重保存到本地。

跑完这格后,你应该看到什么

save_dir 里,通常会看到类似文件:

这说明:


七、Cell 5 和 Cell 6:空白格

这两格是空的,没有实际作用,可以忽略。


八、这份 notebook 真正想让你理解什么

  1. 大模型实验里,“下载模型”本身就是一个独立步骤
  2. 模型下载失败,很多时候不是模型问题,而是:
  3. tokenizer 和 model 都要保存到本地,后续实验才能更稳

九、什么时候需要运行这份 notebook

只有在下面这些情况,你才需要主动跑它:

  1. 本地 tiny-gpt2 目录不存在
  2. 模型文件被删了
  3. 你换了新实例,没有课程镜像
  4. 你想重新下载一份干净的最小模型

如果本地模型已经在,而且后面 notebook 能正常加载,那就可以跳过这份 notebook。