☰
阿里云GPU服务器按量计费Python模型训练全流程
2026/10/17 8:28:29 网站建设 项目流程

适用环境:Windows 本机、阿里云 Ubuntu GPU 服务器、Python 模型训练项目。

1. 准备训练项目

在本机整理以下文件:

D:\cloud_training\ ├── project.zip 训练代码和配置 └── dataset.zip 训练数据

代码包中保留:

  • 训练入口程序。

  • 模型和数据加载代码。

  • 训练配置文件。

  • requirements.txt、environment.yml 或项目指定的环境文件。

  • 数据划分、标签映射等必要文件。

  • 项目要求的预训练权重。

不打包本机虚拟环境、缓存、无关数据和历史训练输出。

阅读项目安装说明,确认 Python 版本、训练框架版本、显存要求、启动命令和检查点保存方式。

本文中的PUBLIC_IP替换为服务器公网 IP。路径、环境名称按实际情况替换。

训练启动参数由项目决定。本文出现的 train.py、--config、--resume 均为示例,不是所有项目通用的接口。

2. 选择实例

进入阿里云控制台 → 云服务器 ECS → 实例 → 创建实例。

配置项选择方法
付费方式选按量付费
地域、可用区按 GPU 库存、数据所在地和连接条件选择
GPU按模型显存需求、精度模式和训练耗时选择
GPU 数量单卡项目先选一张;多卡需项目支持分布式训练
CPU、内存满足数据解码、增强和加载需要
系统镜像项目支持的 Ubuntu 版本,优先预装 NVIDIA 驱动镜像
系统盘用于系统、环境、代码和缓存
数据盘按数据集、检查点和日志容量配置
公网 IPv4 地址使用本文公网 SSH 流程时勾选
带宽按数据上传和结果下载需求配置
登录凭证密钥对或密码

先用小规模数据测试显存和训练速度,再决定正式实例规格。显存容量大不代表训练速度一定更快。

计算磁盘需求时同时包含:原始压缩包、解压数据、预处理缓存、环境、多个检查点和输出结果。

核对 GPU、云盘、公网流量等费用后创建实例。

3. 配置安全组

允许本地电脑通过 SSH(Secure Shell,安全外壳协议)连接服务器。

字段设置
方向入方向
策略允许
协议TCP
目的端口22 或 22/22
来源本机网络公网 IP/32

创建页面提供“SSH 远程连接 Linux 实例”时,勾选并将来源设为“我的 IP”。

更换本地网络后,检查是否需要更新来源 IP。命令行训练不需要开放网页或远程桌面端口。

4. 连接服务器

在 Windows PowerShell 执行:

ssh root@PUBLIC_IP

首次连接核对主机指纹,确认后输入 yes,再输入密码。输入密码时不显示字符。

使用密钥时:

ssh -i "C:\Keys\training.pem" root@PUBLIC_IP

登录用户名以实例设置为准。本文用 root 演示;其他账号需要使用有写权限的工作目录,系统安装命令可能需要 sudo。

保持两个窗口:

窗口用途
Windows 本机 PowerShell上传、下载、建立 SSH 连接
已登录的服务器终端安装环境、运行训练、监控

5. 检查服务器

在服务器执行:

nvidia-smi free -h df -h lsblk -f

确认 GPU 型号和数量、系统内存、磁盘容量及挂载位置。

GPU 检查失败时,先按镜像说明处理 NVIDIA 驱动,不继续安装训练环境。

新增数据盘先确认设备和文件系统,再按阿里云文档挂载。已有数据的磁盘不要格式化。

安装常用工具:

sudo apt-get update sudo apt-get install -y git wget unzip tmux

按项目需要另外安装视频、图像、编译等系统依赖。

6. 建立工作目录

本文统一使用/root/work。使用数据盘时,将工作目录改为实际挂载点下的目录,不要假定任意文件夹自动位于数据盘上。

mkdir -p /root/work/project /root/work/data /root/work/uploads /root/work/runs /root/work/pretrained

目录用途:

/root/work/ ├── project/ 代码和配置 ├── data/ 数据集 ├── uploads/ 上传的压缩包 ├── pretrained/ 预训练权重 └── runs/ 每次训练的日志、检查点和结果

7. 上传下载数据和代码

本地

在 Windows PowerShell 执行:

scp "D:\cloud_training\project.zip" root@PUBLIC_IP:/root/work/uploads/ scp "D:\cloud_training\dataset.zip" root@PUBLIC_IP:/root/work/uploads/

如果使用密钥,在 scp 后加上:

-i "C:\Keys\training.pem"

在服务器检查压缩包目录:

unzip -l /root/work/uploads/project.zip unzip -l /root/work/uploads/dataset.zip

解压:

unzip /root/work/uploads/project.zip -d /root/work/project unzip /root/work/uploads/dataset.zip -d /root/work/data ls /root/work/project ls /root/work/data

如果压缩包自带顶层文件夹,后续路径应包含该层,不要误用未包含代码的父目录。

大量数据或反复传输时,可使用阿里云 OSS(Object Storage Service,对象存储服务)配合 ossutil。按官方文档配置最小权限凭证,不把访问密钥写进训练代码或发到群里。

需要校验传输完整性时,对同一个文件分别计算 SHA256:

Windows:

Get-FileHash "D:\cloud_training\dataset.zip" -Algorithm SHA256

服务器:

sha256sum /root/work/uploads/dataset.zip

确认两端值一致。

OSS

参考:

  • ossutil 2.0 安装与配置

  • RAM AccessKey 说明(本流程使用实例角色,无需创建长期密钥)

  • ossfs 2.0 配置(另一种挂载方案)

现在建立了一个RAM ECS角色做OSS授权,这样AccessKey由系统生成更加安全。官方文档里有说明怎么用,这里做简单流程摘要。

完成节点与实例角色认证

需先在ECS控制台进行ram授权:ECSExperimentMachine

ECSExperimentMachine 为本文档参考ECS RAM授权角色,若有需要,替换成自己的。

ecs需与oss在同一区域,用内网Endpoint,流量免费。

这里有两种访问方式

  1. ossutil,每次文件需要先下载到ecs再进行操作

  2. ossfs,挂载oss为本地文件夹,每次调用不需要输入oss路径,挂在后: ~/oss/

ossutil

先进行ossutil下载,这里以x86-linux 为例

#下载并安装 ossutil,/tem只放安装包,程序复制到/usr/local/bin/ossutil 可任意目录调用 mkdir -p ~/tools/ossutil cd ~/tools/ossutil curl -fL -o ossutil.zip \ https://gosspublic.alicdn.com/ossutil/v2/2.4.0/ossutil-2.4.0-linux-amd64.zip unzip -o ossutil.zip sudo install -m 755 \ ossutil-2.4.0-linux-amd64/ossutil \ /usr/local/bin/ossutil #检查是否可运行 ossutil --help

首次配置可直接运行下面整段。这会覆盖已有的同名配置文件;如果已有其他用途的配置,先用cp ~/.ossutilconfig ~/.ossutilconfig.backup备份。

cat > ~/.ossutilconfig <<'EOF' [default] mode = EcsRamRole region = cn-shanghai endpoint = https://oss-cn-shanghai-internal.aliyuncs.com EOF

cat配合>将两行 EOF 之间的文字写入文件,EOF 本身不会写入。该配置不包含长期密钥。当前工具无需在命令中传角色名称,会尝试从实例获取角色凭证。

验证配置生效:

ossutil ls oss://jnmedtech-original-data1/
Ossutil 常用代码归纳

以下为常用命令归纳,路径中jnmedtech-original-data1为bucket名称,需要替换为列举得到的真实对象路径。ossutil的语法与linux相近。

查看 OSS 文件
# 查看 Bucket 下的对象 ossutil ls oss://jnmedtech-original-data1/ # 查看指定日期前缀下的对象 ossutil ls oss://jnmedtech-original-data1/20260617/

OSS 的“目录”本质是对象名称的前缀。无需扁平化,保留日期/session 层级即可。文件路径区分大小写。

下载单个文件到 ECS
mkdir -p ~/data/oss-test ossutil cp \ "oss://jnmedtech-original-data1/20260617/实际文件名" \ ~/data/oss-test/ ls -lh ~/data/oss-test/

顺序为ossutil cp 源路径 目标路径。源文件仍留在 OSS,ECS 得到一份副本。ls -lh能确认文件存在及大小,不等于完整性校验。

下载一个 session 的全部文件
mkdir -p ~/data/20260617/session01 ossutil cp -r \ oss://jnmedtech-original-data1/20260617/session01/ \ ~/data/20260617/session01/

-r表示递归处理该前缀下的文件和子目录;保留内部相对层级。先选一个小 session 检查下载后的目录结构,再扩展批量任务。下载前可用df -h ~/data检查可用磁盘空间。

上传单个文件或结果目录

上传不需要预先在bucket中建立文件夹,若没有会自动创建

# 当前工作目录中的单个结果文件 ossutil cp ./metrics.json \ oss://jnmedtech-original-data1/ecs-test/run01/metrics.json # 当前工作目录中的整个结果目录 ossutil cp -r ./results/run01/ \ oss://jnmedtech-original-data1/ecs-test/run01/
ossfs

进行下载安装

wget https://gosspublic.alicdn.com/ossfs/ossfs2_2.0.9_linux_x86_64.deb sudo dpkg -i ossfs2_2.0.9_linux_x86_64.deb ossfs2 --version

建立ossfs配置文件

sudo nano /etc/ossfs2.conf

这里假设

Bucket = jnmedtech-original-data1 Region = 上海 RAM Role = ECSExperimentMachine

写

--oss_endpoint=https://oss-cn-shanghai-internal.aliyuncs.com --oss_bucket=jnmedtech-original-data1 --ram_role=ECSExperimentMachine

若有多个Bucket需要挂载,每个Bucket都需要写一遍配置再挂载

保存nano

Ctrl + O Enter Ctrl + X

创立挂载目录

mkdir -p ~/oss

挂载Bucket

格式是 ossfs2 mount <挂载目录> -c <配置文件>

sudo ossfs2 mount ~/oss -c /etc/ossfs2.conf

访问

ls ~/oss

8. 创建训练环境

优先使用项目提供的环境文件和安装说明。不同项目使用独立环境,不在一个环境中混装多个项目要求的训练框架。

未安装 Conda 时,在服务器执行:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 source /opt/miniconda3/etc/profile.d/conda.sh

如果/opt/miniconda3已存在,直接加载,不重复安装。

项目提供 environment.yml

cd /root/work/project conda env create -n trainenv -f environment.yml conda activate trainenv

项目只提供 requirements.txt

按项目指定的 Python 版本创建环境。下面以 Python 3.11 为例,执行前按项目要求替换:

conda create -n trainenv --override-channels -c conda-forge python=3.11 pip -y conda activate trainenv cd /root/work/project python -m pip install -r requirements.txt

如果项目要求先安装训练框架,再安装其他依赖,按该顺序执行。两种环境创建方式选择一种,不重复创建同名环境。

安装训练框架

镜像有 CUDA,不代表环境中已经有 PyTorch 或 TensorFlow。

  • PyTorch:按项目版本要求和官方安装页面选择 GPU 包。

  • TensorFlow:按官方 GPU 安装要求选择兼容环境。

  • 项目要求 Docker 时:使用项目指定镜像,并确认 NVIDIA 容器支持正常。

不统一指定 torch、CUDA 或 Python 的版本号。系统驱动必须支持所选框架的运行库;不要只根据镜像显示的 CUDA 版本机械选择包

普通 Python 依赖下载慢时,可使用清华 PyPI 镜像:

python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

框架专用下载索引按官方命令保留;普通镜像不一定提供相同的 GPU 构建。

安装完成后:

python -m pip check

训练过程中不升级或替换环境中的软件包。

9. 验证 GPU 计算

PyTorch 项目执行:

python -c "import torch; print('torch:', torch.__version__); print('CUDA:', torch.version.cuda); print('GPU available:', torch.cuda.is_available()); print('GPU:', torch.cuda.get_device_name(0)); x=torch.randn(128,128,device='cuda'); print('GPU test:', (x@x).mean().item())"

确认 GPU available 为 True,显示正确显卡,并输出计算数值。

TensorFlow 项目检查设备发现:

python -c "import tensorflow as tf; print(tf.__version__); print(tf.config.list_physical_devices('GPU'))"

随后用项目的短训练检查实际设备分配。仅能运行 nvidia-smi,不代表训练框架已正确使用 GPU。

10. 修改训练配置

按项目的配置格式修改以下项目:

配置设置内容
数据路径服务器上的实际数据目录
训练、验证、测试划分使用固定划分,避免数据泄漏
标签和类别与模型输出和数据集一致
预训练权重服务器实际文件路径
输出目录每次训练使用独立目录
batch size先用能稳定运行的小批量
epochs 或 steps先短测,再正式训练
学习率及调度按模型和训练配方设置
GPU 数量与实例和启动方式一致
数据加载进程数从较小值起步,再按吞吐调整
检查点保存设置保存频率及保留数量
验证频率设置定期评估
随机种子固定并记录

删除配置中的本机 Windows 路径,改成 Linux 路径。不要使用测试集反复选择训练参数。

建立本次运行目录:

mkdir -p /root/work/runs/exp001

将项目的输出目录配置为该位置。新实验使用 exp002、exp003 等新目录,不覆盖旧实验。

11. 先跑短训练

将配置改成少量训练步骤或一个短训练轮次,执行项目给出的启动命令。

例如,项目支持以下接口时:

cd /root/work/project python -u train.py --config configs/train.yaml

检查:

  1. 数据能正确读取,样本数量和标签符合预期。

  2. 模型使用预期 GPU。

  3. 能完成前向计算、反向传播和优化器更新。

  4. 损失没有持续出现 NaN 或 Inf。

  5. 验证流程能执行。

  6. 检查点实际保存到指定目录。

  7. 能从检查点恢复训练状态。

检查通过后,再恢复正式轮次或步数。

12. 后台启动正式训练

在服务器执行:

tmux new -s training

进入会话后:

source /opt/miniconda3/etc/profile.d/conda.sh conda activate trainenv cd /root/work/project

运行项目训练命令,并保存日志。以下以支持 train.py 和 --config 的项目为例:

set -o pipefail python -u train.py --config configs/train.yaml 2>&1 | tee /root/work/runs/exp001/train.log

tee 会覆盖同名日志;续训时使用新的日志名。训练命令刚退出时,可执行echo $?检查退出码,0 表示命令正常退出,不代表模型质量达标。

离开 tmux:按 Ctrl+B,松开,再按 D。此时可以断开 SSH,任务继续运行。

重新登录后恢复:

tmux attach -t training

查看会话:

tmux ls

会话已存在时先进入查看,不重复启动同一训练。Ctrl+C 会中断程序。tmux 不能让任务跨服务器关机、重启或释放继续运行。

13. 查看训练状态

在另一个服务器连接窗口执行:

watch -n 1 nvidia-smi

按 Ctrl+C 退出监控。

top

按 q 退出。

df -h tail -n 50 /root/work/runs/exp001/train.log

持续查看日志:

tail -f /root/work/runs/exp001/train.log

退出该日志查看窗口不会停止另一个会话中的训练。

重点检查训练速度、损失、验证指标、显存、CPU、系统内存和磁盘余量。显存占用高不等于 GPU 利用率高;瞬时利用率也不能替代实际训练吞吐。

14. 查看 TensorBoard

项目生成 TensorBoard 日志时,在环境中安装并启动 TensorBoard。logdir 指向实际事件文件所在目录:

tensorboard --logdir /root/work/runs --host 127.0.0.1 --port 6006

在 Windows 另开 PowerShell,建立转发:

ssh -N -L 6006:127.0.0.1:6006 root@PUBLIC_IP

保持该窗口运行,本机浏览器打开:

http://localhost:6006

使用这种方式不需要在安全组开放 6006。项目没有生成 TensorBoard 事件文件时,页面不会出现训练曲线。

15. 调整训练速度

每次只改一类设置,用固定的训练步数比较,记录吞吐、显存和验证指标。

现象调整方向
GPU 经常空闲、数据加载慢检查存储、解码、增强和数据加载进程数
CPU 或系统内存吃紧减少不必要的数据加载进程和缓存
显存不足降低 batch,按项目支持使用混合精度或梯度检查点
GPU 持续繁忙比较混合精度、模型配置或更快显卡的实际收益
检查点占满磁盘调整保存频率和保留策略,先备份需要的版本

训练时改变 batch 会改变优化过程。使用梯度累积或调整学习率时,应遵循项目训练配方,不只比较速度。

混合精度和梯度检查点必须由项目支持;修改后检查数值稳定性及验证指标。缩小输入或改变采样方式也可能影响模型效果。

多卡不会自动加速单卡脚本。只有项目支持分布式训练时,才使用其指定的 torchrun 或其他启动方式,并核对总 batch、数据采样和检查点保存规则。

16. 中断和恢复训练

正式训练前,确认检查点包含恢复所需的模型、优化器、学习率调度器和训练步数等状态。

中断前尽量等待最近一次检查点保存完成。文件名包含 best 或 last,不代表它一定保存了完整训练状态。

恢复时使用项目支持的命令。例如,项目支持 --resume 时:

python -u train.py --config configs/train.yaml --resume /root/work/runs/exp001/checkpoints/last.pt

路径和参数以项目为准。检查恢复日志,确认轮次、步数和学习率从正确位置继续,而不是只加载权重重新开始。

恢复时使用新日志名,例如 resume01.log,避免覆盖原始日志。

17. 保存运行信息

在当前训练环境执行:

python -m pip freeze > /root/work/runs/exp001/environment.txt python --version > /root/work/runs/exp001/python-version.txt nvidia-smi > /root/work/runs/exp001/gpu-info.txt

代码使用 Git 时,在代码目录执行:

git rev-parse HEAD > /root/work/runs/exp001/code-version.txt git status --short > /root/work/runs/exp001/code-status.txt git diff > /root/work/runs/exp001/code-changes.patch

另外保存实际使用的训练配置、启动命令和数据版本。未跟踪的代码文件不会包含在 git diff 中,需要单独保留。重复执行上述命令会覆盖同名记录。

18. 检查训练结果

训练完成后检查:

  • 日志是否正常结束。

  • 训练步数或轮次是否达到配置要求。

  • 检查点是否完整保存。

  • 验证指标是否符合要求。

  • 最佳权重能否加载并完成一次评估或推理。

  • 需要续训时,最后检查点能否恢复训练状态。

按项目要求运行评估命令。保留最佳权重和用于续训的检查点,不将二者混淆。

19. 下载结果

在 Windows PowerShell 执行:

New-Item -ItemType Directory -Force "D:\training_results" scp -r root@PUBLIC_IP:/root/work/runs/exp001 "D:\training_results"

使用密钥时,在 scp 后添加 -i 和密钥路径。

下载后检查权重、配置、日志和环境记录。重要权重可以用 Get-FileHash 与服务器 sha256sum 对比。

如果只下载部分文件,至少保留实际模型权重、模型配置、类别或标签映射,以及复现所需的代码版本和预处理说明。

20. 停止或释放实例

  1. 确认训练和评估结束。

  2. 下载结果及运行记录。

  3. 检查本机文件完整性和模型可加载性。

  4. 进入阿里云控制台,找到对应实例。

  5. 继续保留时,查看停止实例的计费选项。

  6. 不再使用时,确认备份完成后释放实例。

  7. 检查关联云盘、公网资源、快照和对象存储是否继续计费。

关闭终端、退出 SSH 或离开 tmux 不会停止实例计费。停止实例后,部分资源仍可能收费,以控制台规则为准。

释放实例或删除云盘前完成备份。多人共用服务器时,由管理员分配个人账号和目录,不共享 root 密码、私钥或云账号访问密钥。

21. 常见问题

问题处理
SSH 超时检查公网 IP、实例状态、安全组来源和 TCP 22
Permission denied核对用户名、密码或密钥
Host key verification failed核对主机身份,不关闭指纹检查
Windows SSH 配置权限错误修复配置权限;直接 IP 连接且不依赖配置时,可临时使用 -F NUL
Could not resolve hostname d回到 Windows 本机上传,不在服务器使用 D: 路径
找不到本机文件在资源管理器复制真实路径,保留双引号
找不到数据或标签核对解压层级、路径大小写和数据格式
GPU 框架不可用同时检查驱动、环境和安装的框架构建
显存不足降低 batch,检查其他进程;按项目支持调整精度或梯度检查点
进程被 Killed检查系统内存和系统日志,不仅检查显存
No space left on device检查容量和 inode,处理前备份重要文件
loss 为 NaN 或 Inf检查数据、标签、学习率、数值精度和损失计算
GPU 利用率低检查数据加载、预处理、存储和同步开销
断开连接后任务停止使用 tmux;实例关机仍会终止任务
恢复后从第零轮开始检查是否只加载权重、恢复参数是否正确、检查点是否完整
多卡没有提速检查项目分布式实现、通信开销和数据吞吐

22. 官方文档

  • 阿里云 GPU 实例规格

  • 连接 Linux 实例

  • 添加安全组规则

  • 阿里云对象存储 OSS

  • PyTorch 安装

  • TensorFlow 安装

  • TensorBoard

  • NVIDIA nvidia-smi

  • 清华 PyPI 镜像

  • tmux

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询