文章目录

  • 新建任务
  • Docker
  • Ubuntu install
  • test
  • 运行交互式容器
  • 启动容器
  • Docker 容器使用
  • 容器使用
  • 获取镜像
  • 启动容器
  • 查看所有的容器命令如下:
  • 使用 docker start 启动一个已停止的容器:
  • 后台运行
  • 停止一个容器
  • 自定义容器
  • push 到服务器上
  • 环境配置
  • 在容器下运行本地项目
  • 一些报错
  • 上传到服务器
  • 多GPU
  • SSH
  • debug
  • 解决方法
  • [way 1]()
  • way 2
  • PCB
  • 1、 新建一个job , 设置SSH , 下载密钥
  • 2、 ubuntu 登录服务器上的容器
  • 3、 进入 /mnt/home 文件目录下 , 执行各种命令
  • 4、 pycharm 连了远程服务器文件的目录上 ,找到要修改的文件 , 修改, 然后在命令行执行。
  • 下一步做什么


新建任务

服务器使用GPU 服务器使用方法_ubuntu

Docker

Ubuntu install

curl -sSL https://get.daocloud.io/docker | sh

服务器使用GPU 服务器使用方法_服务器_02

test

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

各个参数解析:

docker: Docker 的二进制执行文件。

run: 与前面的 docker 组合来运行一个容器。

ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

/bin/echo “Hello world”: 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。

服务器使用GPU 服务器使用方法_服务器使用GPU_03

运行交互式容器

我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

服务器使用GPU 服务器使用方法_服务器使用GPU_04

各个参数解析:

-t: 在新容器内指定一个伪终端或终端。

-i: 允许你对容器内的标准输入 (STDIN) 进行交互。

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

root@0123ce188bd8:/#  exit
exit
root@runoob:~#

启动容器

使用以下命令创建一个以进程方式运行的容器

runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

在输出中,我们没有看到期望的 “hello world”,而是一串长字符

2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:

runoob@runoob:~$ docker ps
CONTAINER ID        IMAGE                  COMMAND              ...  
5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...

服务器使用GPU 服务器使用方法_docker_05


输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

runoob@runoob:~$ docker logs 2b1b7a428627

停止容器

我们使用 docker stop 命令来停止容器:

runoob@runoob:~$ docker stop 2b1b7a428627

服务器使用GPU 服务器使用方法_docker_06

Docker 容器使用

容器使用

获取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:

$ docker pull ubuntu

服务器使用GPU 服务器使用方法_服务器使用GPU_07

启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

$ docker run -it ubuntu /bin/bash

这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
启动已停止运行的容器

查看所有的容器命令如下:

$ docker ps -a

使用 docker start 启动一个已停止的容器:

$ docker start b750bbbcfd88

后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)

停止一个容器

停止容器的命令如下:

$ docker stop <容器 ID>

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>

自定义容器

vim /etc/docker/daemon.json
# 将安全仓库设为服务器ip
{  "insecure-registries": ["172.16.0.7"]}
# 重启docker使配置生效
systemctl restart docker

首先设置安全仓库为服务器Ip

vim /etc/docker/daemon.json

登录docker 仓库

# login to docker repository

docker login 172.16.0.7

    Commands above needs to be executed only once
从服务器pull image

```python
docker pull 172.16.0.7/project_name/image_name:tag_name

服务器使用GPU 服务器使用方法_服务器_08

服务器使用GPU 服务器使用方法_服务器_09

查看 images

docker images

使用刚pull下来的image运行container

docker run --name container_name -v $(realpath ~):/mnt/home -itd 172.16.0.7/hpcl_images/standard:python_3.6-pytorch_1.3.1-gpu bash
sudo docker run --name container_name -v $(realpath ~):/mnt/home -itd 172.16.0.7/hpcl_images/standard:python_3.6-pytorch_1.3.1-gpu bash
sudo: unable to resolve host yuuzh-rtx2080ti
4e06021f9d867a6cbbcaedd022a9155b3655f0cabc1d756e089741843501b2d5

保存好配置的image

sudo docker commit -m "plasticnet" container_name 172.16.0.7/zhaoyuyu_repo/container_name:python_3.6-pytorch_1.3.1-gpu-plasticnet
sudo: unable to resolve host yuuzh-rtx2080ti
sha256:02c48f7c14b184a37d3e869dc4353713ed48df542bc48888913af2fcdc94b48b
s$ sudo docker commit -m "plasticnet" container_name 172.16.0.7/zhaoyuyu_repo/container_name:python_3.6-pytorch_1.3.1-gpu-plasticnet
sudo: unable to resolve host yuuzh-rtx2080ti
sha256:2139654b250345e5702fc5bf545d949812c6d26e022856ba0bfaf66904693a49

push 到服务器上

sudo docker push 172.16.0.7/zhaoyuyu_repo/container_name:python_3.6-pytorch_1.3.1-gpu-plasticnet

服务器使用GPU 服务器使用方法_docker_10

环境配置

在容器下运行本地项目

cd /mnt/home

一些报错

  1. ImportError: libGL.so.1: cannot open shared object file: No such file or directory

办法:

apt update

apt install -y libgl1-mesa-dev
  1. ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

办法:

apt install libglib2.0-dev

上传到服务器

scp -r /home/yuuzh/Document/project/SiamTrackers/PlasticNet zhaoyuyu@172.16.3.76:~/Track

一定要在 本地终端里面!!!

多GPU

服务器使用GPU 服务器使用方法_服务器_11

SSH

服务器使用GPU 服务器使用方法_docker_12

chmod 400 /home/yuuzh/Downloads/id_rsa_pai 
 ssh -p 32089 -i /home/yuuzh/Downloads/id_rsa_pai root@172.16.3.71

成功登录哦

pai 从 clone 任务创建页面生成的。

服务器使用GPU 服务器使用方法_服务器使用GPU_13

debug

AttributeError: ‘DataParallel’ object has no attribute ‘w’

Use 2 gpus
Setting random seeds
6 6 512 18432 18433 201
Initializing optimizer
Traceback (most recent call last):
  File "plastic_train.py", line 174, in <module>
    optimizer = torch.optim.Adam([plasticnet.w, plasticnet.alpha, plasticnet.eta], lr=params['lr'])
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 585, in __getattr__
    type(self).__name__, name))
AttributeError: 'DataParallel' object has no attribute 'w'
print("Initializing optimizer")
optimizer = torch.optim.Adam([plasticnet.w, plasticnet.alpha, plasticnet.eta], lr=params['lr'])


optimizer.plasticnet.step()
解决方法
#error
#optimizer = torch.optim.Adam([plasticnet.w, plasticnet.alpha, plasticnet.eta], lr=params['lr'])

#yy2
optimizer = torch.optim.Adam([plasticnet.module.w, plasticnet.module.alpha, plasticnet.module.eta], lr=params['lr'])
到百度首页
way 1
device_ids = [0,1]
# os.environ["CUDA_VISIBLE_DEVICES"]="0,1"
#device = torch.device('cuda' if torch.cuda.is_availa到百度首页ble() else 'cpu')
#yy

plasticnet = plasticnet.cuda(device_ids[0])
plasticnet = nn.DataParallel(plasticnet, device_ids=device_ids)
optimizer = torch.optim.Adam([plasticnet.w, plasticnet.alpha, plasticnet.eta], lr=params['lr'])

#yy
nn.DataParallel(optimizer, device_ids=device_ids)
optimizer.module.step()

Result : NO !!!

way 2

服务器使用GPU 服务器使用方法_服务器_14

PCB

今天 Dataparrlel 的问题解决了, 终于 在服务器上和我自己的电脑上出现的错误一致了。

有三个重要的重复步骤:

1、 新建一个job , 设置SSH , 下载密钥

sleep 3h 10m 3s

2、 ubuntu 登录服务器上的容器

修改ip 和 SSH 的进程号

```python
 chmod 400 /home/yuuzh/Downloads/id_rsa_pai 
 ssh -p 32089 -i /home/yuuzh/Downloads/id_rsa_pai root@172.16.3.71
3、 进入 /mnt/home 文件目录下 , 执行各种命令
4、 pycharm 连了远程服务器文件的目录上 ,找到要修改的文件 , 修改, 然后在命令行执行。

下一步做什么

修改代码, 使得内存足够代码使用, GPU分配部分 有问题。