新版PyTorch:AI任务加速与Intel GPU集成 原创
最近的Pytorch 2.4 推出AI任务加速,提供对Intel GPU的支持。为了进一步加速 AI任务,PyTorch 2.4现在为Intel数据中心GPU Max系列提供支持,该系列将Intel GPU和SYCL软件堆栈集成到标准PyTorch堆栈中。<下图为各个组件被引入到pytorch的各个版本信息。小编建议快速浏览,第二章节再仔细理解这些组件的内涵!>
借助Intel GPU支持,读者可以拥有更多GPU选择,并可以使用相同的前后端 GPU编程模型。现在可以在Intel GPU上部署和操作,几乎不需要额外的编码。为了支持流式处理设备,此版本通用化了PyTorch设备和运行时(设备、流、事件、生成、分配和守护进程)。这种泛化不仅促进了PyTorch在更加广泛的硬件上部署,还促进了更多硬件后端集成。
除了为英特尔数据中心GPU Max系列提供用于训练和推理的关键功能外,Linux*上的PyTorch 2.4版本还保持了与PyTorch支持的其他硬件相同的用户体验。假如从CUDA*迁移代码,则可以在Intel GPU上运行现有应用程序代码,只需对设备名称进行最少的代码更改。
# CUDA Code
tensor = torch.tensor([1.0, 2.0]).to("cuda")
# 只需要改动代号就可以直接迁移至Intel GPU
tensor = torch.tensor([1.0, 2.0]).to("xpu")
PyTorch 2.4和Intel GPU的相关功能如下:
- 训练和推理工作流。
- 支持 torch.compile和eager的基本函数。在eager和compile模式下能够完全运行Dynamo Hugging Face* 基准测试。
- 支持FP32、BF16、FP16 和自动混合精度 (AMP) 等数据类型。
- 支持在Linux和Intel数据中心GPU Max系列上运行。
附录:看图理解术语
Eager mode and graph mode:
它们是在Pytorch 2.0引入了两种新的操作执行模式。
- Eager mode: 执行模式,在这种模式下操作会立即执行,而不是等待整个计算图的构建。这种模式更直观,适合调试和开发。
- Graph mode:执行模式,在这种模式下操作会被记录到一个计算图中,然后整个图会被优化和执行。这种模式通常更高效,适合生产环境。
SYCL:
它是一个跨平台抽象层,允许算法在硬件加速器(如 CPU、GPU 和 FPGA)之间切换,而无需更改任何代码行。SYCL是由Khronos Group开发的免版税开放标准,允许开发人员使用标准 C++ 编写异构架构。此外,其编程模型使用单一源,允许在单个源文件中编写主机和内核代码。
由于各种SYCL实现往往遵循相似的规范,因此无论选择何种实现,代码都应该成功编译和运行。但是它们并非都提供相同的功能,因为它们的开发速度不同,专注于不同的架构,或者与最新的 SYCL 规范有所不同。其实所有实现都支持在具有最流行的现有架构的 CPU 上执行。
Aten operators:
ATen是PyTorch的底层张量计算库,它提供了高效的张量操作和内存管理功能。ATen基于C++编写,因此具有高效和可扩展性。它还提供了与PyTorch API兼容的接口,以便在Python环境中方便地使用。ATen的设计理念是提供易于使用且高效张量计算库,适用于构建大型神经网络模型。
oneAPI Math Kernel Library (oneMKL):
英特尔® oneAPI数学核心函数库 (oneMKL),以前称为英特尔数学核心函数库,是一个针对科学、工程和金融应用的优化数学库。核心数学函数包括BLAS、LAPACK、ScaLAPACK、稀疏求解器、快速傅里叶变换和向量数学。
oneAPI Deep Neural Network Library (oneDNN):
英特尔® oneAPI深度神经网络库 (oneDNN) 提供高度优化的深度学习构建模块实现。借助这个开源的跨平台库,深度学习应用程序和框架开发人员可以对 CPU、GPU 或两者使用相同的 API,从而抽象出指令集和性能优化的其他复杂性。
Triton:
Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境,用于高效编写能够在现代GPU硬件上以最大吞吐量运行的自定义DNN计算内核。
Kineto:
Kineto是一个性能分析工具,用于监控和分析模型的执行性能。研究人员和工程师经常难以在计算上扩展他们的模型,因为没有意识到工作负载中的性能瓶颈。大型分布式训练作业可能会生成数千个跟踪,其中包含太多数据,人类无法检查。这就是整体分析的作用。
本文转载自 鲁班模锤,作者: 庞德公