文章目录
- 新建任务
- 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 连了远程服务器文件的目录上 ,找到要修改的文件 , 修改, 然后在命令行执行。
- 下一步做什么
新建任务
Docker
Ubuntu install
curl -sSL https://get.daocloud.io/docker | sh
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”,然后输出结果。
运行交互式容器
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
各个参数解析:
-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…" ...
输出详情介绍:
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
Docker 容器使用
容器使用
获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
$ docker pull ubuntu
启动容器
以下命令使用 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
查看 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
环境配置
在容器下运行本地项目
cd /mnt/home
一些报错
- ImportError: libGL.so.1: cannot open shared object file: No such file or directory
办法:
apt update
apt install -y libgl1-mesa-dev
- 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
SSH
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 任务创建页面生成的。
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
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分配部分 有问题。