Skip to content

第2章 大模型实战环境准备 ​

大模型的技术属性决定大模型必须要用,只有使用才是进一步了解大模型的所有特性的基础,也只有使用才能真正地去驾驭大模型。大模型成长在 IT 技术井喷、IT 产能过剩的时代。这样的时代背景让使用大模型比任何其他技术在诞生之初都便利。所以,赶快动手才是学习大模型的正确的道路,这也是本章的核心内容。

2.1 必备技能 ​

进入大模型开发之前,有一组工具是你绕不开的"基础设施"。它们不是大模型本身,但没有它们,你连第一行代码都跑不起来。

本节不教你这些工具的全部用法——那是手册该干的事。我们的目标是:让你在最短时间内把网络源配好、环境建好、工具链跑通,避免被网络延迟和版本冲突劝退。如果你是 Python 老手,可以快速扫过前几节,重点关注 Docker 和远程编辑部分。

2.1.1 Python 与 pip 源配置 ​

进入大模型领域,Python 是必修语言。不需要精通到能写元类,但必须能流畅阅读和修改代码。好在 Python 的入门曲线相对平缓。

真正让人头疼的,是 pip install 的下载速度。大模型相关的 Python 包动辄数百 MB(如 torch、transformers、vllm),默认从 PyPI 官方源(位于海外)下载时,速度可能只有几十 KB/s,失败率极高。

国内可用的 pip 镜像源:

镜像源URL
清华大学 TUNAhttps://pypi.tuna.tsinghua.edu.cn/simple/
阿里云https://mirrors.aliyun.com/pypi/simple/
腾讯云https://mirrors.cloud.tencent.com/pypi/simple/

日常使用推荐阿里云(稳定性好)或清华 TUNA(覆盖面广),两者任选其一即可。

配置镜像源的三种方式:

方式一:命令行临时指定(推荐用于快速测试)

bash
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple/

仅本次安装生效,不影响全局配置。适合在不确定镜像是否稳定时先用一次。

方式二:全局配置(推荐日常使用)

bash
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

执行后,所有 pip install 默认走阿里云镜像。这条命令本质是修改 ~/.config/pip/pip.conf(Linux/macOS)或 %APPDATA%\pip\pip.ini(Windows)。

方式三:直接编辑配置文件

Linux/macOS 下编辑 ~/.config/pip/pip.conf:

ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/

Windows 下编辑 %APPDATA%\pip\pip.ini,内容同上。

验证当前源配置:

bash
pip config list

输出中应有 global.index-url 指向你配置的镜像地址。

💡 建议:装好源再开工。不要在代码跑到一半报 Connection timeout 时才回头配——那会让你的注意力碎片化。

✅ 确认 pip config list 输出中包含国内源地址。

2.1.2 uv:下一代 Python 包管理器 ​

uv 由 Astral 团队(也是 Python 静态分析工具 Ruff 的开发者)打造,使用 Rust 编写。它的核心目标是解决 pip 两个长期痛点:安装速度慢和依赖解析不稳定。

在大模型生态中,越来越多工具开始以 uv 作为首选安装方式(如后续第 2.5 节将介绍的 Claude Code、OpenClaw 等工具),所以它不是"可选",而是"必修"。

安装 uv:

macOS / Linux:

bash
curl -LsSf https://astral.sh/uv/install.sh | sh

Windows (PowerShell):

powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

验证安装:

bash
uv --version
# 示例输出: uv 0.5.x

常用命令速览:

操作pipuv
安装包pip install xxxuv pip install xxx
创建虚拟环境python -m venv .venvuv venv
编译依赖pip freeze > requirements.txtuv pip compile

uv 的安装速度通常比 pip 快 10-100 倍,对需要频繁切换环境的大模型开发者来说,这个时间差积累起来非常可观。

✅ 确认 uv --version 能正常输出版本号。

2.1.3 Conda:隔离你的 Python 环境 ​

如果你只做一个项目、只用一套依赖,venv 就够了。但大模型开发的现实是:项目 A 需要 torch==1.13.1,项目 B 需要 torch==2.4.0;LLaMA-Factory 依赖 Python 3.10,而 vLLM 要在 Python 3.11 上跑。

Conda 的价值就在这:它在操作系统之上独立管理 Python 版本和包,不同环境之间完全隔离、互不干扰。对初学者来说,这个习惯越早养成越好——不要用全局 Python 环境干活。

配置国内镜像源:

bash
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --set show_channel_urls yes

日常高频命令:

bash
# 查看版本
conda --version

# 搜索可用的 Python 版本
conda search python

# 创建环境(指定 Python 版本)
conda create -n py310 python=3.10

# 激活环境
conda activate py310

# 检查当前 Python 版本
python --version

# 切换环境
conda activate py38

# 退出当前环境
conda deactivate

# 列出所有已创建的环境
conda env list

# 删除环境(注意:不可逆操作)
conda remove -n py310 --all -y

✅ 确认 conda env list 能看到你创建的环境。

2.1.4 Docker:一次封装,到处运行 ​

Docker 在大模型开发中有两层价值。

第一层是环境复制:大模型推理和训练涉及大量底层库(CUDA、cuDNN、NCCL 等),在裸机上手工安装极易出错。而一个配置好的 Docker 镜像,可以在任何支持 Docker 的机器上一键启动,环境完全一致。

第二层是服务部署:生产环境的推理服务几乎都跑在 Docker 容器中。如果你习惯在裸机上开发,到部署时还要再学一套容器化——不如一开始就用 Docker。

安装 Docker:

macOS 和 Windows 用户直接下载 Docker Desktop:

Linux 用户(以 Ubuntu 为例):

bash
# 使用官方脚本一键安装
curl -fsSL https://get.docker.com | sh

# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录后生效

配置国内镜像加速器:

Docker Hub 位于海外,大模型镜像动辄 10GB+,直连下载几乎不可用。你需要配置镜像加速器。

编辑 /etc/docker/daemon.json(Linux)或 Docker Desktop 的 Settings → Docker Engine:

⚠️ 全新安装的 Docker 中 /etc/docker/daemon.json 可能不存在,需要手动创建并使用 sudo 编辑。

json
{
  "registry-mirrors": [
    "https://your-mirror-id.mirror.aliyuncs.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}

⚠️ 阿里云镜像加速器需要注册后获取专属 ID(控制台地址:https://cr.console.aliyun.com/)。免费的公共镜像加速器近年来陆续失效。免费公共镜像加速器可能不稳定,如果你遇到频繁失败或需要 7×24 稳定服务,可以考虑付费加速服务如 轩辕云,它能覆盖大模型开发中绝大多数常用镜像,每月花费很低,但能省下大量等待时间和失败的挫败感。

重启 Docker 使配置生效:

bash
# Linux
sudo systemctl restart docker

# macOS/Windows: 在 Docker Desktop 中点击 Restart

验证加速器是否生效:

bash
docker info | grep -A 5 "Registry Mirrors"

✅ 确认 docker info | grep -A 5 "Registry Mirrors" 能看到配置的加速器地址。

2.1.5 GitHub 与网络代理配置 ​

大模型的代码仓库、模型权重、开源工具几乎都在 GitHub 和 Hugging Face 上。如果不解决访问速度问题,git clone 一个几百 KB 的仓库都能卡你十分钟。

Git 代理配置:

如果你本地已运行代理软件(如 Clash、V2Ray),可以通过以下命令让 Git 走代理:

bash
# 设置 HTTP 和 HTTPS 代理
git config --global http.https://github.com.proxy http://127.0.0.1:7890
git config --global https.https://github.com.proxy http://127.0.0.1:7890

取消代理:

bash
git config --global --unset http.https://github.com.proxy
git config --global --unset https.https://github.com.proxy

终端代理配置:

很多大模型工具的安装脚本内部调用了 curl 和 wget,它们不会自动使用系统代理。你需要在终端中显式设置环境变量:

bash
# macOS / Linux — 临时生效
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

# 如果要持久化,将以上两行追加到 ~/.zshrc 或 ~/.bashrc
echo 'export http_proxy="http://127.0.0.1:7890"' >> ~/.zshrc
echo 'export https_proxy="http://127.0.0.1:7890"' >> ~/.zshrc
source ~/.zshrc

关键认知:很多新手开代理后以为"整个系统"都走了代理——但终端不走。你开了代理而 git clone 和 pip install 依然超时,大概率是因为没有设置终端的 http_proxy / https_proxy 环境变量。

Docker 构建时的代理传递:

Docker daemon 本身不走终端代理。如果你需要在 docker build 过程中下载依赖(如 pip install),需要在构建命令中显式传递代理:

bash
docker build \
  --build-arg http_proxy=http://host.docker.internal:7890 \
  --build-arg https_proxy=http://host.docker.internal:7890 \
  -t my-image .

✅ 确认 git clone GitHub 仓库时下载速度正常,不再长时间卡住。

2.1.6 编程工具:VSCode 与 PyCharm 远程编辑 ​

大模型开发的一个现实是:你的笔记本没有高性能 GPU,而推理和训练必须跑在远程 Linux 服务器上。传统的"本地写代码 → 上传到服务器 → 运行 → 看日志 → 改代码"循环会消耗大量精力。

VSCode 和 PyCharm 的远程编辑功能,本质上是把远程服务器的文件和计算资源"映射"到你本地,让你像编辑本地文件一样编辑远程代码,同时代码实际运行在服务器上。

VSCode Remote-SSH 配置:

VSCode 的远程开发体验是业界标杆。它的架构是:本地 VSCode 只做 UI 渲染,所有代码编辑、终端、插件运行在远程服务器上的 VSCode Server 上。

  1. 安装插件:在 VSCode 扩展市场搜索并安装 Remote - SSH。
  2. 建立连接:
    • 点击左下角蓝色图标 ><,选择 Connect to Host...
    • 输入 ssh username@your_server_ip,按提示输入密码
  3. 配置免密登录(推荐):
    bash
    ssh-copy-id username@your_server_ip
  4. 环境激活:连接成功后打开远程终端(Ctrl+``),使用 conda activate your_env` 激活对应的 Python 环境。
  5. 重新安装插件:在 VSCode 左侧扩展栏(Ctrl+Shift+X)中搜索 Python,注意扩展卡片上会标注"在 SSH: xxx 中安装",点击该按钮即可安装到远程端。远程端的插件和本地端的插件是独立管理的。安装后,VSCode 会自动识别远程的 Python 解释器。

VSCode 远程编辑的核心优势:

  • 轻量级:本地只跑 UI,内存占用低。
  • AI 插件原生支持:GitHub Copilot、Claude Code、Cursor 等可在远程端直接安装使用。
  • 自动端口转发:如果远程服务器启动了 Web 服务(如 Gradio 在 7860 端口),VSCode 自动将端口映射到本地浏览器。

PyCharm 远程解释器配置:

PyCharm 的远程模式与 VSCode 不同——它在本地保留一份代码副本,通过 SFTP 与服务器双向同步。

  1. 配置部署路径:
    • Settings → Build, Execution, Deployment → Deployment
    • 添加 SFTP 服务器,填写服务器 IP、用户名和密码
    • 设置路径映射:Local Path(本地项目路径)→ Deployment Path(服务器上对应路径)
    • 在 Options 中勾选 Automatic Upload,确保本地保存时自动同步到服务器
  2. 配置远程解释器:
    • Settings → Project: <项目名> → Python Interpreter
    • 点击齿轮 → Add... → On SSH...
    • 选择服务器上已有的 Conda 环境路径(如 /home/user/miniconda3/envs/py310/bin/python)
  3. 路径映射:确保 Path Mappings 中本地路径和服务器路径一一对应,否则断点调试时行号会错位。

PyCharm 远程编辑的核心优势:

  • 深度调试:远程 Debug 极其稳定,支持断点、变量监控和数据可视化。
  • 离线索引:本地有代码副本,断网时搜索和跳转不受影响。
  • 集成工具:内置远程数据库管理器,可以直接查看服务器上的 MySQL/PostgreSQL。

工具选择建议:

场景推荐工具
日常开发、快速迭代、AI 辅助编程VSCode
深度调试、大规模重构、多进程异步代码PyCharm
笔记本配置较低VSCode(远程模式更轻量)

✅ 确认远程终端能正常打开,且能激活你的 Conda 环境。

这一节覆盖了六个类别的工具和配置。它们有一个共同点:都是基础设施,不涉及大模型本身,但决定了你能不能顺利跑起来。

如果你从本节只带走一件事,那就是:开工之前先配好源。Python 源、Conda 源、Docker 镜像加速器、GitHub 代理——这四个配通了,你就能把精力花在理解模型上,而不是盯着进度条等超时。

下一节,我们将进入大模型的"物料仓库"——Hugging Face、ModelScope 和 Ollama,了解从哪里获取模型权重、如何高效下载,以及在不同场景下应该选择哪个平台。

2.2 大模型的仓库 ​

上一节我们配好了网络源、装好了工具链。现在来到真正的主角面前:模型本身。大模型的权重文件(也称模型文件或模型快照,本书中三个术语等价使用)从几 GB 到数百 GB 不等,放在哪里、怎么下载、不同平台各有什么特点——这些不是"用到了再查"的小事。下载到一半发现走的是国外源、速度只有几十 KB/s,这种体验足以让你在开工第一天就怀疑自己适不适合干这行。

本节介绍大模型开发中最核心的四个"物料来源":Hugging Face(全球模型中心)、ModelScope 魔搭(国内高速替代)、Ollama(本地一键运行)和在线推理服务(零部署直接调用)。读完这一节,你就能根据场景快速选择正确的平台,不再为"从哪下模型"浪费时间。

2.2.1 Hugging Face:全球大模型的 GitHub ​

Hugging Face(以下简称 HF)是当前全球最大的模型托管平台。如果说 GitHub 是代码的集散地,那 Hugging Face 就是预训练模型、数据集和 Demo 空间的集散地。几乎所有的开源大模型——LLaMA、Mistral、Qwen、DeepSeek——都会在 HF 上首发权重。

注册与 Token

使用 HF 的第一步是注册账号并获取访问令牌(Access Token)。部分模型(如 LLaMA 系列)需要签署许可协议后才能下载,这一步绕不开。

  1. 打开 https://huggingface.co/join 注册账号
  2. 登录后进入 https://huggingface.co/settings/tokens
  3. 点击 "Create new token",选择 Read 权限即可
  4. 复制生成的 token(形如 hf_xxxxxxxxxxxxxxxxxxxxxxxxxx)

安装 SDK

bash
pip install huggingface-hub

huggingface-hub 是 HF 官方的 Python SDK,同时安装命令行工具。注意:新版 CLI 命令名是 hf(huggingface_hub 1.0 起由 huggingface-cli 更名而来,旧名仍可用但会提示弃用)。本节只用 CLI 方式。

登录认证

bash
hf auth login

粘贴上一步获取的 token,回车确认。认证信息会保存到 ~/.cache/huggingface/token,后续操作无需重复输入。

配置加速镜像

HF 的服务器在海外,国内直连下载速度可能只有几十 KB/s,模型还没下载完,耐心先没了。好在有国内的镜像站点:

镜像站URL
hf-mirror.comhttps://hf-mirror.com
hf-cdn.sufy.comhttps://hf-cdn.sufy.com

设置方式(Linux/macOS):

bash
export HF_ENDPOINT=https://hf-mirror.com

Windows(PowerShell):

powershell
$env:HF_ENDPOINT="https://hf-mirror.com"

💡 建议:将 export HF_ENDPOINT=... 写入 ~/.zshrc 或 ~/.bashrc,避免每次开终端都要手动设置。

下载模型

设置好镜像后,下载一个模型只需一条命令:

bash
# 注:--resume-download 已被废弃(下载到本地目录本来就会断点续传),不用写
hf download deepseek-ai/deepseek-llm-7b-chat \
  --local-dir ~/models/deepseek-llm-7b-chat

参数说明:

  • 断点续传:hf download 默认支持,无需额外参数(指定同一个 --local-dir 即从中断处继续)。下载几十 GB 的模型时意外中断是常态,这个能力默认就有。
  • --local-dir:指定本地保存路径。不指定则默认存到 HF 的缓存目录(通常放在 ~/.cache/huggingface/hub/),路径冗长且不易管理。
  • 最后一个参数是模型在 HF 上的 ID,格式为 组织名/模型名。

下载数据集

HF 也托管了大量公开数据集,下载方式类似,只需加上 --repo-type dataset:

bash
hf download sahil2801/CodeAlpaca-20k \
  --repo-type dataset \
  --local-dir /home/yourname/datasets/codealpaca

⚠️ 注意:下载频率不要太高。短时间内大量并发请求可能被 HF 限制速率。实际学习中建议提前规划,根据当天学习内容预先下载好需要的模型——不要在代码跑到一半才发现模型还没下完。

2.2.2 ModelScope 魔搭:国内开发者的首选 ​

ModelScope(魔搭社区)由阿里巴巴发起,是国内最大的开源模型平台。对国内开发者来说,它的核心价值就一句话:不需要代理,下载速度跑满带宽。

魔搭的三个核心优势

  1. 国内直连,无需代理:服务器在国内,下载速度通常在 10-50 MB/s,是 HF 直连的数十到数百倍。
  2. 国产模型首发:Qwen(通义千问)、DeepSeek、Yi(零一万物)、ChatGLM 等国产一线模型,通常在魔搭提供最完善的权重和文档支持。很多模型的 Hugging Face 页面上甚至直接写着"推荐中国用户使用 ModelScope 下载"。
  3. 免费算力:平台提供"幻境"在线 Notebook 环境,内置 GPU,可以直接在线试用模型。具体步骤很简单:打开 https://modelscope.cn/studios,选择感兴趣的模型空间,点击"在 Notebook 中打开",即可获得免费的 GPU 算力——不需要本地配置,浏览器就能跑。

安装 SDK

bash
pip install modelscope

Python 代码下载模型

python
from modelscope import snapshot_download

model_dir = snapshot_download(
    'deepseek-ai/DeepSeek-R1-Distill-Qwen-7B',
    cache_dir='./my_models'
)
print(f"模型已保存至: {model_dir}")

snapshot_download 会下载完整的模型快照(包括配置文件、分词器、权重分片等),并自动处理断点续传。

命令行下载模型

如果你更习惯命令行,魔搭也提供了 CLI 工具:

bash
# 下载模型
modelscope download \
  --model ZhipuAI/GLM-4.1V-9B-Thinking \
  --local_dir /home/yourname/models/GLM-4.1V-9B-Thinking

# 下载数据集
modelscope download \
  --dataset nullskymc/ruozhiba_R1 \
  --local_dir /home/yourname/datasets/ruozhiba_R1

💡 HF 与 ModelScope 的定位:这两个平台不是二选一的关系。多数有经验的开发者在两个平台上都维护账号——HF 追踪全球最新发布的权重和论文,ModelScope 承担日常下载主力。两者互补,而非替代。

2.2.3 Ollama:把大模型装进笔记本 ​

Hugging Face 和 ModelScope 解决的是"模型从哪下载"的问题。但下载了权重文件之后,你还需要自己搭建推理环境——加载模型、处理输入、管理显存、暴露 API——这些事加起来并不简单。

Ollama 的做法是:把这些全包了。它不是一个模型,而是一个本地模型运行管理器。它把模型权重、配置、推理后端(基于 llama.cpp)打包成一个可执行单元,你只需一行命令。

安装 Ollama

macOS:从 https://ollama.com/download 下载安装包,拖入 Applications 即完成安装。

Linux:

bash
curl -fsSL https://ollama.com/install.sh | sh

Windows:从官网下载 .exe 安装包,双击安装。

运行第一个模型

bash
ollama run qwen2.5:7b

Ollama 会自动检查本地是否已有该模型。如果没有,自动从 Ollama 模型库下载,下载完成后直接进入交互对话界面。整个过程你不需要关心 CUDA 版本、PyTorch 版本、模型加载代码——Ollama 全部静默搞定。

常用管理命令

bash
# 列出本地已安装的模型
ollama list

# 只下载模型,不运行
ollama pull qwen2.5:7b

# 删除本地模型
ollama rm qwen2.5:7b

# 查看模型详情(参数量、量化方式、架构等)
ollama show qwen2.5:7b

内置的 API 服务

Ollama 启动后会在本地 11434 端口自动开启一个兼容 OpenAI 格式的 HTTP API。这意味着你可以用任何支持 OpenAI API 的客户端直接调用本地模型:

bash
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5:7b",
    "messages": [{"role": "user", "content": "你好"}]
  }'

这个特性极其实用:你在本地做 Agent 开发时,不需要接外部 API,不需要花钱,一个 Ollama 就能把整个"模型→API→应用"的链路跑通。

Docker 化部署 Ollama(生产环境推荐)

如果你已经按照 2.1.4 节的指引配置了 Docker 环境,也可以将 Ollama 容器化部署——这在多人共享一台 GPU 服务器时尤其方便:

bash
docker run -d \
  --gpus all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama

然后通过 Docker 执行命令管理模型:

bash
# 在容器中拉取模型
docker exec -it ollama ollama pull qwen2.5:7b

# 在容器中运行模型
docker exec -it ollama ollama run qwen2.5:7b

-v ollama:/root/.ollama 将已下载的模型持久化到 Docker 卷中,容器重启不会丢失。

💡 HF/ModelScope 的原始权重 vs Ollama 的打包模型

看到这里,你可能会有一个疑问:从 Hugging Face 或 ModelScope 下载的 .safetensors 文件,能用 Ollama 直接加载吗?

答案是不能。HF 和 ModelScope 下载的是原始模型权重文件(.safetensors 或 .bin),需要通过 PyTorch / HuggingFace Transformers 库来加载和运行。而 Ollama 使用的是经过量化、打包的 GGUF 格式,背后依赖 llama.cpp 作为推理引擎。两种格式不互通——从 HF 下载的 .safetensors 文件不能直接用 ollama run 加载。

如果你在 HF 上找到了一个喜欢的模型想在 Ollama 中本地运行,需要确认该模型在 Ollama 模型库 中已有对应的 GGUF 打包版本(用 ollama search <模型名> 查询)。如果 Ollama 上还没有,就需要用 Modelfile 自行编写转换配置——这属于进阶操作,不在本书范围。不过在大多数常见场景下,主流模型的 GGUF 版本在 Ollama 上都能直接搜到。

2.2.4 在线推理服务:零部署直接调用 ​

对于超大模型(如 DeepSeek-V3、Qwen-Plus 等参数量超过 200B 的模型),本地部署的门槛极高——即使是量化版本也可能需要多张 A100。此时最高效的方式是直接购买在线推理服务。

国内推荐

平台地址特点
DeepSeek 开放平台https://platform.deepseek.com自研模型,API 兼容 OpenAI 格式,价格极低
通义千问(阿里云)https://tongyi.aliyun.comQwen 全系列模型,阿里云生态集成
智谱开放平台https://open.bigmodel.cnChatGLM 系列,国产老牌

国际推荐

平台地址特点
OpenRouterhttps://openrouter.ai统一接入 200+ 模型,按量付费,无需各平台分别注册

在众多国际平台中,OpenRouter 尤其值得单独说明。它扮演的是"模型路由层"的角色——你只需在 OpenRouter 注册一个账号、充值一次,就能通过同一个 API 端点调用包括 OpenAI、Anthropic、Google、Meta、DeepSeek 在内的 200+ 个模型。对于需要对比不同模型效果、或者不想在每个平台单独注册账号的开发者来说,这极大地降低了接入成本。

下面是一个调用示例:

python
from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key="your-openrouter-api-key",
)

response = client.chat.completions.create(
    model="deepseek/deepseek-chat",  # 模型名以官方文档为准,示例仅示意;也可换成 "anthropic/claude-3.5-sonnet"
    messages=[{"role": "user", "content": "介绍一下大语言模型的注意力机制"}]
)

print(response.choices[0].message.content)

只需修改 model 参数,就能切换到不同厂商的模型,其余代码完全不变。本书后续章节中大部分 API 调用示例都会采用 OpenRouter 作为统一入口。

注册后的通用开发范式

无论选择哪个平台,开发流程高度一致:

  1. 注册 → 获取 API Key
  2. 配置环境变量(如 DEEPSEEK_API_KEY、DASHSCOPE_API_KEY)
  3. 使用 OpenAI 兼容的 SDK 调用(绝大多数平台都兼容 openai Python 库的接口格式)

举个例子,用 DeepSeek 的 API:

python
from openai import OpenAI

client = OpenAI(
    api_key="your-deepseek-api-key",
    base_url="https://api.deepseek.com"
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "介绍一下大语言模型的注意力机制"}]
)

print(response.choices[0].message.content)

💡 建议:在学习和开发阶段,在线推理服务是最快的"上手路径"。先用 API 跑通业务逻辑,确认模型效果和成本后,再决定是否部署本地模型。

2.2.5 快速决策:我该用哪个? ​

面对这么多平台,一个初学者最常见的困惑是:我到底该选哪个? 下表给出了一个简洁的判断框架。

你面临的情况推荐选择理由
你在国内,需要下载开源模型权重做实验ModelScope 魔搭下载速度最快,国产模型文档最全
你追踪国际最新模型(论文刚发的权重)Hugging Face(配合镜像)全球首发,模型覆盖最广
你想在笔记本上快速跑一个对话模型测试Ollama一键安装,自动管理,无需写代码
你需要本地 API 服务做 Agent 开发调试Ollama内置 OpenAI 兼容 API,零配置
你做生产级推理服务部署Docker + 模型文件(从魔搭/HF 下载)灵活可控,可编排,可监控
你用超大模型(200B+),没有 GPU 集群在线推理服务零部署成本,按量付费
你只需要快速验证一个 prompt 的效果在线推理服务不需要下载任何东西,打开网页就能试

这三个平台不是竞争关系,而是互补关系。在实际工作中,一个成熟的开发者通常同时使用多个平台:从 ModelScope 下载模型权重 → 用 Ollama 在本地做功能验证 → 最终部署到生产环境时从 HF 或魔搭拉取特定版本 → 超大规模场景走在线 API。

这就是目前大模型开发者的"物料保障体系"。

这一节我们介绍了大模型的四个核心物料来源。从 HF 的全球生态,到 ModelScope 的国内加速,到 Ollama 的一键运行,再到在线推理服务的零部署调用——每个平台都有它最适合的场景。

记住一个核心原则:不要和网络较劲。 选对平台,把时间花在理解模型和构建应用上,而不是盯着进度条。下载慢就切镜像,本地跑不动就用 API——这些选择没有高低之分,只有适不适合你当前的工作。

下一节,我们将面对大模型开发中最实在的问题:算力从哪来——是自建 GPU 工作站,还是租用云端算力,每种方案的成本和坑在哪里。

2.3 算力环境准备 ​

大模型的运行离不开 GPU 算力的支撑。在进入实战之前,预备一个稳定的算力环境是第一步。

如果你只做大模型应用层开发——即直接调用 OpenAI、DeepSeek、通义千问等在线推理 API,购买 Token 就能工作——可以跳过本节,直接进入 2.4 节。你的"算力"就是 API 背后的数据中心。

但对于需要本地运行、微调、甚至训练模型的读者,算力环境是你绕不开的第一道坎。本节将告诉你:自己买卡建环境要踩哪些坑,以及为什么租用算力对多数人是更好的选择。

2.3.1 自建环境:从"入坑"到"填坑" ​

除非你已经拥有一台高性能工作站,否则不建议在学习初期自建环境。如果你坚持,下面是你需要面对的几件"小事"。

GPU 选择:为什么只能是 NVIDIA ​

大模型推理和训练目前高度依赖 CUDA 生态。AMD 通过 ROCm 平台已经能够运行主流模型,Apple Silicon 借助 MPS(Metal Performance Shaders)也能跑 7B 级别的推理,但在学习阶段,NVIDIA 拥有三个不可替代的优势:

  1. 文档与社区:全球 90% 以上的开源大模型项目首发即支持 CUDA。你遇到的任何一个 RuntimeError,几乎都能在 NVIDIA 开发者论坛或 GitHub Issue 里找到答案。
  2. 框架兼容性:PyTorch、TensorFlow、vLLM、TensorRT-LLM 等推理/训练框架对 CUDA 的支持是最成熟的,ROCm 和 MPS 往往滞后数周到数月。
  3. 排错成本:同样的 OOM 报错,在 CUDA 上用 nvidia-smi 和 torch.cuda.memory_summary() 十分钟能定位,在 ROCm 上可能需要翻 AMD 社区里一个两年前的未回复帖子。

下面是一张 NVIDIA 主流 GPU 的显存对照表,覆盖从入门学到生产训练的全场景:

型号显存CUDA 核心显存带宽适用场景
RTX 3060 12G12 GB GDDR63584360 GB/s入门学习:运行 7B 模型(INT8 量化),小规模 RAG 应用,API 调用层开发
RTX 4060 Ti 16G16 GB GDDR64352288 GB/s中档推理:7B 模型 FP16 推理,13B 模型 INT4 量化推理
RTX 3090 24G24 GB GDDR6X10496936 GB/s性价比之王:7B-13B 全参数微调(LoRA/QLoRA),34B INT4 推理,个人级 Agent 开发
RTX 4090 24G24 GB GDDR6X163841008 GB/s当前主力卡:高性能推理与微调,13B-34B 模型全参数微调,70B INT4 推理
RTX 4090D 48G48 GB GDDR6X145921008 GB/s专业工作站:70B 模型 Q4/Q8 推理,本地 Agent 集群部署
A6000 Ada 48G48 GB GDDR618176960 GB/s企业工作站:72B 模型推理,多模型并行部署,稳定性优于消费卡
A100 80G80 GB HBM2e69122039 GB/s数据中心标杆:全参数微调 70B+ 模型,多节点分布式训练,生产级推理
H100 80G80 GB HBM3184323350 GB/s大规模训练:FP8 训练加速,MoE(混合专家)模型训练,千亿参数模型
H200 141G141 GB HBM3e184324800 GB/s超大模型:万亿参数模型推理,高吞吐 Agent 集群

选购原则:优先考虑显存容量,其次才是计算速度。大模型推理的硬门槛是"权重能不能放得下"——显存不够,算力再强也用不上。举个直观的例子:一个 FP16 精度的 7B 模型约占用 14 GB 显存,如果显存只有 12 GB,就算 RTX 4090 的核心再快也不可能直接跑 FP16,必须先做量化。

RTX 4090D 48G 还是 A6000 Ada 48G? 同为 48 GB 显存,这两张卡定位不同。RTX 4090D 是消费卡,价格较低但受功耗墙和散热限制,适合个人开发者间歇性高负载使用。A6000 Ada 是企业卡,配备 ECC 显存(纠错码)、数据中心级稳定性,支持 vGPU 虚拟化切分,7×24 持续推理更可靠。个人开发者优先 4090D;需要生产环境昼夜运行时,A6000 的稳定性更值得投入。

系统与驱动:Linux 是默认选项 ​

操作系统:首选 Ubuntu 22.04 LTS。Windows 虽然可以通过 WSL2 运行 Linux 环境,但坑不少:WSL2 中 nvidia-smi 在宿主机能显示 GPU,而 Docker 容器内 --gpus all 仍可能失败;将模型放在 Windows 文件系统(/mnt/c)而非 WSL2 原生文件系统(~/)中时,加载速度比原生 Linux 慢 2-5 倍;频繁加载卸载模型后显存释放不及时,可能需要重启 WSL2 实例。如果你用的是 Mac,Apple Silicon 的 MPS 可以跑推理但速度远不如同价位的 NVIDIA 卡,不建议作为主力开发机。

驱动安装:NVIDIA 提供了便捷的 CUDA Toolkit 安装向导(https://developer.nvidia.com/cuda-downloads),按提示选择操作系统和安装方式即可。关键原则是 Driver 版本 >= CUDA Toolkit 要求的最低版本。不匹配的驱动是新手最常见的翻车点。

其他显卡的适用性 ​

国产 GPU 正在快速追赶,值得关注但不建议初学者首选用作主力:

  • 华为昇腾 (Ascend):通过 MindSpore 框架或昇腾 CANN 算子库运行大模型,已有 Qwen、Llama 等模型的适配。信创场景下的主流选择。
  • 摩尔线程 (Moore Threads):基于 MUSA 架构,已支持部分 PyTorch 模型推理。

建议先在 NVIDIA 环境掌握基本流程和原理,再根据具体需求评估国产方案。

2.3.2 算力租用:高效学习的"捷径" ​

对于 90% 的开发者来说,租用算力是性价比最高的选择。下面这张对比表一目了然:

维度自建环境算力租用
初期投入数万元(一张 4090 + 整机)数十元/小时起,用多少付多少
环境配置自行安装驱动、CUDA、PyTorch、框架,耗时半天到数天平台预装镜像,开箱即用
模型下载家用带宽下载 70B 模型可达数小时平台内网镜像加速,数分钟到十几分钟
硬件弹性买定离手,升级换卡成本高随时切换 A100/H100,按需选卡
维护成本散热、电源、驱动崩溃,全部自理平台负责,你只管写代码
网络条件受家庭/办公室网络限制数据中心网络,HuggingFace/ModelScope 直连

租用平台对比 ​

下面是目前国内主流 GPU 算力平台的对比:

平台定位核心优势适合人群参考成本
AutoDL (autodl.com)学生/个人开发者首选镜像极丰富(预装 PyTorch + Transformers + Jupyter),按量计费起价低,社区活跃在校学生、独立开发者、快速实验RTX 3090 约 1-2 元/小时
UCloud (ucloud.cn)稳定云 GPU 服务提供长期运行的 GPU 实例,网络稳定,适合挂机测试和 7×24 服务需要稳定测试环境的中小团队按实例配置计费
阿里云 PAI企业级 AI 平台覆盖数据标注→模型训练→部署的全生命周期,支持分布式训练,技术文档最完整企业团队、需要完整 MLops 的角色较高,适合有预算的团队
腾讯云 TI企业级 ML 平台内置 TI-ONE 平台,集成 Notebook 开发环境,与腾讯生态打通腾讯生态用户、企业机器学习项目与阿里云接近
百度 BML全功能 AI 平台飞桨 (PaddlePaddle) 原生支持,提供 EasyDL 低代码训练飞桨生态用户、低门槛 AI 开发免费额度+按需付费

选择原则:简单、快速。如果你是个人开发者,从 AutoDL 起步就够了。等你真正需要一个 7×24 运行的 Agent 集群时,再考虑 UCloud 或大厂云。不要一上来就研究阿里云 PAI 的全套 MLops 流程——你只是想跑一个 7B 模型的推理,不是建一个数据中心。

⚠️ 飞桨生态提示:飞桨(PaddlePaddle)是百度自研框架,与 PyTorch 生态不直接兼容。如果你以 PyTorch 为主线学习,百度 BML 免费额度的实际价值有限——不建议为了免费学飞桨,除非你本来就做百度生态开发。

租用算力真的贵吗 ​

算一笔账:一张 RTX 4090 显卡约 1.3 万元,配上整机约 1.8 万元。这笔钱在 AutoDL 上可以租用 RTX 3090 超过 9000 小时——相当于每天跑 8 小时、连续跑 3 年。而你在此期间可以随时切换成 A100 做一次全参数微调(自建环境几乎没有这个选项)。更重要的是,算力平台提供了预装环境——你不需要花两天时间折腾 CUDA 版本和驱动兼容性。

实践建议:租用算力虽然会产生几十到几百元的费用,但它能让你把精力集中在模型逻辑和业务理解上。在成熟公司,环境配置和算力维护是由 SRE 或基础设施组负责的。作为开发者,你最核心的能力是"高效利用算力解决问题",而不是"自己装一台深度学习工作站"。

无论你选择自建还是租用,有一个原则贯穿始终:不要让环境问题挤占你的学习带宽。显卡驱动的兼容性、CUDA 版本的匹配、依赖包的下载速度——这些不是大模型技术的核心,却是最让人崩溃的拦路虎。当你发现自己在和环境搏斗了超过一个小时,停下来,考虑算力租用或直接使用在线 API。你的精力应该花在理解 Transformer 的注意力机制上,而不是研究 nvidia-driver-535 和内核版本的恩怨情仇。

下一节(2.4)将直面大模型实战中最折磨人的四类阻力——环境、网络、语言与思维、时效——并给出可操作的破解方法。

2.4 大模型实战阻力 ​

上一节我们讨论了算力从哪来——自建还是租用,GPU 怎么选。假设你已经有了一台跑得通的服务器,CUDA 装好了,PyTorch 也导入了——恭喜,真正的修行才刚开始。

大模型开发中,消耗你最多时间的往往不是模型架构本身,而是四类你看得见却躲不掉的阻力:环境、网络、语言习惯和时效。它们不酷炫,不前沿,但每一条都能让你在凌晨两点对着终端怀疑人生。本节把这些坑摊开了讲,每个阻力后面都附具体的应对方法——不是灌鸡汤,是给你工具箱。

2.4.1 环境阻力:别让驱动劝退你 ​

大模型的技术栈是一根垂直的"依赖柱":最底层是 NVIDIA 驱动,往上是 CUDA Toolkit,再上是 cuDNN / NCCL 等加速库,然后才是 PyTorch / TensorFlow,最上层才是 Transformers、vLLM 等应用框架。这条链上任何一个环节的版本不匹配,代码就跑不起来。

更让人抓狂的是,报错信息往往不直接告诉你问题在哪。当你看到 CUDA error: no kernel image is available for execution on the device 时,真正的原因可能是你的 PyTorch 编译时用的 CUDA 架构和你的 GPU 架构不兼容——但这个判断需要你翻过三个项目的 GitHub Issue 才能拼凑出来。

实操解法一:时间隔离法

不要在写代码的间隙去修环境。你本来想跑一个推理脚本,发现 torch 版本不对,于是花 20 分钟降级 torch,又发现 transformers 不兼容,再花 30 分钟改依赖,等环境调通了,思路也断了。

正确做法是专门划出半天处理环境。把所有依赖理清楚,一次性安装、验证、测试,调通后立刻做镜像备份。之后写代码的时间就只写代码——环境的"上下文"完全不动。

如果你只有晚上两小时,可以分两天:第一天装 CUDA 和 Docker,第二天装 Python 包和框架。关键是不要把写代码和环境调试混在同一天。

实操解法二:果断放弃"本地折腾"

如果你的本地环境实在调不通——笔记本尤其如此——果断放弃。笔记本——除非你是 M4 Max 128GB 或同等配置——不适合做大模型的主力开发机。即使有独显,笔记本的散热会降频,驱动兼容性比桌面版更脆弱,虚拟机更无法直接透传 GPU。看着 torch.cuda.is_available() 返回 False 的心情,没必要反复体验。

首选方案是租用算力平台上的预装镜像(见 2.3.2 节),那是别人帮你踩完所有坑之后的成品。你打开的 Jupyter Notebook 里,CUDA、PyTorch、vLLM 全部配好,只等你写代码。

实操解法三:拥抱 Docker

大模型环境天然具有"一次性"特征。你今天用 Qwen2.5 做微调需要 PyTorch 2.5 + CUDA 12.4,下个月做 vLLM 推理需要特定版本的 FlashAttention——如果全部装在裸机上,你的环境会像叠叠乐一样随时崩塌。

Docker 的价值就在这里:每个项目一个镜像,环境完全隔离,换项目就是 docker run 换一个容器。更重要的是,Docker 镜像可以在不同算力平台间无缝迁移——你今天在 AutoDL 的 3090 上跑通的镜像,明天在 UCloud 的 4090 上也能一键启动。

bash
# 构建你的专属开发镜像
docker build -t my-llm-dev:latest .

# 在任意 GPU 服务器上一键启动
docker run --gpus all -it \
  -v $(pwd):/workspace \
  my-llm-dev:latest

心态建设:环境配不通 ≠ 你不行

这是本节最重要的心理建设。大模型的环境配置不是"软件开发基础技能",它是一层独立的专业技能。在成熟公司,环境是由基础设施组或 SRE 负责的——一群专门研究驱动兼容性的人。作为应用开发者,你的核心能力是"在算力上高效工作",而不是"把算力安装好"。

如果环境折腾了一个小时还没通,停下来。切换到算力租用平台,或者直接用在线 API(见 2.2.4 节)。不要让 nvidia-driver-535 和内核版本的恩怨,阻碍你学习 Transformer 的注意力机制。

OOM 心理建设

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 2.00 GiB. GPU 0 has a total capacity of 23.64 GiB of which 1.32 GiB is free.

这是大模型开发者看到最多的报错——没有之一。当你第一次撞上 OOM,很容易觉得是自己代码写错了、参数设大了、逻辑有问题。实际上,OOM 在 90% 的情况下不是 bug,是显存的物理限制。

你需要做的不是自责,而是学会"和显存打交道"。三个直接有效的策略:

  1. 减小 batch_size:推理时 batch_size=1 完全可以接受。微调时从 1 开始,逐步试到 OOM 的边界。每次 OOM 都是显存的"水位测量"——你知道你的 batch 最多能到多少。
  2. 使用量化:FP16 的 7B 模型约占 14 GB 显存,INT8 量化后降到约 7 GB,INT4 降到约 4 GB。量化会损失少量精度,但在很多场景下几乎不可感知。bitsandbytes 库的 load_in_4bit=True 是一行代码的事(依赖:pip install transformers accelerate bitsandbytes):
    python
    from transformers import AutoModelForCausalLM, BitsAndBytesConfig
    
    model = AutoModelForCausalLM.from_pretrained(
        "Qwen/Qwen2.5-7B-Instruct",
        quantization_config=BitsAndBytesConfig(load_in_4bit=True),
        device_map="auto"
    )
  3. 开启 gradient checkpointing(微调场景):用计算换显存。在前向传播时不保存中间激活值,反向传播时重新计算。显存占用可降低 30-50%,代价是训练速度降低约 20%。

环境阻力的核心策略总结:

场景解法
环境装到一半报错,不知道缺什么不要继续修。切换到算力租用平台的预装镜像
项目 A 和项目 B 依赖冲突每个项目一个 Docker 镜像 / Conda 环境
环境调通后过两周又坏了调通后立刻 docker commit 或写 Dockerfile
OOM 报错减 batch、加量化、开 gradient checkpointing
折腾环境超过一小时停下来,用在线 API。你的精力比 GPU 更贵

2.4.2 网络阻力:消灭"几 KB/s 的等待" ​

你打开了 pip install torch,然后看到:

Downloading torch-2.5.0... 45.2 MB / 2.3 GB  [>         ] 2%  37.8 kB/s  eta 16:30:25

这个进度条,是大模型实战中最劝退的画面。torch 2.3 GB,transformers 约 500 MB,vLLM 项目连同依赖约 3 GB——从国外服务器直接下载,裸连情况下一晚上都未必能下完。更不要提模型权重文件动辄数十 GB。

实操解法一:配置国内镜像源(汇总速查表)

我们在 2.1 节已经逐一介绍了各类工具的源配置方法,这里汇总成一张速查表——在开工前一次性全部配好:

工具配置命令镜像/代理地址
pip (PyPI)pip config set global.index-url ...https://mirrors.aliyun.com/pypi/simple/
Condaconda config --add channels ...https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
Docker编辑 daemon.json阿里云/腾讯云镜像加速器
Hugging Faceexport HF_ENDPOINT=...https://hf-mirror.com
Git (GitHub)git config --global http.proxy ...本机代理地址

💡 一个真实的工作流程:开工之前,花 5 分钟检查并确认以上五条全部生效。pip config list、conda config --show channels、docker info、echo $HF_ENDPOINT——每一条产出都应该指向国内源。确认之后,再开始写代码。

实操解法二:理解代理的"静默失效"

这是最隐蔽的网络坑,没有之一。你明明开着代理,浏览器访问 GitHub 飞快,但终端里的 git clone 和 pip install 依然超时。

原因很简单:大多数代理软件只代理系统 HTTP 流量(浏览器),不代理终端(Terminal)。 终端里的 curl、python、pip 走的是自己的网络栈,除非你显式设置了环境变量。

你需要做三件事,终端才能真正走代理:

bash
# 1. 终端代理(临时生效)
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

# 2. Git 代理(持久生效)
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

# 3. Docker 构建代理(按需生效)
docker build \
  --build-arg http_proxy=http://host.docker.internal:7890 \
  --build-arg https_proxy=http://host.docker.internal:7890 \
  -t my-image .

⚠️ 以上三条互相独立,配了一条不代表另外两条也生效。新手最常见的误解是"我开了代理,为什么终端还是慢"。

实操解法三:预下载策略

不要等代码跑到一半才去下载模型。大模型的权重文件数十 GB,即使是国内镜像也需要几分钟到十几分钟。一个有效的习惯是:

  1. 提前一天根据学习计划列出需要的模型
  2. 手动下载到算力平台的持久化数据盘(ModelScope 做这件事最快)
  3. 写代码时直接加载本地路径,不依赖运行时下载
python
# 好:直接加载已下载的本地模型
model = AutoModelForCausalLM.from_pretrained(
    "/data/models/Qwen2.5-7B-Instruct",
    device_map="auto"
)

# 不好:让框架自己从 HF 下载——你会在代码运行时盯着进度条
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2.5-7B-Instruct",
    device_map="auto"
)

2.4.3 语言与思维阻力:从 Java / Go 平滑过渡 ​

如果你是一名熟练的 Java 或 Go 开发者,Python 的语法不会难住你。真正让你不安的,是 Python 写代码的方式:没有显式类型声明、函数参数随便传、运行时才能发现类型错误。在大模型项目中,这种不安会被放大——你面对的是 Tensor(张量),每个 Tensor 有多维的 shape,一旦某个维度的值传错了,错误要到 forward() 函数里才爆炸。

实操解法一:直接切 OOP,跳过脚本模式

Python 的入门教程喜欢教你写脚本:print("hello")、for i in range(10)——但这些对你在大模型项目里几乎没有价值。大模型框架——PyTorch、Transformers、LangChain——全部是高度抽象的面向对象设计。你需要的是类定义(class)、继承(super().__init__())、属性访问(self.xxx)和修饰器(@classmethod)。

好消息是,这些东西在 Java / Go 里有精确的对应物。你不需要从零学,只需要建立映射:

Java / Go 概念Python 对应
class MyClass { }class MyClass:
this.xxx / self.xxxself.xxx
extends(继承)class Child(Parent):
组合(Composition)self.other = OtherClass()(将另一个类的实例作为属性)
接口 / interface鸭子类型(hasattr / 协议)
构造函数def __init__(self, ...):
注解 / Decorator@staticmethod @property

你不需要成为 Python 大师。你只需要能读懂 PyTorch 的 nn.Module 子类、能写一个 Dataset 的自定义子类——这就够了。

实操解法二:用 Type Hints 找回安全感

Python 3.10+ 的类型注解(Type Hints)不是为了"像强类型一样运行 Python",而是为了让你的 IDE 和大脑在任何时候都知道一个变量是什么。在大模型项目里,这个价值格外重要——一个 Tensor 的 shape 是 [batch, seq_len, hidden] 还是 [seq_len, batch, hidden],类型提示能帮你在敲代码时就知道。

基础用法:

python
from typing import Optional
from transformers import AutoModelForCausalLM

def load_model(
    model_path: str,
    quantize: bool = False,
    device: str = "cuda",
    max_length: Optional[int] = None
) -> AutoModelForCausalLM:
    """加载模型并返回模型对象。"""
    ...

Tensor 的类型标注(推荐做法):

python
from typing import Optional

import torch
from torch import Tensor

def compute_attention(
    query: Tensor,    # shape: [batch, seq_len, d_k]
    key: Tensor,      # shape: [batch, seq_len, d_k]
    value: Tensor,    # shape: [batch, seq_len, d_v]
    mask: Optional[Tensor] = None  # shape: [batch, seq_len, seq_len]
) -> Tensor:
    """计算缩放点积注意力,返回 shape: [batch, seq_len, d_v]"""
    d_k = query.size(-1)
    scores = torch.matmul(query, key.transpose(-2, -1)) / (d_k ** 0.5)
    if mask is not None:
        scores = scores.masked_fill(mask == 0, float('-inf'))
    return torch.matmul(torch.softmax(scores, dim=-1), value)

用 dataclass 管理复杂配置(替代散落各处的字典):

python
from dataclasses import dataclass

@dataclass
class GenerationConfig:
    max_tokens: int = 2048
    temperature: float = 0.7
    top_p: float = 0.9
    stop_sequences: list[str] | None = None

config = GenerationConfig(temperature=0.3, max_tokens=512)

配合 mypy 做静态类型检查:

bash
pip install mypy
mypy your_project/ --ignore-missing-imports

mypy 不会改变 Python 的运行时行为,但它能在你运行代码之前捕获类型不一致的低级错误——这在调试 Tensor shape 不匹配时能省下大量时间。

💡 建议:不用给每一行代码都加类型注解,那会过度工程化。一个实用的标准是:所有公共函数和类方法都要加,私有 helper 函数可以省。 这样你的 IDE 自动补全和跳转就能覆盖所有跨文件调用,而内部的一两个小函数不需要维护成本。

实操解法三:每个项目一个 Conda 环境

这一点在 2.1 节已经讲过,但值得从"思维习惯"的维度再强调一次。Java 的 Maven / Gradle 和 Go 的 go mod 都是项目级依赖管理,但很多 Python 入门者会图方便,把所有包都装在全局环境里。在大模型领域,这一定会出问题——两个不同的微调框架可能依赖不同版本的 PyTorch。

养成一个肌肉记忆:每开一个新项目,第一件事是 conda create -n project_env python=3.11,然后 conda activate project_env。全局 Python 环境始终保持干净,只用来安装 Conda 和 uv 这样的"元工具"。

2.4.4 时效阻力:文档也有保质期 ​

大模型领域的技术更新速度,可能是你经历过最快的领域之一。一个今天能跑的代码,三个月后可能因为 transformers 库的大版本升级而全线报错。一篇半年前的教程,里面的 API 可能已经被 deprecated。这种"追不上"的感觉并不是你学得慢——而是这个领域本身的迭代节奏决定的。

实操解法一:设置"信息消费"的时效边界

当你在搜索引擎里输入一个问题时,养成一个习惯:加时间过滤。把搜索结果限制在最近一年或半年内。具体做法很简单——在搜索词后加上年份,或者直接用搜索引擎的时间筛选功能。

比时效过滤更重要的一条原则:优先看官方文档和 GitHub README,而不是二手博客。 博客作者的安装命令可能是 pip install transformers==4.30.0,而当前的版本已经是 4.48。官方文档的安装指引永远是最新的。

实操解法二:学会读源码

当 API 行为不符合预期时,最快的定位方式不是搜 Stack Overflow——是点进三方库的源码。Python 的第三方库源码就在你的 site-packages 目录下,VSCode 中 Ctrl+Click(PyCharm 中 Cmd+B / Ctrl+B)就能跳进去。

举一个真实场景:你调用 model.generate() 时传了一个不认识的参数,想确认这个参数到底有没有被当前版本接受。不要搜"transformers generate 参数 列表",而是直接在 IDE 里按 generate 跳进 transformers/generation/utils.py,看函数签名。源码的 docstring 往往比网上任何一篇博客都准确。

看源码不是"高阶技能",是用好大模型工具链的日常工作方式。

实操解法三:锁定关键依赖版本

这是时效阻力中最有操作性的解法。不要让 CI(持续集成)环境中某次自动的 pip install --upgrade 搞垮你的整个项目。

方式一:requirements.txt 锁定精确版本:

txt
torch==2.5.0
transformers==4.46.0
accelerate==1.1.0
vllm==0.6.4
datasets==3.1.0

精确版本号可以确保你、你的同事、CI 服务器和 6 个月后的你自己,装的都是同一套环境。

方式二:使用 uv pip compile 生成锁定文件:

bash
# 编写不锁版本的依赖声明 (pyproject.toml 或 requirements.in)
# torch>=2.5.0
# transformers>=4.45.0

# 生成精确锁定的依赖文件
uv pip compile requirements.in -o requirements.txt

生成的 requirements.txt 会包含所有传递依赖的精确版本,确保环境完全可复现。uv 的优势是解析速度——一个包含几十个依赖的项目,pip 可能要解析几分钟,uv 几秒就能出结果。

💡 一个实操建议:在 requirements.txt 中,深度学习框架(torch、jax)和推理加速库(vllm、flash-attn)必须精确锁版本,这两类依赖的升级最容易引入兼容性问题。应用层库(如 openai、httpx)可以放宽到 minor 版本——它们向后兼容性更好。

本节覆盖了大模型实战中四类非技术性的阻力。这些阻力有一个共同特点:它们和 AI 算法无关,但决定了你能不能顺利跑完一个项目。

如果你从本节只带走三件事,我希望是:

  1. 环境不通不是你不行——切换到预装镜像或在线 API,别和驱动死磕。
  2. 开工前配好源,搞定代理——五条源配置 + 三条代理设置,一次性配好,然后忘掉网络问题。
  3. Type Hints + Version Pinning——用类型注解帮你和你的 IDE 理解代码,用版本锁定保护你的项目不受"自动升级"的破坏。

大模型开发是一场长跑。环境、网络、语言习惯和文档时效——这些不是你前进路上的障碍,而是赛道本身的一部分。一旦你接受了这个事实,并建立了一套自己的应对工具箱,它们就不再是阻力,而是你比别人少走弯路的护城河。

下一节,我们将进入真正属于 2026 年的主题:现代 Agent 开发环境的搭建——Claude Code、CC-Switch 模型切换和 OpenClaw 自治智能体部署。那是把大模型从"玩具"变成"工具"的关键一步。

2.5 Agent 开发环境准备 ​

前面几节把 Python 工具链、模型仓库和算力环境都配齐了。但到了 2026 年,大模型开发的主旋律已经不再是"手动写 Prompt 调 API"——Agent(智能体) 已经成为核心工作单元。你不再是一个人写代码,而是和 AI 结对编程、让 AI 自主执行任务。

本节介绍 2026 年 Agent 开发中最核心的环境准备和工具链:Node.js 环境(三者共同的依赖基础),以及三大核心工具——Claude Code(终端 AI 编程助手)、CC-Switch(多 CLI 模型切换器)和 OpenClaw(开源自治 Agent 框架)。把这几样装好,你就有了一个完整的 Agent 开发工作站。

2.5.0 Node.js 环境准备 ​

本节所有工具都依赖 Node.js,所以先确保你的机器上有正确的 Node.js 版本。如果你已经装好了 Node.js 18.x 及以上,可以跳过本节直接进入 2.5.1。

方式一:使用 nvm(推荐,方便切换版本)

bash
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# 重新加载终端配置
source ~/.zshrc  # 或 source ~/.bashrc

# 安装并使用 Node.js 22 LTS
nvm install 22
nvm use 22

# 验证
node --version  # 应输出 v22.x.x
npm --version   # 应输出 10.x.x

方式二:macOS Homebrew

bash
brew install node@22

方式三:从官网下载安装包

前往 https://nodejs.org 下载 LTS 版本安装包,双击安装。

⚠️ 版本选择:本书推荐 Node.js 22 LTS,它对所有主流 AI CLI 工具(Claude Code / Codex / OpenClaw)的兼容性最好。Node.js 24 也完全支持,但部分第三方插件可能尚未适配。

2.5.1 Claude Code:终端里的 AI 编程搭档 ​

它是什么 ​

Claude Code 是 Anthropic 推出的终端 AI 编程助手。它不是一个 IDE 插件,而是直接运行在你的命令行里。你可以用自然语言告诉它"帮我重构这个文件""在这个项目里加一套日志系统""查一下这个 Bug 的根因",它会直接读代码、改文件、跑测试、提交 Git。

2026 年的 Claude Code 已经支持 Plan Mode(先出方案再动手)、多轮会话断点续传、以及 MCP(Model Context Protocol)插件扩展,实际上已经从"编程助手"进化成了"终端 Agent"。

环境要求 ​

依赖最低版本推荐版本
Node.js18.x20 LTS 或 22 LTS
npm自带随 Node.js 安装
账号Claude Pro / Max / Teams / EnterprisePro 起步即可

💡 如果你只想用 API Key 而不购买订阅,可以设置 ANTHROPIC_API_KEY 环境变量走按量付费。但注意:API Key 模式和订阅模式互斥——Claude Code 会优先使用 API Key,此时订阅权益不会生效。

安装(两种方式) ​

Anthropic 在 2026 年提供了两种安装路径,推荐优先使用原生安装器:

方式一:原生安装器(推荐)

bash
# macOS / Linux
curl -fsSL https://claude.ai/install.sh | bash

# 安装完成后直接启动
claude

💡 安全提示:将脚本直接管道给 shell(curl | bash)是最快的安装方式,但如果你希望先审查脚本内容再执行,可以先下载到本地:curl -fsSL https://claude.ai/install.sh -o claude_install.sh && less claude_install.sh,确认无误后再 bash claude_install.sh。

原生安装器会自动处理 Node.js 依赖,安装后直接可用,无需手动配环境。启动后会引导你完成 OAuth 浏览器认证。

方式二:npm 全局安装

bash
npm install -g @anthropic-ai/claude-code

# 验证安装
claude --version

npm 方式的优势是可以精确锁定版本(如 @anthropic-ai/claude-code@2.1.0),适合需要在 CI/CD 或团队环境中固定版本的场景。

认证流程 ​

安装完成后,首次运行 claude 会触发认证:

  1. 选择认证方式:浏览器 OAuth 登录(使用 Claude 订阅账号)或 API Key
  2. 如果选择 OAuth:终端会打印一个链接,在浏览器中打开 → 登录 Anthropic 账号 → 点击"Authenticate" → 回到终端按回车
  3. 如果选择 API Key:
    bash
    # 设置环境变量(可写入 ~/.zshrc 或 ~/.bashrc)
    export ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
    # Windows (PowerShell)
    $env:ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

认证通过后,运行 claude 即可进入交互界面。

验证与健康检查 ​

bash
# 运行诊断,检查环境是否完整
claude doctor

# 查看当前认证状态和用量
# 进入 claude 交互后输入:
/status

如果 claude doctor 全部通过(显示绿色 ✓),就可以开始用了。如果提示 Node.js 版本过低,先升级 Node.js(见 2.5.0 Node.js 环境准备)。

常用命令速览 ​

进入 claude 交互界面后,以下是常用内置命令:

命令功能
/help查看所有可用命令
/model切换模型(Opus / Sonnet / Haiku)
/plan先出执行计划,人工确认后再动手
/status查看当前会话的认证方式与用量
/compact压缩上下文,释放 Token 窗口
/init为当前项目生成 CLAUDE.md 项目记忆文件
/bug提交 Bug 报告
bash
# 续接之前的会话
claude --continue

# 列出历史会话并选择一个恢复
claude --resume

# 直接给一句指令,不进入交互模式
claude -p "解释这个项目的目录结构"

2.5.2 CC-Switch:一个界面掌控所有 AI CLI ​

为什么需要它 ​

装好 Claude Code 之后,问题来了:你很快还会用到 OpenAI Codex、Google Gemini CLI、OpenCode 等工具。每个工具都有自己的配置文件和认证方式,每换一个模型提供方就要去改 JSON 或环境变量。更头疼的是,这些 CLI 工具默认只连官方 API——你想切换到 DeepSeek 或者本地 Ollama,就得手工折腾配置。

CC-Switch 就是为解决这个痛点而生的。它是一个开源的跨平台桌面工具(GitHub 67.2K+ stars),在一个图形界面上统一管理六大 AI CLI 工具的提供方配置、MCP 服务器和系统提示词。

安装 ​

macOS(推荐 Homebrew):

bash
brew install --cask cc-switch

这是 macOS 的 GUI 版(一个带界面的应用)。「cc-switch」这个名字在生态里被不止一个工具用过,命令行版是另一个发行物(用法见 3.4 节),两者不要混装混用。包名与版本以发布页为准。

手动下载安装:

访问 https://github.com/farion1231/cc-switch/releases/latest ,下载对应平台的安装包:

平台安装包
macOS 12+CC-Switch-v3.x.x-macOS.dmg
Windows 10+CC-Switch-v3.x.x-windows.msi
Linux (AppImage)CC-Switch-v3.x.x-linux.AppImage

快速上手:将 Claude Code 切换到 DeepSeek ​

下面以最常见的使用场景——将 Claude Code 从 Anthropic 切换到 DeepSeek——演示 CC-Switch 的核心流程:

第一步:添加 DeepSeek 提供方

  1. 打开 CC-Switch,点击左侧 「提供商」 → 右上角 「添加」
  2. 选择 "Custom Provider",填入 DeepSeek 的 API 信息:
    • API 基础 URL:https://api.deepseek.com
    • API Key:你的 DeepSeek API Key(在 platform.deepseek.com 获取)
    • 模型列表:填入 deepseek-v4-pro, deepseek-reasoner

💡 模型名称以 DeepSeek 开放平台(platform.deepseek.com)当前提供的为准,不同时期可能有更新。

第二步:绑定到 Claude Code

  1. 点击左侧 「Claude Code」 → 在 Provider 下拉中选择刚添加的 DeepSeek
  2. 点击 「应用」——CC-Switch 自动修改 Claude Code 的配置文件
  3. 打开终端运行 claude,现在底层已经走 DeepSeek 了

原理:CC-Switch 实际上是将提供方的 API 地址和 Key 写入各 CLI 工具的配置文件中,并启动一个本地代理端口做请求转发。Claude Code 请求发给本地代理 → 代理转发到 DeepSeek → 响应原路返回。对你来说只是一次下拉选择。

第三步:切换其他 CLI 工具

CC-Switch 同样支持 Codex、Gemini CLI、OpenCode、OpenClaw、Hermes Agent。操作步骤完全一致:添加提供方 → 选择对应 CLI → 绑定 → 应用。

核心功能一览 ​

功能说明
🔌 提供方管理统一管理 Anthropic / OpenAI / DeepSeek / 本地 Ollama 等多提供方的 API 配置
🛠 MCP 服务器管理在一个界面管理所有 CLI 的 MCP 插件配置,无需逐一手动编辑 JSON
💬 提示词管理为不同 CLI 工具设置独立的系统提示词
📊 用量看板可视化展示各提供方的 Token 消耗和费用
☁️ 云同步配置一键备份到云端,换机器后快速恢复

2.5.3 OpenClaw:开源自治 Agent 框架 ​

它是什么 ​

如果说 Claude Code 是终端里的 AI 编程搭档,那 OpenClaw(曾用名 ClawdBot / MoltBot)就是一个能自己管理自己的 AI Agent 框架。它是开源的、自托管的,核心能力是:连接 WhatsApp / Telegram / Slack / 邮件等真实通信渠道,自主执行任务——不仅是写代码,还包括查邮件、发消息、操作浏览器、管理服务器。

你的角色从"使用 AI"变成"管理一个 AI Agent 集群"。你告诉它目标,它自己拆解任务、调度工具、汇报结果。

系统要求 ​

依赖最低版本
Node.js22.19+(推荐 24)
操作系统macOS / Linux / Windows (WSL2)
Python3.11+(部分 Skills 需要)

安装 ​

💡 如何选择? 日常开发 → 方式一(官方脚本,自动化程度最高);已有 Node.js 环境 → 方式二(npm,轻量快捷);7×24 小时服务器运行 → 方式三(Docker,稳定性更好)。三种方式可以共存。

方式一:官方安装脚本(推荐,新手首选)

bash
# macOS / Linux / WSL2
curl -fsSL https://openclaw.ai/install.sh | bash

脚本会自动检测系统、安装所需 Node.js 版本、安装 OpenClaw 并启动引导程序。引导程序会帮你完成:

  • 选择 AI 模型提供方(OpenRouter / Anthropic / OpenAI 等)
  • 配置 API Key
  • 添加通信渠道(Telegram / WhatsApp 等)

💡 安全提示:同上,如果你想先审查脚本内容,可以先 curl -fsSL https://openclaw.ai/install.sh -o openclaw_install.sh && less openclaw_install.sh,确认无误后再 bash openclaw_install.sh。

powershell
# Windows (PowerShell)
iwr -useb https://openclaw.ai/install.ps1 | iex

方式二:npm 安装(已有 Node 环境)

bash
npm install -g openclaw@latest
openclaw onboard --install-daemon

方式三:Docker 部署(服务器 / 无图形界面)

bash
# 拉取镜像
docker pull openclaw/openclaw:latest

# 启动(挂载数据目录保持持久化)
docker run -d \
  -v openclaw_data:/data \
  -p 18700:18700 \
  --name openclaw \
  openclaw/openclaw:latest

# 进入容器运行引导
docker exec -it openclaw openclaw onboard

配置 API Key ​

OpenClaw 支持多种模型提供方。推荐使用 OpenRouter 作为入口——它聚合了 Anthropic、OpenAI、Google、DeepSeek 等几十家提供方,一个 Key 通吃:

bash
# 1. 注册 OpenRouter (openrouter.ai) → 获取 API Key
# 2. 在引导程序中输入 Key,选择默认模型

# 或者手动设置环境变量
export OPENROUTER_API_KEY="sk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

如果已有特定提供方的 Key,也可以直接使用:

bash
export ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

常用管理命令 ​

bash
# 查看 Gateway 运行状态
openclaw status

# 重启 Gateway(配置修改后执行)
openclaw gateway restart

# 查看已安装的 Skills(插件系统)
openclaw skills list

# 安装 Skills(如浏览器自动化、Google 搜索)
openclaw skills install @openclaw/skill-browser

# 更新 OpenClaw 到最新版
openclaw update

# 查看日志
openclaw logs

📖 通信渠道配置:Telegram、WhatsApp、Slack 等渠道的接入配置请参考 OpenClaw 官方文档 https://docs.openclaw.ai 的渠道接入章节。

启动后的第一步 ​

bash
# 进入交互界面,直接给你的 Agent 下达指令
openclaw "帮我查一下今天的 GitHub Trending 有哪些 AI 相关的仓库"

OpenClaw 会自动规划步骤:搜索 → 提取结果 → 格式化 → 回复。

2.5.4 本章常用命令速查表 ​

以下命令覆盖大模型开发中最常用的系统诊断场景。建议收藏,但希望你不常用——说明环境一切正常。

系统信息与 CUDA ​

bash
# 操作系统版本
uname -a                      # Linux/macOS 内核信息
cat /etc/os-release           # Linux 发行版详情
sw_vers                       # macOS 版本

# CUDA 版本查询
nvcc --version | grep "release" | awk '{print $6}' | cut -d',' -f1

# CUDA 安装路径
which nvcc
ls -la /usr/local/cuda        # 查看 CUDA 符号链接指向

# cuDNN 版本
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2  # Linux

显卡与驱动 ​

bash
# 列出所有 NVIDIA GPU
nvidia-smi -L

# 查看显卡完整状态(显存使用 / 温度 / 功耗 / 进程)
nvidia-smi

# 实时刷新(每秒更新)
watch -n 1 nvidia-smi

# 查询 GPU 计算能力
nvidia-smi --query-gpu=compute_cap --format=csv,noheader,nounits

# NVIDIA 驱动版本
nvidia-smi --query-gpu=driver_version --format=csv,noheader,nounits | head -1

# 查看显卡拓扑(多卡互联)
nvidia-smi topo -m

Python 与 pip ​

bash
# Python 版本
python --version
python3 --version

# pip 当前镜像源
pip config list

# 安装包并临时指定源(不修改全局配置)
pip install <包名> -i https://pypi.tuna.tsinghua.edu.cn/simple/

# 查看已安装包的版本
pip show torch
pip show transformers
pip show vllm

# 列出当前环境中所有包(导出到文件)
pip freeze > requirements.txt

# 批量安装
pip install -r requirements.txt

# 清理 pip 缓存
pip cache purge

Conda 环境管理 ​

bash
# Conda 版本
conda --version

# 列出所有环境
conda env list

# 创建新环境
conda create -n myenv python=3.11

# 激活 / 退出
conda activate myenv
conda deactivate

# 查看当前环境中的包
conda list

# 删除环境
conda remove -n myenv --all

# 搜索可用包
conda search pytorch

# 更新 Conda 自身
conda update conda

Docker 常用 ​

bash
# 查看 Docker 版本
docker --version

# 查看运行中的容器
docker ps

# 查看所有容器(含已停止)
docker ps -a

# 查看镜像列表
docker images

# 进入容器
docker exec -it <容器名> /bin/bash

# 查看容器日志
docker logs -f <容器名>

# 🚨 危险:docker system prune -a 会删除所有未被容器引用的镜像、容器、网络及构建缓存!
# 这意味着你可能需要重新拉取大量镜像,新建 Docker 用户尤需谨慎。
# 日常清理推荐使用以下安全命令(仅删除悬空资源,不影响已命名镜像和卷):
docker system prune

# 如需彻底清理(确认无重要数据后谨慎使用):
# docker system prune -a

Node.js & npm ​

bash
# Node 版本
node --version

# npm 版本与全局包路径
npm --version
npm prefix -g

# 查看全局安装的包
npm list -g --depth=0

# 更新 npm 自身
npm install -g npm@latest

网络与连接诊断 ​

bash
# 测试能否访问 Hugging Face
curl -I https://huggingface.co

# 测试能否访问 GitHub
curl -I https://github.com

# 查看当前代理设置
echo $http_proxy
echo $https_proxy
echo $HF_ENDPOINT

# 检查端口占用
lsof -i :11434          # Ollama
lsof -i :18700          # OpenClaw Gateway

🧠 使用技巧:当遇到环境报错向 AI 求助时,将以上相关命令的输出一并粘贴。AI 看到你的 CUDA 版本、驱动版本、pip 包版本,能更精准地定位问题,比只贴报错日志效率高得多。

在2026年的此刻,还有个更加简单的方法,你可以快速的启动一个Agent应用(就是上面介绍的那些平台,那个都是可以),然后剩下的事情可以直接交个这个Agent来帮你解决。