加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 英特爾? 銳炫??獨立顯卡簡介
    • 蝰蛇峽谷簡介
    • 搭建訓(xùn)練 PyTorch 模型的開發(fā)環(huán)境
    • 總結(jié)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

在英特爾獨立顯卡上訓(xùn)練ResNet PyTorch模型

2023/01/18
4105
閱讀需 13 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

文章作者:武卓,張晶

《在英特爾獨立顯卡上訓(xùn)練TensorFlow模型》介紹了在英特爾獨立顯卡上訓(xùn)練 TensorFlow 模型的全流程;本文將基于蝰蛇峽谷(Serpent Canyon) 詳細(xì)介紹如何在英特爾獨立顯卡上訓(xùn)練 ResNet PyTorch 模型的全流程。

英特爾? 銳炫??獨立顯卡簡介

英特爾? 銳炫??顯卡基于 Xe-HPG 微架構(gòu),Xe HPG GPU? 中的每個 Xe 內(nèi)核都配置了一組 256 位矢量引擎,旨在加速傳統(tǒng)圖形和計算工作負(fù)載,以及新的 1024 位矩陣引擎或 Xe 矩陣擴(kuò)展,旨在加速人工智能工作負(fù)載。

蝰蛇峽谷簡介

蝰蛇峽谷(Serpent Canyon) 是一款性能強(qiáng)勁,并且體積小巧的高性能迷你主機(jī),搭載全新一代混合架構(gòu)的第 12 代智能英特爾? 酷睿? 處理器,并且內(nèi)置了英特爾? 銳炫? A770M 獨立顯卡。

搭建訓(xùn)練 PyTorch 模型的開發(fā)環(huán)境

Windows 版本要求

在 Windows 上基于英特爾? 獨立顯卡訓(xùn)練 PyTorch 模型所依賴的軟件包 torch-directml 要求:

Windows 10 的版本≥1709

Windows 11 的版本≥21H2

用“Windows logo 鍵+ R鍵”啟動“運(yùn)行”窗口,然后輸入命令“winver”可以查得 Windows 版本。

下載并安裝最新的英特爾顯卡驅(qū)動

到英特爾官網(wǎng)下載并安裝最新的英特爾顯卡驅(qū)動。驅(qū)動下載鏈接:

https://www.intel.cn/content/www/cn/zh/download/726609/intel-arc-iris-xe-graphics-whql-windows.html

下載并安裝Anaconda

下載并安裝 Python 虛擬環(huán)境和軟件包管理工具Anaconda:

https://www.anaconda.com/

安裝完畢后,用下面的命令創(chuàng)建并激活虛擬環(huán)境pt_a770:

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

向右滑動查看完整代碼

安裝 PyTorch

在虛擬環(huán)境 pt_a770 中安裝 PyTorch 1.13 。需要注意的是:torch-directml 軟件包當(dāng)前只支持 PyTorch 1.13。

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

向右滑動查看完整代碼

安裝 torch-directml

在虛擬環(huán)境 pt_a770 中安裝 torch-directml,這是一個在 Windows 平臺上的機(jī)器學(xué)習(xí)訓(xùn)練加速軟件包。

pip install torch-directml

向右滑動查看完整代碼

安裝其它支持軟件包

在虛擬環(huán)境 pt_a770 中安裝 opencv-python, numpy, pandas, tensorboard, matplotlib, tqdm, pyyaml, wget 和scipy,這些是輔助訓(xùn)練模型的軟件包。

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

向右滑動查看完整代碼

到此,在 Windows 平臺上用英特爾獨立顯卡訓(xùn)練 PyTorch 模型的開發(fā)環(huán)境配置完畢。

在英特爾獨立顯卡上訓(xùn)練?

PyTorch ResNet50 模型

請下載 pt_training_on_A770.py 并運(yùn)行:

https://gitee.com/ppov-nuc/training_on_intel_GPU/blob/main/pt_training_on_A770.py

該范例代碼使用了 PyTorch 自帶的 StanfordCars 數(shù)據(jù)集和 resnet50 預(yù)訓(xùn)練模型。

import torchimport torch_directmlimport torch.nn as nnimport torch.optim as optimimport torch.nn.functional as Ffrom torch.utils.data import DataLoaderfrom torchvision import datasets, models, transformsimport time# Set device & Hyperparametersdevice = torch_directml.device()num_classes = 196 ? # The Cars dataset contains 16,185 images of 196 classes of carslearning_rate = 1e-3batch_size = 32# Step1: Load Flower102 dataset# https://pytorch.org/vision/stable/generated/torchvision.datasets.StanfordCars.htmldata_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 layermodel = 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 optimizerloss_fn = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=learning_rate)# Step5: Train Networkfor 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)}.")

向右滑動查看完整代碼

運(yùn)行結(jié)果,如下圖所示:

總結(jié)

英特爾獨立顯卡不僅支持 TensorFlow 模型,也支持 PyTorch 模型訓(xùn)練。更多訓(xùn)練范例請參考:

https://github.com/microsoft/DirectML

 

英特爾

英特爾

英特爾在云計算、數(shù)據(jù)中心、物聯(lián)網(wǎng)和電腦解決方案方面的創(chuàng)新,為我們所生活的智能互連的數(shù)字世界提供支持。

英特爾在云計算、數(shù)據(jù)中心、物聯(lián)網(wǎng)和電腦解決方案方面的創(chuàng)新,為我們所生活的智能互連的數(shù)字世界提供支持。收起

查看更多

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

英特爾致力于加快智能設(shè)備的開發(fā)和部署,通過智能多層系統(tǒng)和端到端分析,在智能駕駛、智能零售、智能安防、智能制造等領(lǐng)域,推動企業(yè)業(yè)務(wù)轉(zhuǎn)型,改善人們的生活和工作方式,英特爾驅(qū)動物聯(lián)網(wǎng)變革。