搭建个人深度学习服务器(Ubuntu24.04+VSCode+SSH)
本文将分为三个阶段:按顺序完成后可实现:在本地训练➡️在局域网远程训练➡️在公网远程训练
目录
- 🌟 前言
- 一、安装Ubuntu及基本深度学习环境【完成后可在本地训练】
- 二、配置ssh并设置静态ip【完成后可在局域网远程训练】
- (1)配置ssh 🔑
- (2) 配置静态ip 🌐
- (3)可选:使用RDP共享桌面 🖱️
- 三、内网穿透(Zerotier、皎月连)【完成后可在公网远程训练】
- (1) Zerotier配置 🌍
- (2)皎月连配置 🌙
- 附1-训练时,用nvtop监视GPU状态
- 附2-VScode配置ssh、免密登录
- (1)VScode配置ssh 🖥️
- (2)VScode免密登录🚀:
- 附3-用screen/nohup/disown避免断联停止训练
- (1) 用screen管理会话 🔧(推荐):
- (2) 用nohup使程序直接在后台运行 💡(一次性):
- (3) 通过disown抢救已运行的任务 🆘(应急):
- 附4-用git同步代码
- (1)在Ubuntu系统上安装Git
- (2)基础配置
- (3)仓库初始化与基础操作
- (4)连接远程仓库并推送
- (5)查看记录与同步
- (6)其他
- 📚 本文参考:
🌟 前言
最近需要搭个人服务器用于深度学习,网上相关资料比较零散,在此整理下这次搭建的主要步骤,以便复现。
一、安装Ubuntu及基本深度学习环境【完成后可在本地训练】
Ubuntu及基本深度学习环境的安装可以参考我之前的文章:在移动硬盘上搭建Ubuntu24.04深度学习环境(Anaconda + CUDA + Pytorch)。环境配置完可跳至第二节。在此整理下配置时常用的几个链接:
🔗 其中资源下载链接:
下载Ubuntu镜像:Download Ubuntu Desktop
下载Anaconda:清华大学开源软件镜像站
下载显卡驱动:官方驱动 | NVIDIA
下载CUDA:CUDA Toolkit Archive | NVIDIA Developer
下载cudnn:cudnn-archive
⚙️ 其中环境配置:
pip换源:
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
下载并安装 pytorch:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu129
💡 另,这次安装发现了几个需要注意的点,小结一下:
-
安装Ubuntu系统:
在安装页面联网的话,可以直接安装上显卡驱动,后续在图形化界面中可通过“附加驱动”选择驱动,可以省了手动安装驱动的麻烦,之前没联网没发现。这次我内存、硬盘的配置分别是64G、2T,分配的空间如下:
| 挂载点 | 大小 | 文件系统 | 说明 |
|---|---|---|---|
| /boot/efi | 1.13GB | FAT32 | 选择挂载点后自动生成 |
| swap | 64 GB | swap | 交换空间(虚拟内存),其实32G也够 |
| / | 300 GB | Ext4 | 系统根目录,安装系统和核心软件 |
| /var | 100 GB | Ext4 | 隔离系统日志、缓存和未来可能的Docker数据,保障系统稳定 |
| /tmp | 50 GB | Ext4 | 隔离临时文件 |
| /home | 剩余 | Ext4 | 存放用户文件、代码和环境配置 |
- 安装显卡驱动:
如果在安装Ubuntu时已经顺带安装了驱动,直接在终端输入:nvidia-smi,看到类似下图即为成功:

- 安装CUDA
记录:这次我装cuda的时候遇到了报错:“Existing package manager installation of the driver found. It is strongly recommended that you remove this before continuing”,这是因为我输入:nvidia-smi后,看到驱动支持的最大CUDA版本为13.0,就直接装了13.0版本的CUDA。后来装12.9的CUDA就能正常安装了。
二、配置ssh并设置静态ip【完成后可在局域网远程训练】
(1)配置ssh 🔑
sudo apt install openssh-server # 安装shh客户端
sudo systemctl start ssh # 启动OpenSSH服务端
sudo ufw allow ssh # 允许OpenSSH服务器通过防火墙
sudo ufw reload # 重新加载防火墙规则
(2) 配置静态ip 🌐
桌面版Ubuntu24.04有GUI,直接在设置里配置比较简单,配置之前还有几个前置操作,具体步骤如下:
-
确认网络信息:
还是用
ip a查看,在输出的信息里,先找要配置的网卡(有线网卡长得像enp5s0这样、无线像wlp4s0),再找类似这样的一行:inet 192.168.31.100/24 brd 192.168.31.255 scope global noprefixroute enp5s0这里格式为inet ipv4地址/子网掩码 brd 网关 …… 对应的网卡。记录下来网关对应的网段和子网掩码,因为更改ip地址只能在网关所对应的网段做操作;例如网关为192.168.31.1,则网段为192.168.31.x,故静态ip地址只能设置为192.168.31.x(如192.168.31.100)
-
进入 Settings → Network。
-
选择对应连接 → IPv4 → 选择 Manual。
-
填写 IP、子网掩码、网关和 DNS:8.8.8.8, 8.8.4.4→ 保存。

完成后再用命令ip a确认,应当都为刚刚设置的静态ip:

🎉 至此,局域网设备可通过固定IP连接服务器,而不用担心关机后ip会变了
(3)可选:使用RDP共享桌面 🖱️
为方便调试,可通过windows和ubuntu系统均自带的功能实现桌面共享,注意ubuntu端仍需要连屏幕或显卡欺骗器
-
启用桌面共享:
设置→系统→远程桌面→桌面共享→打开“桌面共享”开关→设置“用户名+密码”
-
固定桌面共享密码:
用命令seahorse打开“密码和密钥”→默认密钥环→删除GNOME Remote Desktop RDP credentials→点击左上方的"加号"添加密码密钥环,随便命名然后不要写密码直接创建→右键该创建的对象,“设置为默认”→重新设置“桌面共享”的密码 -
恢复默认密钥环:
打开终端,输入 seahorse 命令启动“密码和密钥”应用程序,把之前的默认的密钥环重新设置为默认
-
Windows连接:
使用Windows的“远程桌面连接”,输入:ip**:端口号**、用户名、密码即可远程登录该电脑。
端口号在ubuntu“桌面共享”的设置页面查看,默认为3390
三、内网穿透(Zerotier、皎月连)【完成后可在公网远程训练】
Zerotier免费,皎月连付费,类似的服务商还有花生壳之类,按需选择,这次我选了这俩,简要一下演示使用步骤:
(1) Zerotier配置 🌍
所有设备都需要安装:https://www.zerotier.com/download/
- 创建网络:主控设备注册并进入工作台:https://my.zerotier.com/network
在工作台新建网络后,管理页面如图,记下Network ID,主控设备和服务器都要加入:


- 服务器安装并加入网络:
依次运行以下命令,首先安装:
curl -s https://install.zerotier.com | sudo bash
添加自启:
sudo systemctl enable zerotier-one.service
启动服务:
sudo systemctl start zerotier-one.service
加入网络:
sudo zerotier-cli join <Zerotier控制台显示的Network ID>
另,退出网络命令是:sudo zerotier-cli leave
(2)皎月连配置 🌙
官网:https://www.natpierce.cn/
Windows上的安装很简单,直接运行.exe即可,Linux上安装稍费功夫,步骤如下:
- 创建文件夹/opt/natpierce
sudo mkdir -p /opt/natpierce
-
将解压后的名为
natpierce的二进制文件(而非文件夹)移动到/opt/natpierce如果对于xxx目录的权限不够,用chmod指令提升权限,如:
sudo chmod 777 /var/home/xxx如果是修改文件夹及子文件夹权限,在chmod后加:
-R -
创建service配置
sudo gedit /etc/systemd/system/natpierce.service
写入以下配置内容:
[Unit]
Description=Natpierce Tunnel Service
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/natpierce
ExecStart=/opt/natpierce/natpierce
Restart=always
RestartSec=5
User=root
# 日志直接走 systemd journal
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
- 重新加载 systemd
sudo systemctl daemon-reload
- 启动并设为开机自启
sudo systemctl enable --now natpierce.service
- 查看运行状态 / 日志
systemctl status natpierce.service
journalctl -u natpierce.service -f
输出中能看到皎月连就成了
附1-训练时,用nvtop监视GPU状态
Ubuntu自带系统监视器没有GPU监控,故采用应用nvtop来实现,直接安装:
sudo apt install nvtop
点击运行即可,运行效果如下:

附2-VScode配置ssh、免密登录
(1)VScode配置ssh 🖥️
-
安装插件:
在vscode中搜索并安装插件:remote-ssh、python、SFTP,分别用于ssh、选解释器、传文件:

-
配置SSH:
连接服务器:按Ctrl+P,输入ssh -p 22 <服务器用户名>@,回车选择配置文件
(或点击远程图标中的配置按钮,选择并配置config文件),其中:
Host:服务器名,默认同ip地址
HostName:服务器的地址
User:登录的用户名称

(2)VScode免密登录🚀:
在windows端,进到目录:C:Users<你的用户名>.ssh下查看你的密钥(公钥):id_rsa.pub,没有则用命令生成,回车到底即可:
ssh-keygen
服务器中,需要将公钥内容添加到~/.ssh/authorized_keys,按顺序输入:
cd ~ && mkdir -p .ssh && cd .ssh
gedit authorized_keys
在打开的窗口输入windows密钥中全部内容(…/.ssh/id_rsa.pub中的内容),保存后提升权限:
chmod 600 authorized_keys # 设置密钥文件仅对所有者可读写
chmod 700 ~/.ssh # 设置.ssh目录仅对所有者可读、写、执行
另,在项目目录下的.vscode➡️settings.json中,可配置默认解释器,如:
"python.defaultInterpreterPath": "~/anaconda3/env/deim/bin/python"
附3-用screen/nohup/disown避免断联停止训练
(1) 用screen管理会话 🔧(推荐):
灵活使用 screen 可以避免因连接断开而丢失进程,也可用于管理多个任务。对动辄半天+的模型训练很有用。
- 安装:
部分Linux系统会预装Screen,可以先检查一下:
若未安装,安装:screen --versionsudo apt update && sudo apt install screen
-
基本命令:
创建screen并命名(例如mytrain):screen -S mytrain终端界面会刷新,表示你已进入新的screen会话。
查看所有 screen 会话,注意是-ls不是ls:screen -ls示例输出(Attached表示会话仍在使用中):
There is a screen on: 60366.mytrain (2026年01月23日 17时12分14秒) (Attached) 1 Socket in /run/screen/S-6.不同于普通会话,screen会话的快捷键是:
1️⃣ 按Ctrl + D来退出当前会话(或在会话中输入exit)
另,在会话外关闭会话的指令是:screen -X -S mytrain quit
2️⃣ 先按Ctrl + A,再按D来脱离当前会话(状态会变为Detach)其他窗口命令(不常用):
3️⃣ 先按Ctrl + A,再按C来创建新窗口
4️⃣ 先按Ctrl + A,再按P来切换上一个窗口
5️⃣ 先按Ctrl + A,再按N来切换下一个窗口
3️⃣ 先按Ctrl + A,再按"来查看所有窗口例如按
Ctrl + D退出会话后,再用screen -ls会看到输出:No Sockets found in /run/...
而先按Ctrl + A,再按D脱离会话后,用screen -ls会看到输出:There is a screen on: 60366.mytrain (2026年01月23日 17时12分14秒) (Detach) 1 Socket in /run/screen/S-6.重新连接会话,看情况灵活使用,ID忘了用
screen -ls查看:
| 命令格式 | 说明 |
|---|---|
| screen -r mytrain | 直接连会话名称 |
| screen -r 12345 | 当会话名称可能重复时,用PID连接最可靠 |
| screen -r 12345.mytrain | 完整会话ID,最严谨 |
| screen -d -r mytrain | 强制接管会话,用于处于Attached状态的会话,但你还是想挤进去( |
(2) 用nohup使程序直接在后台运行 💡(一次性):
原理:在进程启动时即让其忽略SIGHUP信号,并立即放入后台。
当计划启动一个无需交互、长时间运行的任务时,这是最标准、最简洁的方法,安全用法:
nohup python train.py > training.log 2>&1 &
特点:稳定性高。所有输出被妥善保存,即使终端关闭也无影响。
(在启动时重定向标准输出和标准错误到当前目录下的training.log,避免因终端关闭导致的写入错误)
另,如果你相信你的程序不会报错/警告,简易用法是:
nohup python train.py &
特点:⚠️稳定性较低!如果进程向标准错误输出信息(如报错、警告),而终端已关闭,进程可能会因写入失败而挂起或崩溃。
查找所有nohup进程:
ps -ef | grep nohup
终止进程(通过PID),进程无响应时用kill -9 12345:
kill 12345
实时查看训练日志:
tail -f training.log
(3) 通过disown抢救已运行的任务 🆘(应急):
当忘记使用后台方式启动,而一个重要的任务已经在前台运行时,可通过disown将已经在前台运行的进程“剥离”出来,使其免于随终端关闭而终止。
操作步骤:
- 按下
Ctrl + Z挂起前台任务。 - 输入
bg,将任务在后台继续运行。 - 输入
disown -h,将任务从Shell作业表中移除,并使其忽略终端关闭时发出的SIGHUP信号。
原理:暂停进程 → 后台恢复 → 解除终端关联。
⚠️注意!该方法仍可能会尝试向已关闭的终端输出,导致问题(如进程被挂起)。是一种有效的"救急"方法,但如果是计划中的一次性训练脚本,更推荐使用nohup,若是需要交互、观察日志的长时间任务,更推荐用screen/tmux。
附4-用git同步代码
单独传文件夹的话,可用rsync:
rsync -r /home/sourcedir service@192.168.1.100:/home/targetdidr/
(1)在Ubuntu系统上安装Git
sudo apt-get install git
(2)基础配置
配置全局用户信息(提交记录会显示这些信息):
$ git config --global user.name 你的用户名
$ git config --global user.email 你的邮箱
查看当前所有配置信息:
git config --list
(3)仓库初始化与基础操作
在项目根目录初始化Git仓库:
git init
Git文件提交分为三个阶段:
- 工作区 → 暂存区:
git add filename
更常用的是,一次性添加所有变更文件到暂存区:
git add .
- 暂存区 → 本地仓库:
git commit -m '注释'
- 本地仓库 → 远程仓库:
git push
(4)连接远程仓库并推送
首次关联远程仓库(如Gitee、GitHub):
git remote add origin <你的仓库URL>
首次推送代码并设置上游分支:(主分支名根据你的远程仓库实际情况调整,也可以使用 git branch -M main可以将当前分支重命名为 main)
git push -u origin main
(5)查看记录与同步
查看历史版本(提交记录):
git log
通过url把github等仓库下载到本地:
git clone <仓库URL>
(6)其他
⚠️慎用!丢弃本地所有未提交的修改:
(我是在本地不知道改啥了,但是想完全同步下来仓库的内容,直接pull报错:error: Your local changes to the following files would be overwritten by merge时用)
git checkout .
执行一次 git pull或 git push后保存用户名和密码到本地,避免每次推送都输入密码:
git config --global credential.helper store
🎉先记到这,祝训练顺利!🎉
📚 本文参考:
- 【Ubuntu】安装SSH启用远程连接
- ubuntu如何设置静态ip
- [运维笔记]Ubuntu24.04静态ip配置
- Ubuntu24.04设置静态IP地址
- Windows主机远程桌面连接Ubuntu24.04主机
- zerotier实现内网穿透
- 皎月连Linux二进制版配置 - 执着的牛战士的文章 - 知乎
- linux如何修改文件权限
- Windows下如何使用VScode连接远程linux服务器进行远程开发
- vscode远程连接服务器,无需密码的方式。
- Windows下如何使用VScode连接远程linux服务器进行远程开发
- 【Linux】Screen 详解与实用指南
- Linux入门教程:nohup命令
- 解放终端的神器:nohup 全解析(附高频实战用法)






