pytorch: 使用docker
为了不用搭环境去使用GPU服务,然鹅太费钱了,每一分钟都在烧钱,扛不住了,决定自己搭环境吧,毕竟有GPU可用。
1. 服务器上已有的环境就是docker集群,所以很简单,pull一个pytorch的镜像就可以开始啦
去官网找合适的pytorch镜像版本,服务器上cuda是11.0的,但官网上面没有该版本,我选择了10.1版本的。
docker pull pytorch/pytorch:1.3-cuda10.1-cudnn7-devel,如果权限不够需要加sudo
(有博客说要和cuda版本一致,否则docker run会报错,我是没办法,只能一试,发现可以run。)
耐心等待就好。
2. 使用docker images查看,看看镜像仓库里是不是有了我们刚刚拉取的镜像
pytorch/pytorch是镜像名称, 1.3-coda10.1-cudnn7-devel是标签, fe0f6ec79dbf是镜像id
3. 使用该镜像创建运行一个容器:sudo docker run -t -i pytorch/pytorch:1.3-cuda10.1-cudnn7-devel /bin/bash
如果想在一开始就设置容器在后台运行,那么需要在-it后面加-d,会返回容器ID
如果想要使用gpu加速, 将docker run改成docker-nvidia run即可。
参数说明:
-i: 交互式操作。
-t: 终端。
pytorch/pytorch:1.3-cuda10.1-cudnn7-devel: 这是指用 pytorch:1.3-cuda10.1-cudnn7-devel 版本镜像为基础来启动容器。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
@后面的0d10ba3b0aaf就是启动的容器id
4. 常用命令
docker exit:退出容器(即使run的时候规定了-d后台运行,一样会结束)
Ctrl + P + Q:退出容器保持后台运行
docker ps:查看已有容器 (docker ps -n 1:可以看到刚刚操作的容器,做一个筛选)
因为run的时候没有规定容器的命名,所以想办法改一下这个容器的这些属性。
首先看到容器有ID和名字,但都有点难记,所以还是自己给它命名一个好记。
docker rename old_name new_name :重命名容器
docker start:启动已被停止的容器
docker stop:停止运行中的容器
docker restart:重启容器
docker exec -it ContainerName /bin/bash:再次进入一个正在运行的容器,使用docker exit也不会真的结束。
docker exec -u 0 -it ContainerName /bin/bash: 以root身份进入容器
docker attach 容器名或id:从后台进入正在运行的容器
docker cp 本地路径 容器ID:容器路径:拷贝本地文件到容器
5. 把数据都拷贝完了之后,就可以使用python xx.py开始跑代码啦,缺什么包就pip安装,优先使用国内源。
pip in install xx -i https://pypi/tuna/tsinghua.edu.cn/simple
如果要指定GPU有好几种方法:
(1)CUDA_VISIBLE_DEVICES = 1 python xx.py (命令行)
(2)os.environ['CUDA_VISIBLE_DEVICES'] = '1' (代码里)
(3)net = Net.cuda(1) (代码里,没试过)
(4)net = torch.nn.DataParallel(model, device_ids=[1]) (代码里,没试过)
推荐一款全能终端神器:MobaXterm,上传下载删除文件很快,对界面用户非常友好,还特别可爱!待机时间长了会有可达鸭飞出来!