news 2026/5/15 14:55:09

从零到一:在曙光超算上跑通你的第一个PyTorch深度学习模型(DCU/GPU双版本保姆级教程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到一:在曙光超算上跑通你的第一个PyTorch深度学习模型(DCU/GPU双版本保姆级教程)

从零到一:在曙光超算上跑通你的第一个PyTorch深度学习模型(DCU/GPU双版本保姆级教程)

第一次接触超算平台的研究者,往往会被复杂的作业提交流程和环境配置吓退。本文将带你一步步完成从环境准备到模型训练的全过程,针对曙光超算的DCU和GPU两种计算设备提供完整操作指南。

1. 环境准备:选择适合的计算设备

曙光超算平台同时支持国产DCU和英伟达GPU两种加速设备。在开始之前,需要明确你的项目更适合哪种硬件:

对比项DCUGPU
软件生态需使用定制版PyTorch支持官方原生PyTorch
计算稳定性可能存在波动通常表现稳定
适用场景国产化需求项目需要快速验证的研发项目
安装复杂度需配置额外环境变量标准CUDA环境

提示:如果是首次尝试,建议从GPU版本开始,遇到问题更容易找到解决方案。

1.1 基础环境配置

无论选择哪种设备,都需要先完成这些基础步骤:

  1. 登录超算平台:

    ssh your_username@login.node.address
  2. 创建独立Python环境:

    conda create -n pytorch_demo python=3.7 conda activate pytorch_demo
  3. 安装基础依赖:

    pip install numpy pandas matplotlib

2. DCU专属环境配置

2.1 安装定制版PyTorch

DCU需要安装曙光提供的专用版本:

pip install /public/software/apps/DeepLearning/whl/dtk-22.04.2/torch-1.10.0a0_gitc7f69d6_dtk22.04.2-cp37-cp37m-manylinux2014_x86_64.whl pip install /public/software/apps/DeepLearning/whl/dtk-22.04.2/torchvision-0.10.0a0_dtk22.04.2_e17f5ea-cp37-cp37m-manylinux2014_x86_64.whl

2.2 环境变量配置

创建环境变量配置文件:

vi ~/pytorch_env.sh

添加以下内容:

export LD_LIBRARY_PATH=/public/software/apps/DeepLearning/PyTorch_Lib/lib:/public/software/apps/DeepLearning/PyTorch_Lib/lmdb-0.9.24-build/lib:/public/software/apps/DeepLearning/PyTorch_Lib/opencv-2.4.13.6-build/lib:/public/software/apps/DeepLearning/PyTorch_Lib/openblas-0.3.7-build/lib:$LD_LIBRARY_PATH

激活配置:

source ~/pytorch_env.sh

2.3 验证安装

申请计算节点并验证:

salloc -p dcu -N 1 --gres=dcu:2 ssh compute_node_address module switch compiler/dtk/22.04.1 python -c "import torch; print(torch.cuda.is_available(), torch.__version__)"

3. GPU环境配置

3.1 安装标准PyTorch

GPU用户可以直接安装官方版本:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

3.2 环境准备

申请GPU节点并加载CUDA:

salloc -p gpu -N 1 --gres=gpu:1 ssh compute_node_address module load apps/cuda/11.3

3.3 验证安装

python -c "import torch; print(torch.cuda.is_available(), torch.__version__)"

4. 作业提交与管理

4.1 准备作业脚本

创建作业提交脚本train.sh

#!/bin/bash #SBATCH -J pytorch_demo #SBATCH -p dcu/gpu #SBATCH -N 1 #SBATCH --gres=dcu:2 # 或gpu:1 # 加载环境 module switch compiler/dtk/22.04.1 # DCU专用 # module load apps/cuda/11.3 # GPU专用 source activate pytorch_demo # 运行训练脚本 python train.py

4.2 提交与监控作业

提交作业:

sbatch train.sh

查看作业状态:

squeue -u $USER

查看实时输出:

tail -f slurm-<jobid>.out

取消作业:

scancel <jobid>

5. 实战案例:MNIST训练

5.1 准备训练脚本

创建train.py

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 定义模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc = nn.Linear(784, 10) def forward(self, x): return self.fc(x.view(-1, 784)) # 数据加载 transform = transforms.Compose([transforms.ToTensor()]) train_data = datasets.MNIST('./data', train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True) # 训练流程 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = Net().to(device) optimizer = optim.SGD(model.parameters(), lr=0.01) for epoch in range(10): for data, target in train_loader: data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = nn.CrossEntropyLoss()(output, target) loss.backward() optimizer.step() print(f'Epoch {epoch}, Loss: {loss.item():.4f}')

5.2 常见问题排查

  • DCU计算结果不稳定:尝试减少batch size或调整学习率
  • GPU内存不足:检查--gres=gpu:1参数是否正确
  • 模块加载失败:确认module load的版本与安装版本一致

6. 性能优化技巧

  1. 数据预处理优化

    • 使用torch.utils.data.DataLoadernum_workers参数
    • 预先把数据解压到本地存储
  2. 混合精度训练

    from torch.cuda.amp import GradScaler, autocast scaler = GradScaler() with autocast(): output = model(data) loss = criterion(output, target) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()
  3. 作业调度策略

    • 使用--time=HH:MM:SS指定合理运行时间
    • 通过--mem=XXG申请足够内存

在实际项目中,我发现DCU版本对环境变量配置非常敏感,建议将关键环境变量配置写入.bashrc文件。而GPU版本通常更稳定,适合快速验证模型效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 14:53:24

Linux进程地址空间——钻入Linux内核架构性剖析 硬核手搓!

引言&#xff1a;需少部分进程基础知识&#xff0c;十分注意关键处图文并看原则。 我相信通过阅读此文Linux地址与物理地址架构关系清晰无比。 目录 内存地址分布图 问题&#xff1a;为什么采用堆、栈增长方向不一致的设计&#xff1f; 内存地址的本质&#xff1a; 虚拟内…

作者头像 李华
网站建设 2026/5/15 14:52:46

docker Record of daily problems

不设置docker logs 的日志是无限的 cat /etc/docker/daemon.json {"data-root": "/data/docker","log-driver": "json-file","log-opts": {"max-file": "3","max-size": "100m"},&…

作者头像 李华
网站建设 2026/5/15 14:45:42

如何快速掌握SpleeterGui:Windows平台AI音乐分离的完整指南

如何快速掌握SpleeterGui&#xff1a;Windows平台AI音乐分离的完整指南 【免费下载链接】SpleeterGui Windows desktop front end for Spleeter - AI source separation 项目地址: https://gitcode.com/gh_mirrors/sp/SpleeterGui 你是否曾梦想将歌曲中的人声与伴奏完美…

作者头像 李华
网站建设 2026/5/15 14:41:04

Log4cpp在Windows下编译踩坑全记录:从VS2017到VS2022的snprintf冲突解决指南

Log4cpp在Windows平台编译实战&#xff1a;从源码冲突到跨平台日志方案 当C开发者需要在项目中引入可靠的日志系统时&#xff0c;Log4cpp常被视为首选方案之一。这个源自Java界著名日志框架Log4j的C实现&#xff0c;提供了线程安全、灵活配置和多种输出方式等特性。然而在实际编…

作者头像 李华