配置docker+vscode远程连接

  • 服务器端
  • docker配置(pytorch+gpu)
  • 拉取镜像
  • 创建并运行容器
  • docker配置
  • 换源(可选)
  • 安装ssh
  • 安装git(可选)
  • vscode配置
  • 安装插件
  • Remote - SSH
  • 其它插件
  • 可能出现的问题
  • 其它常用命令
  • scp传送文件
  • docker相关


服务器端

docker配置(pytorch+gpu)

拉取镜像

  1. 查询服务器的cuda版本
    nvcc -V
  2. 官网上查找自己服务器对应的cuda版本镜像,这里用的是1.9.1-cuda11.1-cudnn8-develdocker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel
  3. 查看已经拉取的镜像
    docker images

创建并运行容器

  1. 设置容器名称为test,允许使用服务器的所有gpu,端口映射从1234到22(22是ssh的端口,不能改动,1234随便选个不被占用的就行),文件夹映射从/data/test到/data,镜像为上一步拉取的pytorch镜像
    docker run -it --name test --gpus all -p 1234:22 -v /data/test:/data -d pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel 此时用ssh连接时设置端口为1234,即可直接远程连接到docker中。服务器的/data/test文件夹中的所有内容全部映射到docker中的/data文件夹下
  2. 启动容器
    docker start test
  3. 进入容器
    docker attach testdocker exec -it test /bin/bash
  4. 查看gpu是否可用
    nvidia-smi
  5. 测试pytorch gpu是否可用 (请确认在conda的base环境下操作)
python  # 进入python环境
import torch
torch.cuda.is_available()

若输出为True,则说明运行正常,docker的pytorch-gpu配置完成

docker配置

安装vim:apt update && apt install vim

换源(可选)

若修改为清华源,可在vim修改文件时选择清华镜像站中提供的文本进行替换。注意自己服务器的操作系统版本

cp /etc/apt/sources.list /etc/apt/sources1.list
vim /etc/apt/sources.list
apt update && apt upgrade
安装ssh
  1. 拉取软件包apt-get install openssh-server
  2. 设置远程连接密码。最好不为空
    passwd root
  3. 完成ssh相关设置
    vim /etc/ssh/sshd_config 直接在文件中添加下面两行即可
PermitRootLogin yes
UsePAM no
  1. 重启ssh
    /etc/init.d/ssh restart
  2. 设置每次开启docker时启动ssh
    echo 'service ssh start' >> ~/.bashrc
  3. 设置无密码远程登陆
    在本地电脑上,打开终端,运行ssh-keygen -t rsa 复制本地电脑上~/.ssh/id_rsa.pub中的信息至服务器的~/.ssh/authorized_keys文件中(这里建议用scp复制过去之后使用>>输入cat local_id.pub >> ~/.ssh/authorized_keys
安装git(可选)
  1. 拉取软件包apt install git
  2. 基础设置。示例github账号为test,邮箱为test@qq.com
    git config --global user.name 'test'git config --global user.email 'test@qq.com'
  3. 生成ssh密钥
    ssh-keygen -t rsa -C 'test@qq.com'
  4. 将密钥添加至github账户中
    cat ~/.ssh/id_rsa.pub
  5. 将github的IP记录到docker中
    ssh -T git@github.com

vscode配置

安装插件

Remote - SSH
  1. 直接从vscode中自带的扩展商店中下载Remote - SSH
  2. 设置ssh连接
    选择左侧的远程资源管理器(调试下面),选择SSH Targets,鼠标移动过去,点击加号,输入ssh root@ip -p 1234,(自行替换ip为服务器ip)在弹出的文件中选择~/.ssh/config,此时可以发现左侧的远程资源管理器中增加了你的服务器地址。这时打开~/.ssh/config可以看见Host、HostName、Port、User。Host可以备注为远程服务器的名称,HostName为ip地址,Port为端口(仅包含数字),User为用户名root。
  3. 打开工作区
    文件-打开文件夹-选择你的工程所在文件夹
  4. 此时切换到资源管理器(左侧列表第一个)即可看到文件夹中的内容
  5. 注意,要设置python解释器为conda环境中包含pytorch的那个
    ctrl+shift+p,在输入框中输入python:select interpreter,选择base环境中的python/opt/conda/bin/python
其它插件
  1. Python
  2. Code Runner(可选)
  3. GitLens(可选)
  4. Todo Tree(可选)
  5. Chinese (Simplified)(可选)
  6. Rainbow CSV(可选)
  7. 彩虹括号(忘记叫啥名字了)(可选)

可能出现的问题

  1. pip报错
    修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
  1. 环境变量出错(忘记报错是什么了)
    echo 'export $(cat /proc/1/environ |tr '\0' '\n' | xargs)' >> /etc/profile
  2. 不记得了,想起来再写

其它常用命令

scp传送文件

直接从Mobaxterm的窗口往里面拖大概率报错说没有权限……
scp -P 1234 本机文件 root@ip:/data 自行替换ip、端口和文件位置。
(不过说实话命令不是很好用,建议下载一个winscp

docker相关

  1. 创建容器:docker run -it --name test --gpus all -p 1234:22 -v /data/test:/data -d pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel
  2. 启动容器:docker start test
  3. 进入多终端docker:docker exec -it test /bin/bash
  4. 进入运行中的容器:docker attach test
  5. 停止容器:docker stop test
  6. 重启容器:docker restart test
  7. 显示所有镜像:docker images
  8. 删除容器:docker rm test
  9. 显示所有容器:docker ps -a
  10. 导出容器(报错 无权限):docker export test > testdocker.tar
  11. 导入容器为镜像:docker import testdocker.tar testdocker:1.0
  12. 导出镜像:docker save test > testdocker.tar
  13. 导入镜像:docker load < testdocker.tar