[第一天 4h]学习deep learning ,无GPU的PC,ubuntu24

使用PC和python编写深度学习代码,具体如何作?请人工智能专家回答

核心哲学:理解工作流程

编写深度学习代码不仅仅是写模型架构,它是一整套可重复、可实验的流程,通常包括以下几个核心步骤:

  1. 数据准备与预处理:获取数据、清洗、转换、增强、并封装成模型可用的格式。

  2. 模型构建:定义网络的结构(例如,层数、激活函数、连接方式)。

  3. 模型训练:将数据馈送给模型,计算损失,并通过优化器更新权重。

  4. 模型评估:在测试集上评估训练好的模型的性能。

  5. 模型部署与推理:使用训练好的模型对新数据进行预测。

 

第一步:环境与工具配置(搭建你的武器库)

好的,作为人工智能专家,为你详细介绍在 Ubuntu 24.04 LTS (Noble Numbat) 上搭建专业深度学习开发环境的完整流程。Ubuntu 是深度学习开发和研究的首选操作系统,因其对硬件和驱动程序的出色支持而备受青睐。

本指南将分为两大路径:

  1. 基础环境搭建 (适用于所有PC,使用CPU进行训练)

  2. GPU环境加速 (适用于拥有NVIDIA显卡的PC,利用CUDA进行GPU加速训练)


第1步:系统更新与基础工具安装

首先,打开终端 (Ctrl+Alt+T),更新系统并安装一些基础开发工具。

***ubuntu已设置为国内镜像。

bash
 
# 更新软件包列表并升级所有已安装的包
sudo apt update && sudo apt upgrade -y

# 安装开发基础工具包、Python3及pip、venv
sudo apt install -y build-essential git wget curl python3 python3-pip python3-venv

# 验证安装
python3 --version  # 应显示 Python 3.12.x
pip3 --version     # 应显示 pip 版本
gcc --version      # 应显示 gcc 版本

#使用国内源 
# 创建 .pip 目录
mkdir -p ~/.pip

# 创建 pip.conf 文件并写入清华源的配置
echo '[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn' > ~/.pip/pip.conf

如果你想使用阿里云源,可以将 index-urltrusted-host 替换为:
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com

 

第2步:安装专业开发工具(IDE/编辑器)

1. 安装 Visual Studio Code (推荐)

这是目前最流行的选择,微软官方提供.deb安装包。

bash
 
# 下载最新的 .deb 包
wget https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 -O vscode.deb

# 使用 apt 安装下载的包
sudo apt install ./vscode.deb

# 安装完成后,删除下载的包
rm vscode.deb

# 启动VSCode (也可以在应用程序菜单中查找)
code
  • 在VSCode中安装扩展:PythonPylanceJupyter

2. (可选) 安装 PyCharm Professional

专业版对数据科学和深度学习支持更好,但需要许可证(学生可免费申请)。社区版也足够使用。

bash
 
# 使用Snap安装(最简单)
sudo snap install pycharm-professional --classic

# 或者使用Flatpak
# sudo flatpak install flathub com.jetbrains.PyCharm-Professional

第3步:创建独立的Python虚拟环境

强烈建议为每个项目创建独立的虚拟环境,以避免包版本冲突。

bash
 
# 为你深度学习项目创建一个目录并进入
mkdir ~/dl_projects && cd ~/dl_projects

# 创建一个名为 'dl_env' 的虚拟环境
python3 -m venv dl_env

# 激活虚拟环境
source ~/dl_projects/dl_env/bin/activate
# 激活后,命令行提示符前会出现 (dl_env)

# 要退出虚拟环境,执行:
# deactivate

第4步:安装深度学习核心库

激活的虚拟环境中,安装所需的Python包。

A. 路径一:仅使用CPU

如果你的电脑没有NVIDIA GPU,或者你只是想先学习基础,安装CPU版本的库即可。

bash
 
# 确保虚拟环境已激活: (dl_env) ~
# 升级pip
pip install --upgrade pip

# 安装核心数据科学库
pip install numpy pandas matplotlib scikit-learn jupyter notebook

# 安装PyTorch (CPU版本)
# 访问 https://pytorch.org/ 获取最新命令
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

# 安装TensorFlow (CPU版本)
pip install tensorflow

# 验证PyTorch安装
python -c "import torch; print(f'PyTorch版本: {torch.__version__}'); print(f'CUDA是否可用: {torch.cuda.is_available()}')"
# 输出 CUDA是否可用: False 是正常的

# 验证TensorFlow安装
python -c "import tensorflow as tf; print(f'TensorFlow版本: {tf.__version__}'); print(f'GPU是否可用: {tf.config.list_physical_devices(\"GPU\")}')"

B. 路径二:使用NVIDIA GPU进行加速 (强烈推荐)

前提条件:你的PC必须有一块NVIDIA显卡。

1. 安装NVIDIA显卡驱动

Ubuntu 24.04 自带了一个开源驱动 nouveau,但为了深度学习,我们需要官方的专有驱动。最简单的方法是使用Ubuntu的“附加驱动”工具。

  • 图形化方法

    1. 打开“软件和更新” (software-properties-gtk)。

    2. 切换到“附加驱动”选项卡。

    3. 选择最新的、标记为“专有”的驱动(通常推荐使用 serveropen-kernel 分支的驱动,稳定性更好)。例如 nvidia-driver-550 (open kernel)

    4. 点击“应用更改”,等待下载安装完成,然后重启电脑

  • 命令行方法

    bash
     
  • nvidia-smi

    这个命令会输出一个表格,显示你的GPU型号、驱动版本以及CUDA版本兼容性。这表示驱动安装成功。

2. 安装CUDA Toolkit和cuDNN

最省心的方法:通常不需要单独安装CUDA和cuDNN。PyTorch和TensorFlow的pip包现在通常内置了所需的CUDA和cuDNN库,我们只需要确保驱动版本足够新即可。nvidia-smi 右上角显示的CUDA版本是驱动支持的最高CUDA版本,框架自带的CUDA版本只要不超过这个即可。

如果你想手动安装,可以参考以下步骤(但通常不是必须的):

bash
 
# 例如,安装CUDA 12.4
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
sudo sh cuda_12.4.0_550.54.14_linux.run
# 安装时取消Driver的勾选(因为我们已经安装了驱动),只安装CUDA Toolkit。

# 将CUDA路径添加到环境变量
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

3. 安装GPU版本的PyTorch和TensorFlow

激活的虚拟环境中,安装GPU版本的库。

bash
 
# 安装PyTorch (CUDA 12.1版本)
# 访问 https://pytorch.org/ 获取最新、最匹配的命令
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 安装TensorFlow (GPU版本)
# TensorFlow会自动检测并使用已安装的CUDA环境
pip install tensorflow[and-cuda]

# 验证GPU是否可用
python -c "import torch; print(f'PyTorch CUDA可用: {torch.cuda.is_available()}'); print(f'PyTorch CUDA设备: {torch.cuda.get_device_name(0)}')"
python -c "import tensorflow as tf; print(f'TensorFlow GPU可用: {len(tf.config.list_physical_devices(\"GPU\")) > 0}')"

如果输出显示 True 和你的GPU型号,恭喜你,环境搭建成功!你现在可以全力发挥GPU的计算能力了。


第5步:测试你的环境

创建一个简单的测试脚本 test_gpu.py

python
 
import torch
import tensorflow as tf

print("=" * 50)
print("PyTorch 信息:")
print(f"版本: {torch.__version__}")
print(f"CUDA 是否可用: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"GPU 设备名称: {torch.cuda.get_device_name(0)}")
    print(f"当前设备: {torch.cuda.current_device()}")

print("\n" + "=" * 50)
print("TensorFlow 信息:")
print(f"版本: {tf.__version__}")
print(f"GPU 是否可用: {len(tf.config.list_physical_devices('GPU')) > 0}")
if tf.config.list_physical_devices('GPU'):
    print(f"GPU 详情: {tf.config.list_physical_devices('GPU')}")

print("\n" + "=" * 50)
print("NumPy 和 CPU 测试:")
import numpy as np
a = np.random.rand(1000, 1000)
b = np.random.rand(1000, 1000)
c = a @ b # 矩阵乘法
print(f"NumPy 矩阵计算完成: {c.shape}")

if torch.cuda.is_available():
    print("\n" + "=" * 50)
    print("PyTorch GPU 测试:")
    x = torch.rand(1000, 1000, device='cuda')
    y = torch.rand(1000, 1000, device='cuda')
    z = x @ y
    print(f"PyTorch GPU 矩阵计算完成: {z.shape}")

运行它:

bash
 
python test_gpu.py

现在,你的Ubuntu 24.04系统已经拥有了一个非常专业且强大的深度学习开发环境。你可以开始运行和编写你的第一个深度学习模型了!

  • # 查看推荐的驱动
    ubuntu-drivers devices
    
    # 安装所有推荐的驱动(通常会选择最合适的版本)
    sudo ubuntu-drivers autoinstall
    
    # 重启
    sudo reboot
  • 验证驱动安装
    重启后,打开终端执行:

    bash
     

  

第二步:选择一个框架并编写你的第一个模型

这里我将用两个最流行的框架 PyTorchTensorFlow/Keras 分别展示一个简单的图像分类模型(在MNIST数据集上)的代码。

MNIST :包含了0到9的手写数字图片,每个图片为28x28像素的灰度图。这个数据集广泛用于入门级的图像处理任务,如手写数字识别。
CIFAR-10 :是一个用于小图像分类的数据集,包含10个类别的60000张32x32彩色图像,每个类别有6000张图片。这个数据集对于理解卷积神经网络(CNN)等更高级的图像处理技术非常有用。
IMDB :是一个电影评论的情感分析数据集,包含了50000条评论,分为正面和负面两种情感倾向。这个数据集常用于文本处理和自然语言处理(NLP)任务。

示例一:使用 PyTorch

# 1. 导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt

# 2. 检查设备(CPU or GPU)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'Using device: {device}')

# 3. 准备数据
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

train_set = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_set, batch_size=64, shuffle=True)

test_set = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = DataLoader(test_set, batch_size=1000, shuffle=False)

# 4. 构建模型
class NeuralNet(nn.Module):
    def __init__(self):
        super(NeuralNet, self).__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

model = NeuralNet().to(device)

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

# 6. 训练循环
def train(model, dataloader, criterion, optimizer):
    model.train()
    running_loss = 0.0
    for images, labels in dataloader:
        # 将数据移动到设备(GPU/CPU)
        images, labels = images.to(device), labels.to(device)
        
        # 前向传播
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        # 反向传播和优化
        optimizer.zero_grad() # 清空之前的梯度
        loss.backward()       # 反向传播计算梯度
        optimizer.step()      # 更新参数
        
        running_loss += loss.item()
    return running_loss / len(dataloader)

# 7. 训练多个周期(Epoch)
num_epochs = 5
for epoch in range(num_epochs):
    train_loss = train(model, train_loader, criterion, optimizer)
    print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {train_loss:.4f}")

print('Finished Training')

# 8. 评估模型(简化版)
def evaluate(model, dataloader):
    model.eval()
    correct = 0
    total = 0
    with torch.no_grad(): # 评估时不需要计算梯度
        for images, labels in dataloader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    print(f"Accuracy on test set: {100 * correct / total:.2f}%")

evaluate(model, test_loader)

示例二:使用 TensorFlow/Keras

 

第三步:专家建议与最佳实践

  1. 从小开始:不要一开始就试图训练ResNet-152 on ImageNet。从MNIST、CIFAR-10这样的标准数据集和小模型开始,确保你的 pipeline 是通的。

  2. 版本控制:使用 Git 管理你的代码。使用 .gitignore 文件忽略大型数据集和模型文件。

  3. 迭代和实验:深度学习是高度实验性的。系统地改变超参数(学习率、批大小、层数等),并使用 TensorBoardWeights & Biases 等工具来跟踪和可视化你的实验结果。

  4. 理解概念:不要只做“调包侠”。花时间理解背后的概念:梯度下降、反向传播、过拟合、正则化等。这能帮助你在模型出问题时有效调试。

  5. 利用预训练模型:对于现实世界的问题,几乎总是从 迁移学习 开始。使用在大型数据集(如ImageNet)上预训练好的模型(VGG, ResNet, BERT, GPT),并在你的数据上对其进行微调,这可以节省大量时间和计算资源。

  6. 关注硬件:如果认真起来,一块好的GPU(NVIDIA RTX 3060及以上)是性价比最高的投资。使用云GPU(如Google Colab, AWS, Lambda Labs)也是一个非常好的选择,可以免去配置环境的烦恼。

学习路径推荐

  1. 基础:Python → NumPy → Pandas → Matplotlib

  2. 框架先选择一个(PyTorch或TensorFlow)深入学习。PyTorch更受研究人员喜爱,TensorFlow在生产环境部署生态更成熟。

  3. 课程:跟随经典课程,如吴恩达的《深度学习专项课程》或Fast.ai的实用课程。

  4. 实践:在Kaggle上参加入门比赛(如Titanic, Digit Recognizer),看别人的代码(Kernels),这是学习的最佳方式之一。

希望这个详细的指南能为你提供一个清晰的路线图!祝你编码愉快!

 

#######################################################################

 

posted @ 2025-08-24 08:52  辛河  阅读(54)  评论(0)    收藏  举报