【深度学习项目实战·02】Linux服务器环境搭建:从SSH登录到稳定运行项目

文章目录

01 本篇要解决什么问题

Windows上的代码能跑了,搬到服务器却又多出一批问题:当前操作的是哪台机器?文件应该放在哪里?没有管理员权限能不能建环境?关掉终端后任务会不会停止?

本篇以常见Linux x86_64服务器、Bash终端为例,建立可定位、可记录、便于后续远程开发的工作目录。Ubuntu 22.04/24.04可作为操作示例,具体系统与资源使用方式以所在平台为准。

  • 本篇关键词:SSH、Linux、用户目录、Conda、tmux、日志、计算节点。
  • 完成标志:能识别远程主机,在自己的环境里运行脚本,并知道输出在哪里。
  • 一句话概括:服务器环境既包含Python依赖,也包含主机、权限、存储和任务运行方式。

02 背景:先分清本地电脑、登录节点与计算节点

本地电脑提供终端和编辑器;远程机器保存代码与数据,并执行程序。如果平台有调度系统,SSH进入的可能只是登录节点,训练需要进入分配到的计算资源。

位置或资源 主要用途 需要确认什么
本地电脑 编辑、发起连接、查看结果 SSH客户端与网络
用户目录 环境、配置、小型文件 容量、权限与备份政策
数据盘或工作盘 数据集和较大输出 挂载、配额与清理政策
GPU计算节点 实际训练 分配的GPU、CPU和运行时限

**有SSH账号,不自动代表能在任意节点长期训练。**先按照平台说明使用资源,后面的Conda与PyTorch命令再在正确节点上执行。

03 实操:把远程环境逐层建立起来

(1)先用普通SSH连接

在本地终端检查客户端:

powershell 复制代码
ssh -V

下面的地址来自文档示例网段,用户名和端口都需要替换为管理员提供的信息:

powershell 复制代码
ssh -p 22 your_name@203.0.113.10

首次连接按管理员提供的信息核对主机指纹,再完成认证。先让命令行SSH正常,后面再配置VS Code,便于区分网络、认证和编辑器问题。

(2)确认当前主机与系统

成功登录后,以下命令在远程Linux终端执行:

bash 复制代码
whoami
hostname
pwd
uname -m
cat /etc/os-release
df -h "$HOME"

uname -m帮助区分x86_64与aarch64,安装器不能不看架构就通用。df反映文件系统容量;平台若另有用户配额,还要查看平台提供的配额信息。

使用NVIDIA GPU时再检查:

bash 复制代码
nvidia-smi

在没有GPU的登录节点上查不到设备,并不能直接证明计算节点驱动坏了。先确认是否已经进入分配到GPU的环境。

(3)选择已有Conda,或在用户目录安装

若平台已经提供Conda或模块环境,优先按其使用说明加载,再执行conda --version。个人安装示例如下,仅适用于Linux x86_64,且目标目录尚未安装过Miniconda:

bash 复制代码
mkdir -p "$HOME/software"
cd "$HOME/software"
curl -fL https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o miniconda-installer.sh
sha256sum miniconda-installer.sh

对照官方安装入口及下载页提供的信息核对安装文件,然后:

bash 复制代码
bash miniconda-installer.sh -b -p "$HOME/miniconda3"
source "$HOME/miniconda3/etc/profile.d/conda.sh"
conda --version

已有目标目录时先检查现有安装,不把上述命令当作覆盖升级命令。ARM服务器应选择对应安装器,并确认操作系统与软件包支持。

驱动、系统库和全局工具属于另一层,通常由管理员维护;用户目录里的Python环境可以独立建立。

(4)创建与Windows同名的独立环境

bash 复制代码
conda create -n dl-course python=3.11 pip -y
conda activate dl-course
python -m pip install --upgrade pip
python -m pip install numpy pillow matplotlib tqdm
python -c "import sys; print(sys.executable)"
python -m pip --version

环境名相同便于交流,不代表两个系统的二进制包完全相同。不要把Windows环境文件夹原样复制到Linux;应该依据项目依赖重新创建。

(5)固定项目位置,再传代码

在远程创建项目目录:

bash 复制代码
mkdir -p "$HOME/dl-course-lab/examples"
mkdir -p "$HOME/dl-course-lab/data"
mkdir -p "$HOME/dl-course-lab/artifacts"
cd "$HOME/dl-course-lab"

然后回到本地PowerShell的项目根目录,把第01篇的练习脚本传过去:

powershell 复制代码
scp -P 22 -r .\examples your_name@203.0.113.10:~/dl-course-lab/

SSH选择端口用小写-p,SCP选择端口用大写-P。以上只传代码;大数据集应按平台的数据传输要求处理。

(6)先在前台验证,再保存日志

在远程项目根目录运行:

bash 复制代码
conda activate dl-course
python examples/check_image_io.py
python -u examples/check_image_io.py > artifacts/io_check.log 2>&1
tail -n 30 artifacts/io_check.log

-u让Python输出更及时,重定向把标准输出和错误写入日志。示例日志名会被覆盖;不同实验应换成独立文件名,避免覆盖已有记录。

绝对路径与相对路径都可以用,关键是清楚相对路径依赖哪个工作目录。Linux路径区分大小写,Data与data通常不是同一目录。

(7)理解tmux的用途与边界

平台允许交互式持续任务,且已提供tmux时:

bash 复制代码
tmux new -s dl-course

进入后重新确认环境与目录,再运行任务。按Ctrl+b,松开后按d可以分离;之后重新连接:

bash 复制代码
tmux ls
tmux attach -t dl-course

tmux把会话保留在远程,常能避免单纯关闭本地终端造成会话丢失;它不防服务器重启,也不替代作业调度器或检查点保存。调度平台上的长训练应按平台规则提交。

图:本地连接、远程用户环境与计算资源是不同位置。项目目录和运行输出应归属到实际执行程序的机器。

04 一个具体例子:同一个脚本,在两台机器上分别验收

第01篇在Windows生成了图片;现在在Linux执行同一个check_image_io.py。正常结果仍应为64×64 RGB图片,像素读写一致,但输出绝对路径会变成远程路径。

再比较:

bash 复制代码
python -c "import sys, socket; print(socket.gethostname()); print(sys.executable)"

这能把"运行成功"变成更明确的描述:**在什么主机、用哪个解释器、从什么项目运行,结果写到哪里。**第03篇安装PyTorch后,再追加CPU与已分配GPU的训练验证。

05 常见问题与自测

问题1:没有sudo权限,能建立Python环境吗?

通常可以在有写权限的用户目录安装环境管理器。系统驱动和系统依赖另由管理员或平台维护。

问题2:SSH能登录,为什么看不到GPU?

可能当前是登录节点、未分配GPU或设备受隔离,也可能是驱动问题,需要按平台架构逐项判断。

问题3:把Conda环境文件夹复制过去能省安装吗?

跨Windows/Linux不能这样迁移。即使同系统,也需要考虑前缀路径和二进制兼容,应使用适当的环境重建或打包流程。

问题4:使用tmux后是否就不需要保存模型?

仍然需要。会话持续与训练状态可恢复是两件事,重启、超时或进程退出仍可能中断任务。

问题5:一段命令到底应该在本地还是远程执行?

看它操作谁的文件、环境和设备。连接命令从本地发起,远程依赖安装与训练在目标机器执行。

06 本篇回顾与下一步

服务器环境搭建完成后,应能回答主机、账号、环境、目录、设备和日志六个问题。保持这些信息明确,后面的远程调试和训练排错会简单很多。

中文 常用英文
远程登录 SSH login
登录节点/计算节点 Login node / Compute node
用户目录 Home directory
会话分离 Session detaching
日志重定向 Log redirection

下一篇集中处理CUDA与PyTorch:选择兼容构建,并用一次真实的前向、反向与模型保存验证运行链路。

参考与延伸阅读

相关推荐
开开心心就好2 小时前
发票信息录入太麻烦?离线工具一键转表格
运维·服务器·前端·pdf·ocr·maven·intellij-idea
AI人工智能+2 小时前
机动车登记证识别技术通过“图像矫正+版面分析+高精度OCR+业务校验”四步流水线,实现对“大绿本”的秒级精准识别
人工智能·深度学习·ocr·机动车登记证识别
运维小斌2 小时前
麒麟 V10 部署 OceanBase:故障速查与验收清单
linux·数据库·oceanbase·麒麟
水饺编程2 小时前
第2章:Linux 基础,在 root 中创建用户账号
linux·c语言·汇编·1024程序员节
ITxiaobing20232 小时前
IP 定位服务怎么选:没有“公认第一”,只有场景匹配
服务器·网络协议·tcp/ip
山东孙燕姿2 小时前
维修工单的转派与协同:两个人一起上
大数据·运维·服务器·网络·人工智能
LMT流氓兔2 小时前
第五单元——第9课:防止同一次操作重复执行
java·服务器·数据库·算法·ai·langchain
叼烟扛炮2 小时前
Linux 学习笔记(四):文件检索与管道重定向
linux·笔记·学习
具身AGI2 小时前
三维动态只当训练信号,不进推理
人工智能·深度学习·计算机视觉