pycharm连接远程linux服务器上的docker进行深度学习训练

实习过程中由于GPU都在服务器上,编辑代码很麻烦。并且服务器上配置了docker的环境,所以用pycharm连接远程服务器的docker进行深度学习,这样在本地调用远程服务器的GPU和环境,更方便一点,将这个过程记录下来,希望对大家有所帮助。

目录

一、创建映射端口的docker容器

二、配置ssh

三、在pycharm中配置环境

一、创建映射端口的docker容器

首先查看已有的镜像(我自己制作了一个,所以用grep过滤一下)

bash 复制代码
docker images | grep ds

我选择ds-pytorch作为创建容器的镜像,接下来看看目前所有的相关容器。

bash 复制代码
docker ps -a | grep ds

开始创建容器

bash 复制代码
docker run -it --name ds-test -p 8028:22 --gpus all -v /home/huangds/project:/project ds-pytorch:1.0 /bin/bash

这条命令用于启动一个新的 Docker 容器,并设置了多个选项。以下是详细的解释:

  • docker run:这是启动一个新容器的基本命令。

  • -it

    • -i:让容器分配一个伪TTY,并保持 STDIN 打开。这意味着你可以与容器内的进程进行交互。
    • -t :让容器分配一个伪TTY。通常 -i-t 一起使用,以获得交互式 shell 体验。
  • --name ds-test :这个选项指定了容器的名称为 ds-test

  • -p 8028:22:这个选项用来发布(publish)容器的端口到宿主机上。这里的意思是从容器的端口 22 映射到宿主机的端口 8028。端口 22 通常是 SSH 服务使用的端口,这是为了允许从宿主机访问容器中的 SSH 服务。

  • --gpus all:这个选项指定了容器可以访问所有可用的 GPU 资源。

  • -v /home/huangds/project:/project :这个选项用来挂载宿主机的一个目录到容器中。具体来说,它把宿主机上的 /home/huangds/project 目录挂载到容器内的 /project 目录。这使得容器可以访问宿主机上的数据,可以数据共享和持久化存储。(容器会自动创建/project路径,从图中框起来的路径就可以看出)

  • ds-pytorch:1.0 :这部分指定了基础镜像的名字及其标签(tag)。这里的 ds-pytorch 是镜像的名字,而 1.0 是标签。标签用于区分同一个镜像的不同版本。自己的制作的镜像如果没有指定标签,会显示找不到报错。

  • /bin/bash:这部分指定了容器启动后执行的第一个命令。在这里,容器启动后会进入一个交互式的 bash shell,允许用户与容器内的环境进行交互。

二、配置ssh

容器中:

更新apt

bash 复制代码
apt update

下载openssh-server

bash 复制代码
apt install -y openssh-server

下载安装过程中会出现需要填写的部分,如下图填写亚洲(6)和上海(70)就行。

此时安装完成,需要进行一些配置

bash 复制代码
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服务

bash 复制代码
service ssh restart
  1. mkdir /var/run/sshd: 创建一个名为 /var/run/sshd 的目录,这是 OpenSSH 服务所需的目录,用于存放一些临时文件。

  2. echo 'root:123456' | chpasswd: 修改 root 用户的密码为 123456。注意,这是一个非常弱的密码,强烈建议使用更安全的密码。

  3. sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config: 编辑 /etc/ssh/sshd_config 配置文件,将 PermitRootLogin prohibit-password 改为 PermitRootLogin yes,允许 root 用户通过 SSH 登录。

  4. sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd: 编辑 /etc/pam.d/sshd 文件,将 pam_loginuid.so 从 required 改为 optional。这一步是为了允许非交互式 SSH 会话,如通过 SSH 导出文件等操作。

  5. echo 'export VISIBLE=now' > /etc/profile: 添加环境变量 VISIBLE=now/etc/profile 文件。这一步似乎有些奇怪,因为 VISIBLE 变量并不是标准的 Linux 环境变量。可能是某种自定义的需求,具体作用取决于上下文。

  6. service ssh restart: 重启 SSH 服务,让上述改动生效。

宿主机上(不是服务器的docker里):

测试新建docker容器中哪个端口转发到了服务器的22端口

bash 复制代码
docker port [your_container_name] 22

可以看到是8028,跟之前创建容器时的对应上了。

bash 复制代码
ssh root@[your_host_ip] -p 8028

ssh测试连接时有时候会报错,所以在容器中查看一下ssh的配置文件

bash 复制代码
vim /etc/ssh/sshd_config

将PermitRootLogin的值从prohibit-password改为yes,X11UseLocalhost设置为no。

之后重新在服务器中ssh连接一下,输入密码就没问题了。

bash 复制代码
ssh root@[your_host_ip] -p 8028

三、在pycharm中配置环境

选择文件file-->setting设置--->找到python解析器



出现上图就说明pycharm中的ssh连通了。

要选择系统编译器,然后选择自己的python在哪个目录下,不知道的可以在容器里输入

复制代码
which python

我的python文件在/opt/conda/bin/python,所以修改如下:

"Sync folders" 显示为 <Project root> -> /dasheng,这意味着 PyCharm 将把本地项目根目录与远程服务器上的 /dasheng 目录进行同步。

出现红色方框中的选项就说明没问题了,接下来就可以在pycharm中调用服务器里GPU进行训练了。

相关推荐
蹦蹦跳跳真可爱5892 分钟前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij6 分钟前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
无妄-202411 分钟前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享
雷羿 LexChien12 分钟前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
R.X. NLOS26 分钟前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code
cuijiecheng20181 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
敲键盘的小夜猫1 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12201 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
白杆杆红伞伞2 小时前
T01_神经网络
人工智能·深度学习·神经网络
槑槑紫2 小时前
深度学习pytorch整体流程
人工智能·pytorch·深度学习