我是靠谱客的博主 执着衬衫,最近开发中收集的这篇文章主要介绍在英特尔独立显卡上训练ResNet PyTorch模型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

作者:武卓,张晶

目录

1.1 英特尔锐炫™独立显卡简介

1.2 蝰蛇峡谷简介

1.3 搭建训练PyTorch模型的开发环境

1.3.1 Windows 版本要求:

1.3.2 下载并安装最新的英特尔显卡驱动

1.3.3 下载并安装Anaconda

1.3.4 安装PyTorch

1.3.5 安装torch-directml

1.3.6 安装其它支持软件包

1.4 在英特尔独立显卡上训练PyTorch ResNet50模型

1.5 总结


        《在英特尔独立显卡上训练TensorFlow模型》介绍了在英特尔独立显卡上训练TensorFlow模型的全流程;本文将基于蝰蛇峡谷(Serpent Canyon) 详细介绍如何在英特尔独立显卡上训练ResNet PyTorch模型的全流程。

1.1 英特尔锐炫™独立显卡简介

       英特尔锐炫™ 显卡基于Xe-HPG 微架构,Xe HPG GPU 中的每个 Xe 内核都配置了一组 256 位矢量引擎,旨在加速传统图形和计算工作负载,以及新的 1024 位矩阵引擎或 Xe 矩阵扩展,旨在加速人工智能工作负载

1.2 蝰蛇峡谷简介

       蝰蛇峡谷(Serpent Canyon)蝰蛇峡谷(Serpent Canyon)蝰蛇峡谷(Serpent Canyon)蝰蛇峡谷(Serpent Canyon) 是一款性能强劲,并且体积小巧的高性能迷你主机,搭载全新一代混合架构的第 12 代智能英特尔® 酷睿™ 处理器,并且内置了英特尔锐炫™ A770M 独立显卡。 

1.3 搭建训练PyTorch模型的开发环境

1.3.1 Windows 版本要求:

在Windows上基于英特尔独立显卡训练PyTorch模型所依赖的软件包torch-directml 要求:

  • Windows 10的版本≥1709
  • Windows 11的版本≥21H2

用“Windows logo 键+ R键”启动“运行”窗口,然后输入命令“winver”可以查得Windows版本。

1.3.2 下载并安装最新的英特尔显卡驱动

        到Intel官网下载并安装最新的英特尔显卡驱动。驱动下载链接:https://www.intel.cn/content/www/cn/zh/download/726609/intel-arc-iris-xe-graphics-whql-windows.html。

1.3.3 下载并安装Anaconda

        下载并安装Python虚拟环境和软件包管理工具Anaconda:Anaconda | The World's Most Popular Data Science Platform

        安装完毕后,用下面的命令创建并激活虚拟环境pt_a770:

conda create --name pt_a770 python=3.9 
conda activate pt_a770

1.3.4 安装PyTorch

        在虚拟环境pt_a770中安装PyTorch 1.13。需要注意的是:torch-directml软件包当前只支持PyTorch 1.13。

pip install torch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0

1.3.5 安装torch-directml

        在虚拟环境pt_a770中安装torch-directml,这是一个在Windows平台上的机器学习训练加速软件包。

pip install torch-directml

1.3.6 安装其它支持软件包

        在虚拟环境pt_a770中安装opencv-python, numpy, pandas, tensorboard, matplotlib, tqdm, pyyaml, wget和scipy,这些是辅助训练模型的软件包。

pip install opencv-python numpy pandas tensorboard matplotlib tqdm pyyaml wget scipy

到此,在Windows平台上用英特尔独立显卡训练PyTorch模型的开发环境配置完毕

1.4 在英特尔独立显卡上训练PyTorch ResNet50模型

        请下载pt_training_on_A770.py并运行,该范例代码使用了PyTorch自带的StanfordCars数据集和resnet50预训练模型。    

import torch
import torch_directml
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.data import DataLoader
from torchvision import datasets, models, transforms
import time
# Set device & Hyperparameters
device = torch_directml.device()
num_classes = 196   # The Cars dataset contains 16,185 images of 196 classes of cars
learning_rate = 1e-3
batch_size = 32
# Step1: Load Flower102 dataset
# https://pytorch.org/vision/stable/generated/torchvision.datasets.StanfordCars.html
data_transforms = {
    'train':
    transforms.Compose([
        transforms.Resize((224,224)),
        transforms.RandomAffine(0, shear=10, scale=(0.8,1.2)),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ]),
    'test':
    transforms.Compose([
        transforms.Resize((224,224)),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ]),
}
train_dataset = datasets.StanfordCars(root="dataset/", split="train", transform=data_transforms["train"], download=True)
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_dataset = datasets.StanfordCars(root="dataset/", split='test', transform=data_transforms["test"], download=True)
test_dataloader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
# Step2: Load Pretrained ResNet50 and add FC layer
model = models.resnet50(weights='DEFAULT').to(device)    
for param in model.parameters():
    param.requires_grad = False   
model.fc = nn.Sequential(
               nn.Linear(2048, 256),
               nn.ReLU(inplace=True),
               nn.Linear(256, num_classes)).to(device)
model.train()
# Step4: define Loss and optimizer
loss_fn = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
# Step5: Train Network
for epoch in range(3):
    losses=[]
    for batch_idx, (data, targets) in enumerate(train_dataloader):
        start_time = time.time()
        data = data.to(device)
        targets = targets.to(device)
        # forward
        preds = model(data)
        loss = loss_fn(preds, targets)
        losses.append(loss)
        # backward
        optimizer.zero_grad()
        loss.backward()
        # GSD
        optimizer.step()
        time_elapsed = time.time() - start_time
        print(f"Step:{batch_idx}, elapsed time: {time_elapsed*1000:0.2f}ms; loss is {sum(losses)/len(losses)}.")

   运行结果,如下图所示:

 1.5 总结

        英特尔独立显卡不仅支持TensorFlow模型,也支持PyTorch模型训练。更多训练范例请参考:https://github.com/microsoft/DirectML

最后

以上就是执着衬衫为你收集整理的在英特尔独立显卡上训练ResNet PyTorch模型的全部内容,希望文章能够帮你解决在英特尔独立显卡上训练ResNet PyTorch模型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部