美文网首页
基于Intel Extension for PyTorch和锐炫

基于Intel Extension for PyTorch和锐炫

作者: LabVIEW_Python | 来源:发表于2023-03-31 10:29 被阅读0次

本文将介绍在英特尔锐炫显卡上训练ResNet(PyTorch模型)的全流程,在下一篇中将介绍基于OpenVINOAIxBoard上部署训练好的模型。在阅读本文前,请先在Ubuntu22.04上安装英特尔锐炫™独立显卡驱动程序

1. 搭建基于英特尔锐炫™独立显卡训练PyTorch模型的开发环境

1.1 环境要求:

在Ubuntu22.04上基于英特尔独立显卡训练PyTorch模型,需要依次安装:

  1. 英特尔独立显卡的驱动程序
  2. Intel® oneAPI Base Toolkit 2023.0
  3. torch 1.13.0a0和torchvision 0.14.1a0
  4. intel-extension-for-pytorch

1.2 安装英特尔独立显卡的驱动程序

请参考《在Ubuntu22.04上安装英特尔锐炫™独立显卡驱动程序》完成英特尔独立显卡的驱动安装。安装成功后,可以在About窗口Graphics一栏看到英特尔独立显卡的型号。

A770

1.3 下载并安装Intel® oneAPI Base Toolkit

第一步,通过下面的命令下载Intel® oneAPI Base Toolkit并启动安装程序:

wget https://registrationcenter-download.intel.com/akdlm/irc_nas/19079/l_BaseKit_p_2023.0.0.25537.sh

sudo sh ./l_BaseKit_p_2023.0.0.25537.sh

安装Intel oneAPI Base Toolkit 第二步,保持默认选项,完成Intel® oneAPI Base Toolkit安装 安装时,保持默认选项

1.4 安装torch、torchvision和intel-extension-for-pytorch

使用命令安装torch、torchvision和intel-extension-for-pytorch:

python -m pip install torch==1.13.0a0 torchvision==0.14.1a0 intel_extension_for_pytorch==1.13.10+xpu -f https://developer.intel.com/ipex-whl-stable-xpu

安装torch、torchvision和intel-extension-for-pytorch

到此,在Ubuntu平台上基于Intel Extension for PyTorch和锐炫显卡训练PyTorch模型的开发环境配置完毕!!

2. 训练 PyTorch ResNet模型

第一步,请通过以下命令激活oneAPI环境,DPC++ 编译器和 oneMKL 环境:

source /opt/intel/oneapi/setvars.sh
source /opt/intel/oneapi/compiler/latest/env/vars.sh
source /opt/intel/oneapi/mkl/latest/env/vars.sh

第二步,请下载training_on_Intel_dGPU_bf16_ipex.py并运行,该范例代码使用了PyTorch自带的Food101数据集和resnet50预训练模型参数
核心代码片段:

model = torchvision.models.resnet50(weights='IMAGENET1K_V2',num_classes=101)
model = model.to('xpu')
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr = LR, momentum=0.9)
model.train()
model, optimizer = ipex.optimize(model, optimizer=optimizer, dtype=torch.bfloat16)
# 训练循环
for epoch in range(epochs):
    tloss,vloss = 0.0, 0.0
    top1,top5 = 0.0, 0.0
    pbar = tqdm(enumerate(train_loader),total=len(train_loader), bar_format=TQDM_BAR_FORMAT)
    for i, (data, target) in pbar:
        model.train()
        data = data.to('xpu')
        target = target.to('xpu')
        with torch.xpu.amp.autocast():
            output = model(data)
            loss = criterion(output, target)
            loss.backward()
                optimizer.step()
        optimizer.zero_grad()
        tloss = (tloss*i + loss.item()) / (i+1)
        if i == len(pbar) - 1:
            pred,targets,vloss = [], [], 0
            n = len(val_loader)
            # 评估训练精度
            model.eval()
            with torch.xpu.amp.autocast():
                for d, (images, labels) in enumerate(val_loader):
                    images = images.to('xpu') 
                    labels = labels.to('xpu')
                    y = model(images)
                    pred.append(y.argsort(1, descending=True)[:, :5])
                    targets.append(labels) 
                    vloss += criterion(y, labels).item()
运行结果: 基于Intel Extension for PyTorch和锐炫显卡训练PyTorch ResNet模型

3 结论:

与传统FP32精度训练模型相比,Intel Extension for PyTorch支持的BF16精度能更加高效利用独立显卡,基于单卡英特尔A750和Ubuntu22.04的环境,笔者还分别测试了基于Food101数据集的Resnet50模型和Resnet101模型各自的BF16格式和FP32格式的最大batch_size及其训练时的最大显存使用率。

BF16 FP32
ResNet50 最大batch_size:128 最大batch_size:64
ResNet101 最大batch_size:96 最大batch_size:48

相关文章

网友评论

      本文标题:基于Intel Extension for PyTorch和锐炫

      本文链接:https://www.haomeiwen.com/subject/rgkhddtx.html