在这里插入图片描述

前言

Torchtitan 是 PyTorch 的 NPU 后端使 PyTorch 能够充分利用昇腾 NPU 的计算能力本文介绍 Torchtitan 的使用方法和注意事项

Torchtitan 简介

Torchtitan 是 PyTorch NPU 后端的开源实现

  • 提供完整的 NPU 支持
  • 与 PyTorch API 完全兼容
  • 支持混合精度训练
  • 支持分布式训练

安装方法

pip install torchtitan

环境配置

安装 PyTorch NPU 版本

# 方法一pip 安装
pip install torch-npu

# 方法二源码安装
git clone https://github.com/pytorch/pytorch.git
cd pytorch
pip install -e .

验证安装

import torch
print(torch.cuda.is_available())  # True
print(torch.cuda.device_count())    # NPU 数量
print(torch.version.cuda)        # CANN 版本

基础使用

创建 NPU 张量

import torch

# 方法一直接创建
x = torch.randn(1024, 1024).npu()

# 方法二CPU 张量移动到 NPU
x_cpu = torch.randn(1024, 1024)
x = x_cpu.npu()

# 方法三从 CPU 复制数据
x = torch.randn(1024, 1024, device='npu')

NPU 上的运算

import torch

# 基本运算
a = torch.randn(1024, 1024).npu()
b = torch.randn(1024, 1024).npu()

# 矩阵乘法
c = torch.matmul(a, b)

# 逐元素运算
d = torch.relu(c)

# 归约操作
e = d.sum()

模型训练

创建模型

import torch
import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 64, 3, padding=1)
        self.relu = nn.ReLU()
        self.fc = nn.Linear(64 * 224 * 224, 10)
    
    def forward(self, x):
        x = self.conv1(x)
        x = self.relu(x)
        x = x.view(x.size(0), -1)
        x = self.fc(x)
        return x

model = MyModel().npu()

训练循环

import torch.optim as optim

optimizer = optim.SGD(model.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()

# 训练循环
for epoch in range(num_epochs):
    for batch in dataloader:
        inputs, targets = batch
        inputs = inputs.npu()
        targets = targets.npu()
        
        # 前向传播
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        
        # 反向传播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

混合精度训练

训练大规模模型时使用混合精度可以显著升性能

from torch.cuda.amp import autocast, GradScaler

# 创建 GradScaler
scaler = GradScaler()

# 训练循环
for batch in dataloader:
    inputs, targets = batch
    inputs = inputs.npu()
    targets = targets.npu()
    
    # 自动混合精度
    with autocast(dtype=torch.float16):
        outputs = model(inputs)
        loss = criterion(outputs, targets)
    
    # 反向传播
    scaler.scale(loss).backward()
    scaler.step()
    scaler.update()

分布式训练

Torchtitan 支持多种分布式训练方式

数据并行

import torch.nn.parallel as parallel
import torch.distributed as dist

# 初始化进程组
dist.init_process_group(backend="hccl")

# 包装模型
model = nn.DataParallel(model.npu())

分布式数据加载

from torch.utils.data import DistributedSampler

sampler = DistributedSampler(
    dataset,
    num_replicas=8,
    rank=0,
)

dataloader = DataLoader(
    dataset,
    sampler=sampler,
    batch_size=32,
)

性能优化

内存优化

# 梯度 checkpoint
from torch.utils.checkpoint import checkpoint

class ModelWithCheckpoint(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer1 = nn.Sequential(*layers[:10])
    
    def forward(self, x):
        return checkpoint(self.layer1, x)

计算优化

#.channels_last 内存格式
model = model.to(memory_format=torch.channels_last)

# 融合
torch._C._set_graph_mode_enabled(True)

性能数据

Torchtitan 在不同模型上的性能

模型 Batch Size 吞吐量img/s
ResNet-50 64 2,340
EfficientNet-B0 64 1,560
BERT-Large 32 890

常见问题

NPU 不可用

# 检查 NPU
import torch
print(torch.cuda.is_available())

# 检查驱动
!npu-smi

显存不足

# 减少 Batch Size
batch_size = 16  # 从 64 减少

# 使用梯度累积
accumulation_steps = 4

总结

Torchtitan 作为 PyTorch 的 NPU 后端,其核心价值在于打通了 PyTorch 生态与昇腾 NPU 硬件之间的桥梁,使开发者能够无缝地将现有 PyTorch 模型迁移到 NPU 上进行高效训练与推理。它通过以下关键技术,显著提升了深度学习任务的性能:

  1. 硬件能力释放:Torchtitan 深度优化了 PyTorch 算子与昇腾 NPU 的适配,能够充分利用 NPU 强大的并行计算能力、高带宽内存以及专用 AI 计算单元,相比纯 CPU 训练可获得数十倍甚至上百倍的加速。

  2. 混合精度训练:通过集成自动混合精度 (AMP) 技术,Torchtitan 允许模型在训练时同时使用 FP16 和 FP32 精度。FP16 用于大部分计算和存储,大幅减少显存占用并提升计算吞吐;FP32 则用于维护权重更新等关键环节的数值稳定性,在保证模型收敛精度的前提下,最大化训练速度。

  3. 分布式训练支持:Torchtitan 支持数据并行、模型并行等多种分布式训练范式。结合华为 Collective Communication Library (HCCL),它能够在多卡、多机的 NPU 集群上实现高效的梯度同步与通信,使得训练超大规模模型成为可能,并线性扩展训练性能。

  4. 与 PyTorch API 完全兼容:开发者无需大幅修改现有代码,只需将模型和张量通过 .npu() 方法移至 NPU 设备,即可享受硬件加速。这极大地降低了使用门槛,保护了原有的开发投资。

综上所述,Torchtitan 通过提供稳定、高效且易用的 NPU 后端支持,结合混合精度、分布式训练等先进技术,能够显著提升模型训练性能,缩短研发周期,是昇腾 AI 计算生态中不可或缺的重要一环。

更多技术细节https://atomgit.com/cann/torchtitan

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐