时效性
本篇撰写时间为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[2] 准备神秘软件、备份恢复软件
https://www.cnblogs.com/minor-second/p/15578767.html - ExpRe[11] Docker[0] 基础使用,涉及GPU的使用,深度学习镜像deepo
https://www.cnblogs.com/minor-second/p/15566228.html - 注意:本篇综合了10和11的内容,不过设备上,只是针对物理机的,不需要云服务器。
- 当然,你只有云服务器,没有物理机,也可以从本篇得到参考
修改,保存,复用deepo镜像
我们的目标是配置物理机的环境。物理机显卡型号更高,有些细节和裸金属服务器不同。所以需要修改现成的镜像,并保存以便复用。
装驱动和deepo步骤和11期类似。(装驱动前记得一定要保存备份)
只不过由于物理机默认并非root
账号,而服务器的ssh
我们之前一直都用root
,所以这回过程中需要多加些sudo
而已。
更新pytorch
这时比较麻烦的是物理机显卡型号新,不能用deepo
的pytorch
,需要手动更新并保存镜像。
以上报错即: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 images
和sudo docker ps -a
查看镜像和容器列表。发现确实多了一个镜像(注:REPOSITORY
和TAG
此时都是<none>
)
复制IMAGE ID
参考第11期,稍微修改命令,也就是运行
sudo docker run --gpus all -it <IMAGE ID> 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。
内网穿透工具解决上述问题。
总结和问答练习
- 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