实验室服务器怎么用?手把手教你 Linux 远程部署深度学习环境(Anaconda+PyTorch+GPU)
如果你刚拿到一台实验室的 Linux 服务器,想在上面跑深度学习代码,但不知道从何下手,这篇文章就是为你准备的。很多新手会卡在第一步:怎么连上服务器、怎么装环境、怎么确认 GPU 能用。我见过太多人折腾半天,最后发现是路径、权限或者驱动版本的问题。这篇文章会按实际落地的顺序,带你走一遍从零到能跑 PyTorch GPU 代码的全过程。核心就三件事: 远程连接、环境隔离、GPU 验证 。整个过程不依赖图形界面,全部在命令行完成,适合任何配置的 Linux 服务器。
1. 先搞定远程连接和基础操作环境
在开始装任何软件之前,你得先能稳定地登录服务器,并且熟悉最基本的命令行操作。这一步没做好,后面所有步骤都可能因为网络断开、权限不足或者操作失误而前功尽弃。
1.1 选择并配置远程连接工具
对于 Linux 服务器,最常用、最稳定的远程连接方式是 SSH(Secure Shell)。你不需要在服务器上安装额外软件,只要服务器开启了 SSH 服务(绝大多数实验室服务器默认都开启),你就可以从自己的电脑连过去。
Windows 用户 :我强烈推荐使用 MobaXterm 或 PuTTY 。MobaXterm 功能更全,自带 SFTP 文件传输和 X11 转发(如果需要图形界面),对新手更友好。PuTTY 更轻量。这里以 MobaXterm 为例。
- 下载安装 MobaXterm。
- 打开后,点击 “Session” -> “SSH”。
- 在 “Remote host” 栏输入服务器的 IP 地址(找管理员或师兄师姐要)。
- “Specify username” 输入你的用户名。
- 点击 “OK” 连接,首次连接会提示保存主机密钥,点 “Accept”。
- 输入密码(输入时不会显示字符),回车即可登录。
macOS/Linux 用户 :直接打开终端(Terminal),使用 ssh 命令。
ssh your_username@server_ip_address
输入密码即可登录。
注意 :连接成功后,你的命令行提示符会变化,表示你现在操作的是远程服务器,而不是自己的本地电脑。所有后续命令都在这个远程会话中执行。
1.2 掌握几个保命的 Linux 基础命令
登录后,你面对的是一个纯黑屏的命令行界面。别慌,记住下面几个最基础、最常用的命令,能解决 80% 的日常操作和问题排查。
-
pwd:打印当前工作目录。让你知道自己在哪里。 -
ls:列出当前目录下的文件和文件夹。ls -la可以查看详细信息,包括隐藏文件。 -
cd:切换目录。cd ~回到家目录,cd ..返回上一级。 -
mkdir:创建新目录。例如mkdir my_project。 -
rm:删除。 极其危险!rm -r my_folder会递归删除文件夹及其所有内容。删除前务必确认路径。 -
cp/mv:复制和移动文件。cp source_file destination。 -
nano/vim:文本编辑器。nano file.txt更简单,vim功能强大但需要学习。先用nano即可。 -
cat/head/tail:查看文件内容。cat file.txt显示全部,head -n 10 file.txt看前10行,tail -f log.txt实时查看日志(排查错误时非常有用)。 -
chmod:修改文件权限。如果遇到 “Permission denied”,可能需要这个命令。例如chmod +x script.sh给脚本添加执行权限。 -
wget/curl:从网络下载文件。wget https://example.com/file.tar.gz。 -
tar/unzip:解压文件。.tar.gz用tar -xzvf file.tar.gz,.zip用unzip file.zip。 -
ps/top/htop:查看进程和系统资源。htop更直观,但可能需要安装。 -
df -h:查看磁盘空间使用情况。安装大型软件前先看看空间够不够。 -
nvidia-smi: GPU 用户专属 。查看 GPU 状态、驱动版本、显存占用。装完驱动后第一个要试的命令。
实操建议 :登录后,先运行 pwd 和 ls ,熟悉一下自己的家目录。然后尝试用 mkdir 创建一个测试目录,再 cd 进去。这些操作是后续所有步骤的基础。
2. 安装 Anaconda:创建独立的 Python 环境
为什么一定要用 Anaconda(或 Miniconda)?因为实验室服务器通常是多人共用,每个人、每个项目需要的 Python 版本和库版本可能完全不同。直接装在系统 Python 里会导致版本冲突,俗称“把环境搞炸了”。Conda 可以为你创建完全隔离的虚拟环境,环境之间互不干扰,这是团队协作和项目复现的基石。
2.1 下载与安装 Anaconda
- 确定安装位置 :通常安装在你的家目录下。先
cd ~回到家目录。 - 获取安装脚本 :从清华大学开源软件镜像站下载,速度更快。
(版本号可能会更新,可以去镜像站页面查看最新版链接)。wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh - 运行安装脚本 :
bash Anaconda3-2024.02-1-Linux-x86_64.sh - 跟随提示安装 :
- 一直按回车阅读许可协议,输入
yes同意。 - 确认安装路径,默认是
~/anaconda3,直接回车即可。 - 最重要的一步:安装程序会问 “Do you wish the installer to initialize Anaconda3 by running conda init?”, 一定要输入
yes。这会将 Conda 添加到你的 shell 配置文件中,让你每次登录都能直接使用conda命令。
- 一直按回车阅读许可协议,输入
- 激活配置 :安装完成后,关闭当前终端,重新 SSH 登录服务器。或者执行
source ~/.bashrc(如果你用的是 Bash)来重新加载配置。此时,命令行提示符前会出现(base),表示你正处于 Conda 的 base 环境中。
2.2 Conda 基础命令与镜像配置
安装成功后,先配置国内镜像源,后续安装包会快很多。
# 配置 Conda 的 channels 为清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
# 配置 Pip 的镜像源(备用,有些包可能仍需 pip 安装)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
现在,掌握几个核心的 Conda 命令:
- 创建环境 :
conda create -n your_env_name python=3.9-
-n指定环境名,例如pytorch_gpu。 -
python=3.9指定 Python 版本,根据项目需要选择。
-
- 激活环境 :
conda activate your_env_name- 激活后,提示符会变成
(your_env_name)。之后所有pip或conda install操作都只影响这个环境。
- 激活后,提示符会变成
- 退出环境 :
conda deactivate - 列出所有环境 :
conda env list - 删除环境 :
conda remove -n your_env_name --all(谨慎操作) - 在环境中安装包 :
-
conda install package_name(优先使用 Conda 安装) -
pip install package_name(如果 Conda 找不到,再用 pip)
-
避坑点 :永远不要在 (base) 环境里安装项目专用的包。为每个项目创建一个独立的环境。例如,马上我们就要为 PyTorch 创建一个专门的环境。
3. 在独立环境中安装 PyTorch(GPU 版)
这是最关键的一步。目标是在上一步创建的环境里,安装支持 GPU 的 PyTorch,并确保它能正确识别和调用服务器的 NVIDIA GPU。
3.1 创建并激活 PyTorch 环境
# 创建一个名为 pytorch_gpu 的环境,使用 Python 3.9
conda create -n pytorch_gpu python=3.9
# 激活这个环境
conda activate pytorch_gpu
激活后,你的命令行前缀应该是 (pytorch_gpu) 。
3.2 查询服务器 CUDA 版本
PyTorch 版本需要和服务器安装的 CUDA 工具包版本匹配。首先查询服务器 CUDA 版本。
nvcc --version
或者
cat /usr/local/cuda/version.txt
如果这两个命令都找不到,可以运行 nvidia-smi ,在输出结果的右上角,通常会显示一个 “CUDA Version”,例如 “12.4”。 注意 : nvidia-smi 显示的 CUDA 版本是驱动支持的最高版本,实际安装的 CUDA 工具包版本可能略低。以 nvcc --version 的输出为准。假设我们查到的版本是 CUDA 11.8 。
3.3 前往 PyTorch 官网获取安装命令
不要凭记忆输入命令,因为 PyTorch 版本、CUDA 版本和安装命令更新频繁。打开浏览器,访问 PyTorch 官网 。
在官网页面,你会看到一个配置选择器:
- PyTorch Build :选择 Stable(稳定版)。
- Your OS :选择 Linux。
- Package :选择 Conda(这样可以用我们刚配置的清华源加速)。
- Language :选择 Python。
- Compute Platform :根据刚才查到的 CUDA 版本选择,例如
CUDA 11.8。 如果服务器没有 GPU 或你暂时不确定,可以先选 CPU 版本跑通流程,但深度学习强烈建议用 GPU。
选择完成后,页面会生成一行安装命令。例如,对于 CUDA 11.8,它可能显示:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
3.4 执行安装并移除官方源
直接运行官网命令可能会很慢,因为它会从 -c pytorch -c nvidia 指定的官方频道下载。我们可以利用之前配置的清华镜像,并移除 -c 参数,让 Conda 优先从镜像站查找。
更稳妥的做法是,运行官网命令,但 Conda 会自动从我们已配置的镜像通道中寻找匹配的包,通常也能成功。如果速度慢或找不到,可以尝试只安装核心的 pytorch 和 torchvision , torchaudio 按需安装。
# 尝试使用此命令,conda 会从已配置的镜像中解析依赖
conda install pytorch torchvision torchaudio pytorch-cuda=11.8
安装过程需要确认,输入 y 回车。这可能会花费一些时间,取决于网速和包的大小。
3.5 验证 PyTorch 及 GPU 是否可用
安装完成后,不要急着写复杂代码。先进入 Python 交互环境,运行几行简单的验证命令。
# 确保还在 (pytorch_gpu) 环境下
python
进入 Python 后,逐行输入以下命令:
import torch
print(torch.__version__) # 打印 PyTorch 版本
print(torch.cuda.is_available()) # 最关键的一行,输出应为 True
print(torch.cuda.device_count()) # 查看 GPU 数量
print(torch.cuda.get_device_name(0)) # 查看第一块 GPU 的名称
如果 torch.cuda.is_available() 返回 True ,那么恭喜你,PyTorch GPU 环境配置成功!你可以看到 GPU 的型号(如 Tesla V100, RTX 4090等)。
如果返回 False,按以下顺序排查 :
- 确认环境 :确保你是在
(pytorch_gpu)环境下运行的 Python。可以用conda activate pytorch_gpu再次激活。 - 确认安装 :在环境中运行
conda list | grep torch,查看安装的 PyTorch 包名是否包含cudatoolkit或pytorch-cuda。 - 验证 CUDA :在终端(不在 Python 里)运行
nvidia-smi,确认驱动正常,GPU 信息能显示。 - 版本匹配 :确认
conda list中的cudatoolkit版本与nvcc --version查到的版本是否大致兼容(主版本号相同即可,如 11.8 和 11.7 通常兼容)。有时 Conda 会安装一个独立的 CUDA 工具包,与系统的不冲突,这是正常现象。 - 重新安装 :如果以上都不行,尝试严格按照 PyTorch 官网生成的命令(包含
-c pytorch)安装一次,虽然慢,但能确保渠道正确。
4. 部署你的第一个深度学习项目
环境准备好了,接下来就是把你的代码放到服务器上,并运行起来。这里涉及到文件传输、依赖安装和任务运行。
4.1 将本地代码和数据传输到服务器
你不能在服务器上直接写代码,通常是在本地开发,然后上传。有几种方式:
1. 使用 MobaXterm/SecureFX 等工具的图形化 SFTP : 在 MobaXterm 左侧边栏,你会看到一个图形化的文件浏览器,显示的是服务器的文件系统。你可以直接从本地电脑拖拽文件或文件夹到服务器目录,非常直观。
2. 使用命令行 scp 命令(macOS/Linux 或 Windows WSL) :
# 将本地文件上传到服务器家目录
scp /path/to/your/local_file.py your_username@server_ip:~
# 将本地整个文件夹上传到服务器
scp -r /path/to/your/local_project your_username@server_ip:~/remote_project
3. 使用 rsync (更高效,支持增量同步) :
rsync -avz /path/to/your/local_project/ your_username@server_ip:~/remote_project/
建议 :在服务器你的家目录下,建立一个清晰的项目文件夹结构,例如:
~/projects/
├── my_dl_project/
│ ├── src/ # 源代码
│ ├── data/ # 数据(如果是小样本)
│ ├── logs/ # 训练日志
│ └── checkpoints/ # 模型保存点
4.2 安装项目特定依赖
你的项目很可能除了 PyTorch 还需要其他库,比如 numpy , pandas , opencv-python , tqdm 等。
- 在本地项目根目录,通常有一个
requirements.txt文件。将其上传到服务器项目目录。 - 在服务器上, 确保已经激活了你的 Conda 环境 (例如
conda activate pytorch_gpu)。 - 使用 pip 安装所有依赖:
cd ~/projects/my_dl_project pip install -r requirements.txt注意 :如果
requirements.txt里包含torch,最好把它注释掉,因为我们已经在 Conda 环境里安装了特定 CUDA 版本的 PyTorch,用 pip 重装可能会覆盖或引起冲突。
4.3 运行你的代码并管理长时间任务
在服务器上运行 Python 脚本和本地一样:
python src/train.py
但是,深度学习训练任务动辄数小时甚至数天,你不可能一直开着 SSH 窗口。一旦网络波动或电脑休眠,SSH 断开,正在运行的任务就会被终止。 必须使用任务守护工具 。
1. 使用 nohup (最简单) :
nohup python src/train.py > train.log 2>&1 &
-
nohup:让命令忽略挂断信号(SSH断开)。 -
> train.log:将标准输出重定向到train.log文件。 -
2>&1:将标准错误也重定向到标准输出,即一起写入日志文件。 -
&:在后台运行。 运行后,会返回一个进程 ID(PID)。你可以用tail -f train.log实时查看日志,用kill PID来终止任务。
2. 使用 tmux 或 screen (更强大,推荐) : 这两个工具可以创建虚拟终端会话,即使 SSH 断开,会话也会在服务器后台继续运行,之后可以重新连接(attach)回来。
- 安装 :
sudo apt install tmux(Ubuntu/Debian)或sudo yum install tmux(CentOS/Rocky)。 - 基本使用 :
tmux new -s session_name # 创建一个名为 session_name 的新会话 # 此时进入 tmux 会话,在这里运行你的任务,例如 python train.py # 按 Ctrl+b,然后按 d,可以脱离(detach)当前会话,回到原始终端。任务在后台继续。 tmux ls # 列出所有会话 tmux attach -t session_name # 重新连接到指定会话 tmux kill-session -t session_name # 终止指定会话screen命令类似,但tmux功能更现代,分屏等操作更方便。
4.4 监控资源使用情况
任务跑起来后,你需要知道它是否在正常工作,以及资源占用是否合理。
- 查看 GPU 状态 :
nvidia-smi。关注 “GPU-Util”(GPU 利用率,理想情况应接近 100%)和 “Memory-Usage”(显存占用)。如果显存满了但利用率很低,可能是数据加载(DataLoader)的瓶颈在 CPU 或磁盘 I/O。 - 查看进程 :
htop。这是一个交互式的进程查看器,可以清晰看到 CPU、内存占用,以及哪个进程是你的 Python 训练任务。如果htop未安装,用sudo apt install htop安装。 - 查看你的进程 :
ps aux | grep python或ps aux | grep your_username,可以找到你运行的所有 Python 进程及其 PID。
5. 环境配置与任务管理中的常见问题排查
即使按照步骤操作,也可能会遇到各种问题。下面是一个从外到内的排查清单。
5.1 连接与权限问题
- SSH 连接被拒绝 :检查 IP 地址、用户名、密码是否正确;联系管理员确认 SSH 服务是否开启,以及你的账号是否被禁用。
- Permission denied :当你尝试安装软件到系统目录(如
/usr/local)或写入某些目录时出现。 永远不要使用sudo来安装 Conda 或 Pip 包到你的个人环境 。正确的做法是安装在家目录下,或者使用pip install --user package_name。如果需要系统级安装,请联系管理员。 - 磁盘空间不足 :使用
df -h查看磁盘使用情况。Conda 环境和深度学习数据集可能会占用大量空间。清理旧的 Conda 环境 (conda remove -n old_env --all),或将数据存放在更大的数据盘(通常挂载在/data或/mnt下)。
5.2 Conda 与包管理问题
- Conda 命令找不到 :安装时没有同意初始化 (
conda init)。手动执行source ~/anaconda3/bin/activate然后conda init,或者将export PATH="~/anaconda3/bin:$PATH"添加到~/.bashrc文件末尾,然后source ~/.bashrc。 - 创建环境失败 :可能是网络问题或镜像源暂时不可用。尝试换一个 Conda 镜像源(如中科大源),或者指定更低的 Python 版本。
- 安装 PyTorch 时解决环境失败 :可能是依赖冲突。尝试创建一个“干净”的环境,只安装 PyTorch:
conda create -n clean_torch python=3.9 pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia。或者,使用 Pip 安装:pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118(CUDA 11.8为例)。
5.3 PyTorch GPU 识别问题
这是最高频的问题区。
-
torch.cuda.is_available()返回 False :- 环境确认 :绝对确保你在正确的 Conda 环境下运行 Python。这是最常见的原因。
- 驱动检查 :
nvidia-smi能正常运行吗?如果不能,说明 NVIDIA 驱动未安装或损坏,需要联系管理员。 - CUDA 匹配 :运行
python -c "import torch; print(torch.version.cuda)",查看 PyTorch 编译所用的 CUDA 版本。与nvcc --version或nvidia-smi显示的版本是否兼容?主版本号应一致。如果不一致,需要安装对应版本的 PyTorch。 - Conda 的 CUDA :有时 Conda 安装的
cudatoolkit是一个独立版本,与系统的/usr/local/cuda无关。只要torch.cuda.is_available()为 True 即可,不必强求系统 CUDA 版本一致。
- GPU 显存已占用,但我的程序报错显存不足 :有其他进程占用了显存。用
nvidia-smi查看是哪个进程(PID 和用户名),如果是你自己的其他任务,需要先停止;如果是别人的,可能需要协商使用其他空闲 GPU。你可以通过设置环境变量CUDA_VISIBLE_DEVICES来指定使用哪块 GPU,例如CUDA_VISIBLE_DEVICES=0 python train.py使用第一块 GPU。
5.4 运行任务时的典型问题
- 程序刚开始就卡住不动 :可能是数据加载的问题。检查数据路径是否正确,数据集是否成功解压且可读。在代码中尝试先加载一个小批次(batch)的数据,看是否能成功。
- 训练过程中程序崩溃,无错误信息 :很可能是显存溢出(Out Of Memory, OOM)。尝试减小
batch_size。在代码开头设置torch.cuda.empty_cache()清理缓存。使用nvidia-smi监控显存占用变化。 - 日志文件
train.log增长过快或没内容 :nohup重定向了所有输出。确保你的代码中使用了日志库(如logging)或适当控制了print语句的频率。对于没内容,检查程序是否真的开始执行,或者输出是否被缓冲了(可以添加flush=True参数)。 -
tmux会话中无法使用中文或某些快捷键 :检查服务器的语言环境设置 (locale)。对于深度学习训练,通常英文环境即可。快捷键冲突可以学习tmux的配置修改。
6. 进阶配置与生产化建议
当你能成功运行单个训练脚本后,可以考虑以下优化,让工作流更高效、更稳定。
6.1 配置 SSH 免密登录
每次登录都要输密码很麻烦。可以配置 SSH 公钥认证。
- 在 本地电脑 生成密钥对:
ssh-keygen -t rsa(一直回车)。 - 将公钥上传到服务器:
ssh-copy-id your_username@server_ip(需要输入一次密码)。 - 之后再次 SSH 登录,就不再需要密码了。
6.2 使用版本控制(Git)
在服务器上也使用 Git 来管理代码版本。
cd ~/projects/my_dl_project
git init
git remote add origin https://github.com/yourname/yourrepo.git
# 从远程拉取代码,或提交本地更改
建议将大型数据文件和模型检查点添加到 .gitignore 。
6.3 编写启动脚本
将复杂的启动命令、环境变量设置写成一个 Shell 脚本,例如 run.sh :
#!/bin/bash
# 激活环境
source ~/anaconda3/bin/activate pytorch_gpu
# 设置 GPU
export CUDA_VISIBLE_DEVICES=0
# 运行训练脚本,并将日志输出到带时间戳的文件
python src/train.py --config configs/my_config.yaml 2>&1 | tee logs/train_$(date +%Y%m%d_%H%M%S).log
给脚本执行权限: chmod +x run.sh 。然后就可以用 ./run.sh 或 nohup ./run.sh & 来启动任务。
6.4 监控与自动化
- 使用
watch命令监控 :watch -n 1 nvidia-smi可以每秒刷新一次 GPU 状态。 - 使用 TensorBoard 或 WandB :在代码中集成可视化工具,远程在本地浏览器查看训练曲线、图像结果等。
- 任务队列 :如果服务器用户很多,可以考虑使用简单的任务队列系统,如使用
tmux脚本管理多个会话,或使用更专业的工具如Slurm(如果集群已安装)。
实验室服务器的核心价值在于其强大的计算资源。成功部署环境只是第一步,更重要的是学会高效、稳定地利用它。我的建议是: 先花时间把单机单卡的单任务流程彻底跑通,理解从连接、环境、传输到运行、监控、排错的每一个环节。 这比一上来就追求分布式训练或多机并行要实际得多。当基础流程稳固后,再去探索更复杂的配置和优化,你会发现自己对深度学习工程落地的理解会上一个台阶。

5263

被折叠的 条评论
为什么被折叠?



