官网安装步骤:NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs (https://github.com/NVIDIA/nvidia-docker) 或者直接运行下面的命令:
##首先要确保已经安装了nvidia driver
# 2. 添加源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 2. 安装并重启
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
安装完成后可以新建一个容器测试一下:
sudo docker run -it --name test_nvidia_docker --gpus all nvidia/cuda:11.1-base
其中最后的参数nvidia/cuda:11.1-base 是Nvidia官方的镜像,需要根据工作站主机中实际安装的cuda版本进行修改,版本可以用nvcc -V查看。
进入容器之后可以跑一下nvidia-smi命令看看:
现在可以在docker里面正常使用GPU啦~
3.6 测试这里通过一个简单的python脚本测试一下GPU训练是否一切正常,跑一个DL里面的Hello World程序,通过两种方法测试:本地conda和docker虚拟机。
1. 本地Conda环境方式:以后的开发过程中一般还是使用Docker的方式来进行更为优雅。
先用conda新建一个python3.8 pytorch1.7 cuda11.0的虚拟环境:
conda create --name python_38-pytorch_1.7.0 python=3.8
创建完成后进入环境:
conda activate python_38-pytorch_1.7.0
检查一下是否切换到所需环境了:
which pip
如果看到使用的确实是我们设置的环境目录中的pip的话说明就ok。
接下来在环境中安装pytorch,可以参考官网的安装命令:Start Locally | PyTorch(https://pytorch.org/get-started/locally/)
输入以下命令进行安装:
pip install torch==1.7.0 cu110 torchvision==0.8.1 cu110 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
环境配置就完成了,下面新建一个简单的测试脚本验证功能,新建mnist_train.py,内容如下:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.backends.cudnn as cudnn
from torchvision import datasets, transforms
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
self.conv2_drop = nn.Dropout2d()
self.fc1 = nn.Linear(320, 50)
self.fc2 = nn.Linear(50, 10)
def forward(self, x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
x = x.view(-1, 320)
x = F.relu(self.fc1(x))
x = F.dropout(x, training=self.training)
x = self.fc2(x)
return F.log_softmax(x, dim=1)
def train(model, device, train_loader, optimizer, epoch):
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
optimizer.step()
if batch_idx % 10 == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.item()))
def main():
cudnn.benchmark = True
torch.manual_seed(1)
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
print("Using device: {}".format(device))
kwargs = {'num_workers': 1, 'pin_memory': True}
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('./data', train=True, download=True,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=64, shuffle=True, **kwargs)
model = Net().to(device)
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
for epoch in range(1, 11):
train(model, device, train_loader, optimizer, epoch)
if __name__ == '__main__':
main()
运行脚本,正常的话就可以看到训练输出了:
2. Docker环境方式:首先还是新建一个Docker镜像,运行下面的命令:
sudo docker run -it --name train_mnist \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-v /home/pengzhihui/WorkSpace/_share:/home/workspace/_share \
--gpus all nvidia/cuda:11.1-base
就进入到了带gpu的ubuntu20.04容器中,效果可以参考文章开头的视频。按照前面的配置方法同样配置好pytorch和其他软件包,然后运行同样的脚本,也可以得到上述输出,说明gpu在docker中正常工作。
04
工作站维护篇
4.1 工作站系统备份还原1. 备份
由于Linux本身万物皆文件的设计理念,加上root用户对几乎全部的系统文件都有访问和更改的权限,因此Linux系统的备份和还原其实非常简单,我们直接打包整个根文件系统就可以了。
我们可以使用tar命令来打包并压缩文件系统,不过这里在打包的过程中需要排除一些不需要文件,或者与新系统文件冲突的文件,包括/tmp、/proc、/lost found 等目录。
找一个你想保存备份文件的目录,运行下面的命令:
tar -cvpzf ubuntu_backup@`date %Y-%m %d`.tar.gz --exclude=/proc --exclude=/tmp --exclude=/boot --exclude=/lost found --exclude=/media --exclude=/mnt --exclude=/run /
我们会得到一个名为backup.tgz的压缩文件,这个文件包含我们需要备份的系统的全部内容。
2. 还原
如果系统没有出问题可以正常启动的话,那直接在刚刚的压缩包找找到想还原的文件替换就好了。而如果系统无法启动了,或者说想换一块硬盘克隆一样的系统,那么可以按一下步骤操作:
- 重装干净的Ubuntu系统。跟上面介绍的一样,使用U盘给目标磁盘重装一个干净的系统,这一步是为了省去自己分配存储空间和挂载的麻烦,如果你会自己配置的话那也可以不做这一步。
- 再次使用U盘进入系统,这次选择try ubuntu without installing,然后可以看到挂载好的刚刚安装了干净系统的另一个盘,我们在这里对盘里的根文件系统进行一些文件的提取:
sudo su
# 在tryUbuntu根目录下有media文件夹,里面是U盘文件夹和新安装的系统文件夹,在在里分别用(U盘)和(UBUNTU)表示
cd /media/(U盘)
mount -o remount rw ./
# 将新系统根目录下/boot/grub/grub.cfg文件备份到U盘中
sudo cp /media/(Ubuntu)/boot/grub/grub.cfg ./
# 将新系统根目录下/etc/fstab文件备份到U盘中,fstab是与系统开机挂载有关的文件,grub.cfg是与开机引导有关的文件,所以这一步至关重要
sudo cp /media/(UBUNTU)/etc/fstab ./
# 这一步删除新装ubuntu全部的系统文件,有用的fstab及grub.cfg已经备份
cd /media/(UBUNTU)
sudo rm -rf ./*
# 将U盘中backup.tgz复制到该目录下并解压缩
cp /media/(U盘)/backup.tgz ./
sudo tar xvpfz backup.tgz ./
# 创建打包系统时排除的文件
sudo mkdir proc lost found mnt sys media
这一步完成后,在用我们在新系统中备份的fatab及grub.cfg 文件去替换压缩包中解压出来的同名文件,sudo reboot重启后就发现系统已经恢复到备份时的状态,包括各种框架,环境,系统设置~
以上,后面有更新的话还会继续补充,希望对大家有帮助~历史文章点击→查看
- 教你用PyTorch玩转Transformer英译中翻译模型!
- 深度学习工程技巧之网格调参
- PyTorch使用预训练模型进行模型加载
- 深度学习调参经验总结
- PyTorch实现断点继续训练
- Pytorch/Tensorflow-gpu训练并行加速trick(含代码)
- 从NumPy开始实现一个支持Auto-grad的CNN框架
- pytorch_lightning 全程笔记
- 深度学习中的那些Trade-off
- PyTorch 手把手搭建神经网络 (MNIST)
- autograd源码剖析
- 怎样才能让你的模型更加高效运行?
- 来自日本程序员的纯C 深度学习库tiny-dnn
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。