ExpRe[12] docker镜像修改保存复用,物理机环境配置


目录
  • 修改,保存,复用deepo镜像
    • 更新pytorch
    • 保存镜像
    • 复用镜像
  • ssh
  • 总结和问答练习

时效性
本篇撰写时间为2021.11.20,由于计算机技术日新月异,博客中所有内容都有时效和版本限制,具体做法不一定总行得通,链接可能改动失效,各种软件的用法可能有修改。但是其中透露的思想往往是值得学习的。
Linux version 5.4.0-84-generic (buildd@lcy01-amd64-007) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04))

本篇前置:

  • ExpRe[10] 继续准备Ubuntu常用软件(神秘软件、备份恢复软件)
  • ExpRe[11] Docker,NVIDIA驱动,深度学习镜像deepo

修改,保存,复用deepo镜像

我们的目标是配置物理机的环境。物理机显卡型号更高,有些细节和裸金属服务器不同。所以需要修改现成的镜像,并保存以便复用。
装驱动和deepo步骤和11期类似。(装驱动前记得一定要保存备份)
只不过由于物理机默认并非root账号,而服务器的ssh我们之前一直都用root,所以这回过程中需要多加些sudo而已。

更新pytorch

这时比较麻烦的是物理机显卡型号新,不能用deepopytorch,需要手动更新并保存镜像。

以上报错即:pytorch的版本太老旧。
我们根据指示,到
https://pytorch.org/get-started/locally/
找最新版pytorch
pip3 install --force-reinstall torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html装最新版(可以思考一下:pytorch作为“更表层”的,显然是新pytorch支持老显卡合理,而不是新显卡支持老pytorch合理)
这时可以python然后import torch
torch.cuda.current_device()不报错,说明好了
Ctrl + Z退出python
exit命令退出容器

保存镜像

我们更新了容器的内容,可以把容器保存成镜像方便以后到处使用。
注:容器和镜像的关系某种程度上类似于实例对象和类的关系。
sudo docker ps -a
记住待保存容器的NAMES字段
到你想保存的路径,sudo docker export <容器名> > <文件名>即可。例如
sudo docker export magical_wilbur > 1120.tar
注:这些名字是自动生成方便你记忆的。是形容词+名人。比如mendel是孟德尔。

复用镜像

举例:刚刚保存了1120.tar,于是现在可以:
sudo docker import 1120.tar
现在可以
sudo docker imagessudo docker ps -a查看镜像和容器列表。发现确实多了一个镜像(注:REPOSITORYTAG此时都是
复制IMAGE ID
参考第11期,稍微修改命令,也就是运行
sudo docker run --gpus all -it bash
即可使用定制好的镜像。
(退出后可以看看sudo docker ps -a的结果,确认我们用自己定制的镜像实例化了一个容器)
注:对于退出了的容器,复用容器(而不是镜像)应该
sudo docker start <容器名>
sudo docker attach <容器名>

ssh

sudo apt install openssh-server(Ubuntu 18.04.6 desktop不默认带server的)
sudo apt install net-tools
ifconfig输出,看到若干ip地址。具体ssh连接哪个请咨询管理员,学习计网等。
比如:有时没有公网ip,外界设备只能先vpn到局域网(如“校园网”)再ssh局域网ip.
比如:有公网ip(要花钱买),直接连公网ip
参考资料:

IPv4 网络地址数量非常有限,大约只有 43 亿个。
家庭宽带一般会使用 NAT(Network Address Translation,网络地址转换)在一个 IPv4 地址内部扩展出一个内部网络。此时内部可以正常访问全球 IPv4 地址(即公网地址),但是外部的设备只能找到这个内部网络共用的全球 IPv4 地址,而没法找到经过 NAT 之后的内部设备地址。
大部分用户主要需求是获取互联网资源,并没有对外提供服务需求,现在国内运营商在大部分城市默认已经不会给家庭宽带用户动态分配公网地址,而是换成了一层或多层 NAT 后的内网地址。并且一般用户发送数据的需求远小于获取数据的需求,所以家庭宽带的上下行带宽一般是不对等的,例如某地电信宽带 500M 下行带宽对应的上行带宽只有 30M。
内网穿透工具解决上述问题。

总结和问答练习

  1. Q: 如果想知道“pip怎么重装pytorch”,可以怎么办?
    A: 除了谷歌,也可以pip -h,发现命令列表有install命令。再pip install -h,就发现可以pip install --force-reinstall
    具体到本文,由于官网给的命令是
    pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
    所以我们可以
    pip3 install --force-reinstall torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html