英特尔ARC A770 显卡训练Resnet50本文主要讲解如何在Ubuntu22.04、ADL-i7上,使用Intel锐炫ARC独显训练Resnet50。前期准备:参考前文:部署英特尔ARC A770 显卡的AI训练环境代码分析与更改ResNet模型的代码为:
图片

图片
在训练的代码中,需要进行以下的修改以适配ARC A770显卡,主要代码变更是将原来基于CUDA的GPU设备修改为ARC A770 XPU设备。将device设置为'xpu',代表后续的模型和张量会部署在ARC A770 XPU上运行。这行修改使得模型可以利用ARC A770 XPU的硬件优势。同时,引入intel_extension_for_pytorch库也很关键。该库为ARC A770提供了优化的底层OP实现,如矩阵乘法、卷积等会使用XPU精心优化过的kernel,可以高效地将PyTorch的计算任务映射到XPU硬件上。这样在不改动ResNet模型代码的情况下,就可以轻松地将训练部署到XPU服务器上。
图片
接下来需要将ResNet模型的计算图部署到ARC A770 XPU设备上。通过net = net.to(device)这行代码,可以将net的模型参数和计算都放到之前定义的XPU 'device'上。注意,cudnn是NVIDIA GPU的专用库,XPU中不需要,因此相关的代码可以删去。综上,实现了将ResNet模型部署到ARC A770 XPU硬件环境进行训练,而无需对模型代码进行任何大幅度的修改。接下来是训练优化:
图片
这里的修改是在训练循环中,加入了ipex.optimize(net, optimizer)这行代码。是对模型和优化器进行Intel Extension for PyTorch (IPE)优化。该优化器对于XPU硬件环境,能够自动对代码进行一些性能优化。所以,这行代码可以自动对模型进行针对XPU的优化,让训练获得额外的性能提升。用户只需要简单加入这行,不需要自己逐项进行优化,就可以获得易用性和高性能的结合。由此可见,基于XPU的深度学习可以同时兼顾效果、性能和简易部署。最后是针对训练循环中的数据加载和预处理部分的修改,加入了以下操作:1. inputs = inputs.to(memory_format=torch.channels_last)这行代码将输入图像数据转换为channels_last内存格式,也就是NHWC布局。这可以优化XPU上的内存访问模式。2. inputs = inputs.to(device)这行代码将输入数据移动到XPU设备上,进行后续的训练计算。3. targets = targets.to(device)同样,标注也放到XPU上,方便计算loss和backward时在XPU上进行。综上,这些修改可以带来以下好处:(1) 利用XPU对NHWC内存布局的优化支持,提升访问效率。(2) 将更多数据和计算放到XPU设备上,减少CPU-XPU传输。(3) 输入数据的预处理也尽量在XPU上完成,隐藏数据准备时间。(4) 计算密度提高,有利于发挥XPU强大的并行计算能力。因此,这些针对XPU的小优化可以进一步减少训练时间,让ResNet模型在XPU硬件上跑得更快更好。
图片
模型运行流程首先创建一个conda运行环境并且激活:conda create py39 python=3.9conda activate py39
图片
下面是Intel® Extension for PyTorch 安装的github 链接:GitHub - intel/intel-extension-for-pytorch: A Python package for extending the official PyTorch that can easily obtain performance on Intel platform通过命令行安装 Intel® Extension for PyTorch* for GPU:pip install torch==2.0.1a0 torchvision==0.15.2a0 intel_extension_for_pytorch==2.0.110+xpu -f https://developer.intel.com/ipex-whl-stable-xpu
图片

图片

图片
接下来就是运行经过优化的ResNet代码:python train_cifar10.py --net res50英特尔ARC A770 显卡训练Resnet50本文主要讲解如何在Ubuntu22.04、ADL-i7上,使用Intel锐炫ARC独显训练Resnet50。前期准备参考前文:部署英特尔ARC A770 显卡的AI训练环境代码分析与更改ResNet模型的代码为:
图片

图片
在训练的代码中,需要进行以下的修改以适配ARC A770显卡,主要代码变更是将原来基于CUDA的GPU设备修改为ARC A770 XPU设备。将device设置为'xpu',代表后续的模型和张量会部署在ARC A770 XPU上运行。这行修改使得模型可以利用ARC A770 XPU的硬件优势。同时,引入intel_extension_for_pytorch库也很关键。该库为ARC A770提供了优化的底层OP实现,如矩阵乘法、卷积等会使用XPU精心优化过的kernel,可以高效地将PyTorch的计算任务映射到XPU硬件上。这样在不改动ResNet模型代码的情况下,就可以轻松地将训练部署到XPU服务器上。
图片
接下来需要将ResNet模型的计算图部署到ARC A770 XPU设备上。通过net = net.to(device)这行代码,可以将net的模型参数和计算都放到之前定义的XPU 'device'上。注意,cudnn是NVIDIA GPU的专用库,XPU中不需要,因此相关的代码可以删去。综上,实现了将ResNet模型部署到ARC A770 XPU硬件环境进行训练,而无需对模型代码进行任何大幅度的修改。接下来是训练优化:
图片
这里的修改是在训练循环中,加入了ipex.optimize(net, optimizer)这行代码。是对模型和优化器进行Intel Extension for PyTorch (IPE)优化。该优化器对于XPU硬件环境,能够自动对代码进行一些性能优化。所以,这行代码可以自动对模型进行针对XPU的优化,让训练获得额外的性能提升。用户只需要简单加入这行,不需要自己逐项进行优化,就可以获得易用性和高性能的结合。由此可见,基于XPU的深度学习可以同时兼顾效果、性能和简易部署。最后是针对训练循环中的数据加载和预处理部分的修改,加入了以下操作:inputs = inputs.to(memory_format=torch.channels_last)这行代码将输入图像数据转换为channels_last内存格式,也就是NHWC布局。这可以优化XPU上的内存访问模式。inputs = inputs.to(device)这行代码将输入数据移动到XPU设备上,进行后续的训练计算。targets = targets.to(device)同样,标注也放到XPU上,方便计算loss和backward时在XPU上进行。综上,这些修改可以带来以下好处:利用XPU对NHWC内存布局的优化支持,提升访问效率。将更多数据和计算放到XPU设备上,减少CPU-XPU传输。输入数据的预处理也尽量在XPU上完成,隐藏数据准备时间。计算密度提高,有利于发挥XPU强大的并行计算能力。因此,这些针对XPU的小优化可以进一步减少训练时间,让ResNet模型在XPU硬件上跑得更快更好。
图片
模型运行流程首先创建一个conda运行环境并且激活:conda create py39 python=3.9conda activate py39
图片
下面是Intel® Extension for PyTorch 安装的github 链接:GitHub - intel/intel-extension-for-pytorch: A Python package for extending the official PyTorch that can easily obtain performance on Intel platform通过命令行安装 Intel® Extension for PyTorch* for GPU:pip install torch==2.0.1a0 torchvision==0.15.2a0 intel_extension_for_pytorch==2.0.110+xpu -f https://developer.intel.com/ipex-whl-stable-xpu
图片

图片

图片
接下来就是运行经过优化的ResNet代码:python train_cifar10.py --net res50
图片


wust508
1 声望0 粉丝