新时代的伟大发明啊.
让我们通过实际操作来认识如何 "深度学习" 吧.
1 环境
深度学习需要一些特殊环境.
1.1 GPU
GPU 更适合来做矩阵运算, 神经网络里面设计到大量的矩阵运算, 因此用 GPU 比用 CPU 更好. 如果您的本地配置不是很好且预算不够充分, 不妨试一试云 GPU.
1.1.1 RTX
RTX 系列的科学计算性能排行大致如下:
RTX 3070 < RTX 2080 Ti < RTX 3070 Ti < RTX 3080 < RTX A4000 < RTX 3080 Ti < RTX A5000 < RTX 3090 < RTX 4090
其中 RTX 3090 性价比是最高的.
1.1.2 Tesla
Tesla 系列的科学计算性能排行大致如下:
Tesla T4 < Tesla P40 < Tesla P100 < Tesla V100 < Tesla A40 < Tesla A100 < Tesla H100
您可以在终端输入 nvidia-smi 来查看当前显卡:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 495.44 Driver Version: 495.44 CUDA Version: 11.5 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA RTX A4000 On | 00000000:56:00.0 Off | Off |
| 99% 37C P2 36W / 140W | 12112MiB / 16117MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
这是一张 NVIDIA RTX A4000 显卡, CUDA 版本是 11.5.
1.2 SSH
SSH 是远程连接服务器的方式, 您可以使用 VSCode 的 Remote SSH 插件进行远程连接.
按照提示输入登录指令和密码, VSCode 将会提供一个图形化界面辅助操作 Linux 环境.
1.3 镜像
很多 Linux 镜像自带驱动程序以及 Pytorch, Tensorflow, Python 等, 如果没有预装那么请手动安装以下内容.
1.3.1 CUDA
CUDA 是一种由 NVIDIA 推出的通用并行计算架构, 在选择 CUDA 驱动版本时,您首先需要了解显卡的算力.
https://developer.nvidia.com/cuda-downloads
1.3.2 cuDNN
cuDNN 是基于 CUDA 的深度学习 GPU 加速库, 有了它才能在 GPU 上完成深度学习的计算. 想要在 CUDA 上运行深度神经网络, 就要安装 cuDNN, 这样才能使 GPU 进行深度神经网络的工作, 工作速度相较 CPU 快很多.
https://developer.nvidia.com/cudnn
1.3.3 Anaconda
Conda 不仅集成了 python 中所有深度学习的模块, 它还能控制不同的 python 版本.
https://www.anaconda.com/products/distribution
1.3.4 Pytorch
Pytorch 是一个深度学习框架, 安装的时候请注意版本对应.
conda create --name pytorch python=3.10
conda activate pytorch
pip install torch torchvision torchaudio -f https://download.pytorch.org/whl/cu111/torch_stable.html
1.3.5 Tensorflow
TensorFlow 是由 Google 团队开发的深度学习框架之一, 它是一个完全基于 Python 语言设计的开源的软件.
conda create --name tensorflow python=3.10
conda activate tensorflow
pip install tensorflow
2 训练
训练后将得到深度学习的模型.
2.1 Jupyter Notebook
Jupyter Notebook 是一个开源的交互式笔记本, 它的后缀名是 .ipynb, 可以通过网页浏览器来运行和查看代码, 非常人性化.
您可以点击 "执行" 按钮, 代码块单元格便会开始自动执行.
2.2 文件
2.2.1 目录
以下是一个典型的深度学习项目的目录结构示例:
project/
│
├── data/
│ ├── train/
│ ├── val/
│ └── test/
│
├── models/
│ ├── model1.py
│ ├── model2.py
│ └── ...
│
├── utils/
│ ├── dataset.py
│ ├── preprocessing.py
│ └── ...
│
├── train.py
├── val.py
├── test.py
└── inference.py
其中, data/ 目录存储了训练, 验证和测试数据集, models/ 目录存储了不同深度学习模型的实现, utils/ 目录存储了各种辅助模块, 如数据预处理等, train.py, val.py, test.py 和 inference.py 分别是模型训练, 验证, 测试和推理的脚本.
2.2.2 上传
wget 和 curl 命令可用于远程下载:
wget -P data/ [URL]
curl -o data/dataset.zip [URL]
scp 命令可将本地文件传输到远端:
scp [source] username@server_ip:[destination]
2.3 参数
2.3.1 Epoch
一个 epoch 指的是对全部数据集完成一次训练的过程, 即遍历一遍全部数据集. 一个 epoch 包含多个 iteration.
2.3.2 Iteration
一个 iteration 指的是对一个 batch 的数据完成一次前向传播, 反向传播和参数更新的过程. 一个 iteration 包含多个 batch. 一个 batch 的大小称为 batch size.
2.3.3 Batch
一个 batch 指的是一次训练中使用的一组数据, 通过这组数据更新一次模型参数. 一个 batch 包含多个 step.
2.3.4 Step
一个 step 指的是一个前向传播和一个反向传播, 也可以称为一个参数更新步骤.
2.4 输出
2.4.1 log
训练时请使用 nohup 命令, 这样即使 SSH 断开, 训练也可以在后台进行:
nohup python train.py > output.log &
同时日志会输出到当前目录的 output.log 中.
2.4.2 Tensorboard
TensorBoard 是 TensorFlow 的一个可视化工具.
3 推理
推理指使用训练好的模型对新的数据进行预测.