上一章 目录 下一章

第二章(补充):环境配置实战

学习目标

  1. 掌握 Anaconda 在 Windows、Mac、Linux 上的安装与配置方法
  2. 理解 Python 虚拟环境的作用,熟练使用 conda 创建和管理环境
  3. 能够根据硬件条件选择并安装 CPU 或 GPU 版本的 PyTorch
  4. 熟悉 Jupyter Notebook 的启动方式、基本操作及 VS Code 集成使用
  5. 完成第一个基于 PyTorch 的简单神经网络搭建与运行

前置要求

  • 具备基本的命令行操作能力(Windows CMD/PowerShell、Mac/Linux Terminal)
  • 了解 Python 基础语法(变量、函数、基本数据结构)
  • 计算机至少拥有 8GB 内存和 20GB 可用磁盘空间
  • 如需使用 GPU 加速,需配备 NVIDIA 独立显卡(GTX 10 系列或更高)
Python开发环境配置工具链概念图
图2b-1 Python开发环境配置工具链:pip、conda与虚拟环境的协作关系

Anaconda 安装

Anaconda 是一个集成了 Python、常用科学计算库以及包管理工具的数据科学平台。它内置了 conda 包管理器,能极大简化环境配置流程。

Windows 安装步骤

  1. 访问 Anaconda 官网 下载 Windows 安装包
  2. 双击运行安装程序,选择 "Add Anaconda3 to my PATH environment variable"(建议勾选)
  3. 完成安装后,打开 Anaconda Prompt 或 CMD

Mac 安装步骤

  1. 下载 macOS 图形安装包(Intel 芯片选 x86,Apple Silicon 选 arm64)
  2. 双击 .pkg 文件按向导安装,或下载命令行版本使用以下命令安装:
bash Anaconda3-2024.XX-MacOSX-arm64.sh

Linux 安装步骤

  1. 下载 Linux 版本的 sh 安装脚本
  2. 在终端中执行以下命令:
wget https://repo.anaconda.com/archive/Anaconda3-2024.XX-Linux-x86_64.sh
bash Anaconda3-2024.XX-Linux-x86_64.sh
source ~/.bashrc

验证安装

conda --version
python --version
安装成功标志:conda 命令能正常输出版本号(如 conda 24.1.2),即表示安装成功。

Python 虚拟环境

虚拟环境是 Python 开发中的核心实践,它能让你在同一台机器上维护多个相互隔离的 Python 环境。

为什么需要虚拟环境?
  • 不同项目可能依赖同一库的不同版本(如项目A需要 PyTorch 1.x,项目B需要 2.x)
  • 避免全局环境被污染,保持系统 Python 的纯净
  • 便于复现和分享环境配置(通过 environment.yml)
  • 方便部署时精确还原依赖

conda 环境管理常用命令

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

# 激活环境
conda activate ai-env

# 退出当前环境
conda deactivate

# 查看所有环境
conda env list

# 删除环境
conda remove -n ai-env --all

# 导出环境配置
conda env export > environment.yml

# 从配置文件创建环境
conda env create -f environment.yml

PyTorch 安装

PyTorch 是目前最流行的深度学习框架之一。根据你的硬件条件,选择 CPU 版本或 GPU 版本进行安装。

CPU 版本安装

适用于没有 NVIDIA 显卡或仅需学习基础概念的场景:

conda activate ai-env
conda install pytorch torchvision torchaudio cpuonly -c pytorch

GPU 版本安装(CUDA)

适用于配备 NVIDIA 显卡且希望利用 GPU 加速训练的场景:

# CUDA 12.1 版本(推荐)
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

# 或 CUDA 11.8 版本(旧显卡兼容)
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
注意:安装 GPU 版本前,请确保已安装对应版本的 NVIDIA 显卡驱动。驱动版本过旧可能导致 CUDA 无法正常工作。

验证安装

import torch

# 检查 PyTorch 版本
print(f"PyTorch version: {torch.__version__}")

# 检查是否可以使用 GPU
print(f"CUDA available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"CUDA version: {torch.version.cuda}")
    print(f"GPU name: {torch.cuda.get_device_name(0)}")
    print(f"GPU count: {torch.cuda.device_count()}")

Jupyter Notebook

Jupyter Notebook 是一个交互式编程环境,非常适合数据分析、模型调试和学习记录。

安装 Jupyter

conda install jupyter

启动 Jupyter Notebook

# 在指定目录启动(会自动打开浏览器)
jupyter notebook

# 指定端口启动
jupyter notebook --port 8888

# 不自动打开浏览器
jupyter notebook --no-browser

基本操作

  • 新建单元格:点击工具栏 "+" 按钮或使用快捷键 B(下方插入)/ A(上方插入)
  • 运行单元格:Shift + Enter
  • 切换模式:Esc 进入命令模式,Enter 进入编辑模式
  • 单元格类型:Y(代码)、M(Markdown)、R(原始文本)
  • 保存:Ctrl + S
  • 重启内核:Kernel > Restart Kernel(可清除所有变量)

在 VS Code 中使用 Jupyter

  1. 安装 VS Code 扩展:JupyterPython
  2. 打开任意 .ipynb 文件,或新建文件并保存为 .ipynb 格式
  3. 点击右上角选择 Python 内核(选择你创建的 conda 环境)
  4. 即可在 VS Code 中直接运行 Notebook 单元格
推荐:日常使用推荐在 VS Code 中编辑 Notebook,既能享受 Notebook 的交互性,又能利用 VS Code 强大的代码补全和调试功能。

常用库安装

以下列出了 AI 开发中最常用的 Python 库及其安装命令:

# 科学计算与数据处理
conda install numpy pandas matplotlib scikit-learn

# 或使用 pip 安装
pip install numpy pandas matplotlib scikit-learn

# 深度学习框架(PyTorch 已在前文安装)
pip install torch torchvision torchaudio

# Hugging Face 生态(预训练模型与数据集)
pip install transformers datasets accelerate

# 大模型应用开发
pip install langchain langchain-openai

# 其他常用工具
pip install tqdm tensorboard jupyterlab seaborn
库名 用途 安装命令
numpy 数值计算、多维数组操作 pip install numpy
pandas 数据读取、处理与分析 pip install pandas
matplotlib 数据可视化绘图 pip install matplotlib
scikit-learn 传统机器学习算法与工具 pip install scikit-learn
transformers Hugging Face 预训练模型库 pip install transformers
torch 深度学习框架(PyTorch) conda install pytorch -c pytorch
langchain 大语言模型应用开发框架 pip install langchain

GPU 环境检查

在进行深度学习训练前,确认 GPU 环境是否正常工作是至关重要的一步。

检查 NVIDIA 驱动与 CUDA

# 查看 GPU 信息
nvidia-smi

# 查看 CUDA 编译器版本
nvcc --version

PyTorch GPU 验证代码

import torch

# 1. 检查 CUDA 是否可用
print(f"CUDA available: {torch.cuda.is_available()}")

# 2. 获取 GPU 数量
print(f"GPU count: {torch.cuda.device_count()}")

# 3. 获取当前 GPU 名称
if torch.cuda.is_available():
    print(f"Current GPU: {torch.cuda.get_device_name(0)}")

# 4. 测试张量是否能放到 GPU 上
if torch.cuda.is_available():
    x = torch.rand(3, 3).cuda()
    print(f"Tensor device: {x.device}")
    print("GPU 测试通过!")
else:
    print("CUDA 不可用,将使用 CPU 运行。")
常见问题:如果 nvidia-smi 能显示 GPU 信息,但 torch.cuda.is_available() 返回 False,通常是因为 PyTorch 安装的 CUDA 版本与系统驱动不兼容,建议重新安装对应版本的 PyTorch。

第一个 AI 程序

让我们用 PyTorch 创建一个最简单的神经网络——一个单隐藏层的全连接网络,用于解决经典的 XOR 问题。

import torch
import torch.nn as nn
import torch.optim as optim

# 设置随机种子,保证结果可复现
torch.manual_seed(42)

# 定义神经网络模型
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.layer1 = nn.Linear(2, 4)   # 输入层 -> 隐藏层
        self.activation = nn.ReLU()      # 激活函数
        self.layer2 = nn.Linear(4, 1)   # 隐藏层 -> 输出层
        self.sigmoid = nn.Sigmoid()      # 输出层激活

    def forward(self, x):
        x = self.layer1(x)
        x = self.activation(x)
        x = self.layer2(x)
        x = self.sigmoid(x)
        return x

# 准备 XOR 数据集
X = torch.tensor([[0., 0.], [0., 1.], [1., 0.], [1., 1.]])
y = torch.tensor([[0.], [1.], [1.], [0.]])

# 创建模型实例
model = SimpleNet()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.1)

# 训练模型
print("开始训练...")
for epoch in range(1000):
    # 前向传播
    outputs = model(X)
    loss = criterion(outputs, y)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch + 1) % 200 == 0:
        print(f"Epoch [{epoch+1}/1000], Loss: {loss.item():.6f}")

# 测试模型
print("\n预测结果:")
with torch.no_grad():
    predictions = model(X)
    for i in range(4):
        input_vals = X[i].tolist()
        pred = predictions[i].item()
        actual = y[i].item()
        print(f"输入: {input_vals} -> 预测: {pred:.4f}, 实际: {actual}")

print("\n恭喜你,成功运行了第一个神经网络!")
运行结果说明:训练完成后,模型应该能正确预测 XOR 的输出(输入相同为0,不同为1)。如果预测值接近 0 或 1,说明网络已学会 XOR 逻辑。

练习题

  1. 环境搭建实践
    按照本章步骤,在你的电脑上完成以下操作:安装 Anaconda、创建名为 my-ai 的虚拟环境(Python 3.10)、安装 PyTorch CPU 版本,并在 Jupyter Notebook 中运行本章的 "第一个 AI 程序"。
  2. 虚拟环境管理
    尝试导出你当前的环境配置为 environment.yml 文件,然后删除原环境并使用该配置文件重新创建环境,验证环境是否能正确还原。
  3. 扩展神经网络
    修改 "第一个 AI 程序" 中的网络结构:将隐藏层神经元数量从 4 个增加到 8 个,添加第二个隐藏层,观察训练 loss 的变化和最终预测精度是否有提升。

章节小结

本章系统介绍了 AI 开发环境的搭建流程,涵盖 Anaconda 安装、虚拟环境管理、PyTorch 安装、Jupyter Notebook 使用以及常用库的配置。通过完成本章学习,你应该已经具备了以下能力:

  • 能够独立搭建完整的 Python AI 开发环境
  • 理解虚拟环境的重要性并熟练进行环境管理
  • 根据硬件条件选择合适的 PyTorch 版本并完成安装验证
  • 使用 Jupyter Notebook 或 VS Code 进行交互式编程
  • 运行并理解一个简单的神经网络完整代码

环境配置是 AI 学习的第一步,也是后续所有实践的基础。建议在继续后续章节前,确保本章的所有工具和库都已正确安装并能正常运行。

附录C:常见问题(FAQ)

CUDA out of memory 怎么办?

GPU 显存不足是深度学习训练中最常见的问题,可通过以下方法解决:

  • 减小 batch size:将训练批次大小减半或更小,这是最直接有效的方法
  • 使用混合精度训练:PyTorch 提供自动混合精度(AMP)功能,可节省约一半显存
    from torch.cuda.amp import autocast, GradScaler
    scaler = GradScaler()
    with autocast():
        outputs = model(inputs)
        loss = criterion(outputs, targets)
  • 清理缓存:在训练循环中定期清理不需要的缓存
    import torch
    torch.cuda.empty_cache()
  • 减少模型尺寸:使用更小的模型或减少输入数据分辨率
  • 梯度累积:用多次小 batch 的梯度累积模拟大 batch 效果
模型下载慢/失败怎么办?

由于网络原因,从 Hugging Face 下载模型可能较慢或失败,可尝试以下方案:

  • 使用国内镜像:设置环境变量使用镜像站点
    export HF_ENDPOINT=https://hf-mirror.com
  • 使用 huggingface-cli 下载:
    pip install huggingface-hub
    huggingface-cli download --resume-download meta-llama/Llama-2-7b --local-dir ./models
  • 在代码中设置镜像:
    import os
    os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
    from transformers import AutoModel
    model = AutoModel.from_pretrained("bert-base-chinese")
  • 手动下载:从镜像网站手动下载模型文件后放到本地缓存目录
ModuleNotFoundError 怎么解决?

模块未找到错误通常由以下原因导致:

  • 未安装模块:使用 pip 或 conda 安装缺失的库
    pip install 模块名
    # 或
    conda install 模块名
  • 环境未激活:确认当前终端已激活正确的 conda 环境
    conda activate ai-env
  • 路径问题:检查 Python 解释器路径是否正确
    import sys
    print(sys.executable)  # 查看当前 Python 路径
    print(sys.path)        # 查看模块搜索路径
  • 名称拼写错误:检查 import 语句中的模块名是否拼写正确
API Key 怎么申请和管理?

使用大模型 API 需要申请对应的 API Key,以下是主要平台的申请入口和管理建议:

管理建议:

  • 使用 .env 文件存储密钥,避免硬编码到代码中
    # .env 文件
    OPENAI_API_KEY=sk-xxxxxxxx
    DEEPSEEK_API_KEY=sk-xxxxxxxx
  • 使用 python-dotenv 加载环境变量
    from dotenv import load_dotenv
    import os
    load_dotenv()
    api_key = os.getenv("OPENAI_API_KEY")
  • 将 .env 文件添加到 .gitignore,防止密钥泄露
没有 GPU 可以学 AI 吗?

完全可以!虽然没有 GPU 会限制大规模模型的训练速度,但学习 AI 理论和运行中小规模模型完全可以在 CPU 上进行。此外,还有多种免费/低成本的 GPU 资源可用:

  • CPU 运行:适合学习基础概念、小规模数据集实验、模型推理
  • Google Colab:免费提供 Tesla T4 GPU,适合学习和原型验证
    # 在 Colab 中切换运行时类型为 GPU
    import torch
    print(torch.cuda.get_device_name(0))  # 输出 Tesla T4
  • Kaggle:每周提供 30 小时免费的 NVIDIA T4/P100 GPU
  • AutoDL:国内 GPU 租用平台,按小时计费,价格相对实惠
Python 版本应该选哪个?

Python 版本的选择需要考虑兼容性和稳定性:

  • 推荐版本:3.9 - 3.11
  • Python 3.9:成熟稳定,几乎所有库都支持
  • Python 3.10:主流选择,语法改进(如 match-case)
  • Python 3.11:性能提升明显,大部分新库已支持
  • 不推荐:Python 3.12(部分科学计算库尚未完全适配)、Python 3.8 及以下(即将或已经停止维护)
注意:某些特定模型或框架可能对 Python 版本有严格要求,安装前请查阅官方文档的兼容性说明。
conda 和 pip 有什么区别?
特性 conda pip
包来源 Anaconda 仓库、conda-forge PyPI(Python Package Index)
非 Python 依赖 支持(C 库、CUDA 等) 不支持(需手动安装系统依赖)
环境管理 内置环境管理功能 需配合 virtualenv/venv 使用
安装速度 预编译二进制包,通常更快 部分包需本地编译,较慢
适用场景 数据科学、深度学习环境搭建 纯 Python 包安装

建议:优先使用 conda 安装基础依赖(如 PyTorch、CUDA),pip 作为补充安装 PyPI 上的专用库。两者可在同一环境中混合使用。

Jupyter Notebook 卡顿怎么办?

Notebook 运行缓慢或卡顿可从以下方面排查和优化:

  • 清理输出:大量图像或日志输出会拖慢浏览器,定期清理单元格输出
    from IPython.display import clear_output
    clear_output(wait=True)
  • 重启内核:长时间运行后内存可能累积,重启内核可释放资源
    菜单栏:Kernel > Restart Kernel
  • 减少内存占用:及时删除不再使用的大变量
    del large_tensor
    import gc
    gc.collect()
  • 增加内存:如果经常内存不足,考虑使用配置更高的机器或云服务器
  • 关闭自动保存:大文件自动保存可能造成卡顿,可调整保存间隔
如何查看模型是否加载成功?

加载预训练模型后,可通过以下方式验证模型状态:

from transformers import AutoModel, AutoTokenizer

model_name = "bert-base-chinese"
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 1. 打印模型结构(前5层)
print(model)

# 2. 统计模型参数量
total_params = sum(p.numel() for p in model.parameters())
trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(f"总参数量: {total_params:,}")
print(f"可训练参数量: {trainable_params:,}")
print(f"模型大小: {total_params * 4 / 1024 / 1024:.2f} MB (FP32)")

# 3. 测试前向传播
text = "这是一个测试"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
print(f"输出形状: {outputs.last_hidden_state.shape}")
print("模型加载成功并可以正常推理!")
训练时 loss 不下降怎么办?

Loss 不下降说明模型没有有效学习,需要从多个维度排查:

  • 检查学习率:学习率过大导致震荡,过小导致更新缓慢。尝试学习率范围 1e-5 到 1e-2 之间的不同值
  • 数据预处理:检查输入数据是否归一化、标签是否正确、是否存在数据泄漏
  • 模型结构:确认激活函数、损失函数与任务类型匹配(如分类任务用 CrossEntropyLoss)
  • 梯度检查:确认反向传播正常执行,梯度没有消失或爆炸
    for name, param in model.named_parameters():
        if param.grad is not None:
            print(f"{name}: grad norm = {param.grad.norm().item()}")
  • 简化验证:先用很小的数据集(甚至单个样本)过拟合,确认模型有能力学习
如何选择合适的模型?

模型选择需要综合考虑任务需求、数据规模和计算资源:

  • 任务类型:
    • 文本分类:BERT、RoBERTa、DistilBERT
    • 文本生成:GPT 系列、LLaMA、ChatGLM
    • 图像分类:ResNet、EfficientNet、ViT
    • 目标检测:YOLO、DETR
  • 数据量:数据少选小模型或进行迁移学习,数据充足可训练大模型
  • 计算资源:资源有限选择轻量级模型(DistilBERT、MobileNet)
  • 精度要求:高精度场景选大模型,实时推理场景选轻量化模型
AI 学习需要多强的电脑?

不同学习阶段对硬件的要求差异很大,以下是配置建议:

学习阶段 CPU 内存 GPU 适用场景
入门学习 任意现代 CPU 8GB+ 无需 / 核显 理论学习、小规模代码实验
基础实践 i5/R5 及以上 16GB+ GTX 1060 6GB 经典模型训练、Kaggle 入门竞赛
进阶开发 i7/R7 及以上 32GB+ RTX 3060 12GB+ 微调大模型、中等规模项目
专业研究 服务器级 CPU 64GB+ RTX 4090 / A100 大规模训练、论文复现

建议:入门阶段不必追求高配,善用 Google Colab、Kaggle 等免费 GPU 资源。确定长期方向后再投资硬件。

上一章 目录 下一章