环境情况
OS:ubuntu-22.04
Kernel:5.15.0-101-generic
GPU:NVIDIA-T4
Python版本:3.10.12
Docker:24.0.5
使用MNIST数据集训练手写数字识别
下载数据集,使用以下脚本
环境初始化配置
先安装torch和torchvision
1 | pip install torch torchvision |
安装cuda和GPU驱动,直接按照官网手册进行,这里安装cuda-12.1,默认会自动安装对应的GPU驱动
https://developer.nvidia.com/cuda-12-1-0-download-archive
也可以用cuda12.4。同样按此目录下载即可
安装完成后能执行nvidia-smi看见gpu即可
1 | nvidia-smi |
安装docker-ce
1 | 参考:https://docs.docker.com/engine/install/ubuntu/ |
为了能够让容器内使用GPU安装nvidia-container-toolkit
1 | curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add - |
验证
执行docker命令启动nvidia/cuda:12.1.0-base-ubuntu20.04容器通过–gpus命令将宿主机gpu透传进去,执行nvidia-smi命令查看能否看见gpu
1 | docker run --gpus all nvidia/cuda:12.1.0-base-ubuntu20.04 nvidia-smi |
下载MNIST训练数据
1 | import os |
保存为文件,执行下载。
下载后的目录会包含3个文件夹
1 | ls /home/image/ |
MNIST文件夹:存放MNIST训练和测试数据集,包括
t10k-images-idx3-ubyte:包含训练集的图像数据。
train-labels-idx1-ubyte:包含训练集标签数据。
t10k-images-idx3-ubyte.gz:测试图像数据集。
t10k-labels-idx1-ubyte:测试集标签数据。
train文件夹:训练集图像,这个文件夹包含训练数据集,通常包括60,000张28x28像素的手写数字图像以及相应的标签。这些图像用于训练机器学习模型。
test文件夹: 这个文件夹包含测试数据集,通常包括10,000张28x28像素的手写数字图像以及相应的标签。这些图像用于评估训练好的模型的性能。
特点:
- 标签:每张图片都有一个对应的标签,表示该图片上的数字是多少(0到9)。
- 标准化:所有图片都被标准化到28x28像素,并且中心对齐,保证数字位于图像的中心位置。
配置
1 | docker run --gpus all -itd --rm -v /home/mnist-data:/workspace/data nvcr.io/nvidia/pytorch:24.05-py3 |
在容器中进行训练
1 | import torch |
保存为mnist_train.py文件,执行python mnist_train.py
会加载我们下载映射到容器内的MNIST数据集,进行训练,训练后的文件mnist_cnn.pt会存储到workspace目录
加载模型进行测试验证
保存为test.py文件
1 | import torch |
执行验证,指定图片路径
1 | python test.py data/test/8/00527.png |
可以用test目录下数据进行快速验证。
也可以使用DIGITS进行图形化加载验证。
https://licensecounter.jp/engineer-voice/blog/articles/20240408_ngc_nvidia_gpu_cloud.html