pycharm使用docker作为运行环境
该文章由 AnonymousUser在 2021年10月22日 14:30:00发布
遇到的问题
在运行不同模型的代码的时候,这些论文之间都有不同的版本库的要求,且对应的cuda和cudnn的版本也不同,导致在每次配置的时候都很麻烦,在调整运行环境的时候都需要折腾很久,所以就想着有没有更好的解决方案来解决环境配置的问题。
找到i的解决方法是在docker中建立对应的运行的虚拟环境,然后pycharm使用docker中的虚拟环境代替完成这个环境的配置问题。
docker镜像准备
拉取docker镜像
docker pull pytorch/pytorch:0.4.1-cuda9-cudnn7-devel
检查拉取好的docker镜像
sudo docker images -a
新建docker container
使用docker容器,指定gpu,开放端口号的转发规则,容器别名,运行的shell
新建包含 pytroch 0.4.1 gpu版本的容器
sudo docker run --gpus all -p 12622:22 -p 5592:5592 -p 5593:5593 -td --name=pytorch041 -v /media/jy/Elements/ms-tcn/:/code pytorch/pytorch:0.4.1-cuda9-cudnn7-devel bash
# 或者
sudo nvidia-docker run -it -p [host_port]:[container_port](do not use 8888) --name:[container_name] [image_name] -v [container_path]:[host_path] /bin/bash
命令参数说明: - 使用-p参数指定容器端口的转发规则 - 使用--name参数指定容器的别名 - 使用-参数指定容器的数据卷 - 使用-it参数使得的当前容器在后台运行
在新建docker的时候,需要注意留出一个容器的22端口的转发规则。
配置容器的ssh服务
进入容器内
sudo docker exec -it pytorch041 bash
在容器内配置文件项
在进入容器后,更新依赖
# 配置ssh服务,安装openssh-server
apt update
apt install -y openssh-server
建立一个配置文件夹并进行必要的配置:
mkdir /var/run/sshd
echo 'root:passwd' | chpasswd
# 这里使用你自己想设置的用户名和密码,但是一定要记住!
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
echo "export VISIBLE=now" >> /etc/profile
重启SSH
service ssh restart
编写dockerfile文件
- 在dockerfile文件中完成对应配置信息的设置
dockerfile文件内容:
sudo docker build -f dockerfile4torch041 -t mytorch041:v1.0 . --no-cache --force-rm
# 启动容器
sudo docker run --gpus all -p 12623:22 -td --name=pytorch041dockerfile -v /media/jy/Elements/ms-tcn/:/code mytorch041:v1.0 bash
# 测试ssh连接
# sudo ssh root@10.1.218.205 -p 12623
#进入容器
sudo docker exec -it pytorch041dockerfile bash
#重启ssh服务
service ssh restart
在运行docker的主机上进行调试
在服务器(宿主机)上(不是服务器的docker里)测试刚刚新建docker容器中哪个端口转发到了服务器的22端口:
sudo docker port [your_container_name] 22
#(base) jy@jy-pc:/var/run/sshd$ sudo docker port pytorch041 22
#0.0.0.0:12622
#:::12622
测试能否使用远程连接到docker:
ssh root@[your_host_ip] -p [The forwarding port of port 22]
# test local
# ssh root@127.0.0.1 -p 12622
# test remote
# ssh root@10.1.218.205 -p 12622
在pycharm中配置部署环境
创建SFTP服务并完成本地映射
打开PyCharmTools > Deployment > Configuration, 新建一个SFTP服务器 按照之前服务器端的信息,依次完成host, port, user name,password的设置 在设置完成之后,点击 Test SFTP connection ,成功完成连接
映射文件完成本地化
在Mappings中配置路径,这里的路径是你本地存放代码的路径,与刚刚配置的Root Path相互映射(意思是Mapping里本机的路径映射到远程的Root Path),方便以后在本地和远程docker中进行代码和其他文件同步。 其中local path是本地需要被同步的文件夹,deployment path是在远程服务器中被同步的文件,在创建完成SFTP时会把本地的file同步到远程服务器上。
远程解释器本地化
点击PyCharm的File > Setting > Project > Project Interpreter右边的设置按钮新建一个项目的远程解释器: 在new server configuration 中输入host,post,user name来完成远程解释器的设置。 等待文件同步和虚拟环境中的库函数的同步即可完成远程访问的操作。
可以远程直接使用python解释器,但是无法直接使用shell的方式调用远程的资源,还需要使用ssh命令进行远程连接;并且在如果使用jupyer notebook来连接也无法解决。
相关链接
- 找到python解释器所在位置 在选取SFTP的python编译器的时候,可以使用
whereis python
找到虚拟环境中python编译器所在的目录,并在设置SFTP的时候选定。