新版PyTorch:AI任務加速與Intel GPU集成 原創(chuàng)
最近的Pytorch 2.4 推出AI任務加速,提供對Intel GPU的支持。為了進一步加速 AI任務,PyTorch 2.4現(xiàn)在為Intel數(shù)據(jù)中心GPU Max系列提供支持,該系列將Intel GPU和SYCL軟件堆棧集成到標準PyTorch堆棧中。<下圖為各個組件被引入到pytorch的各個版本信息。小編建議快速瀏覽,第二章節(jié)再仔細理解這些組件的內涵!>
借助Intel GPU支持,讀者可以擁有更多GPU選擇,并可以使用相同的前后端 GPU編程模型?,F(xiàn)在可以在Intel GPU上部署和操作,幾乎不需要額外的編碼。為了支持流式處理設備,此版本通用化了PyTorch設備和運行時(設備、流、事件、生成、分配和守護進程)。這種泛化不僅促進了PyTorch在更加廣泛的硬件上部署,還促進了更多硬件后端集成。
除了為英特爾數(shù)據(jù)中心GPU Max系列提供用于訓練和推理的關鍵功能外,Linux*上的PyTorch 2.4版本還保持了與PyTorch支持的其他硬件相同的用戶體驗。假如從CUDA*遷移代碼,則可以在Intel GPU上運行現(xiàn)有應用程序代碼,只需對設備名稱進行最少的代碼更改。
# 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的基本函數(shù)。在eager和compile模式下能夠完全運行Dynamo Hugging Face* 基準測試。
- 支持FP32、BF16、FP16 和自動混合精度 (AMP) 等數(shù)據(jù)類型。
- 支持在Linux和Intel數(shù)據(jù)中心GPU Max系列上運行。
附錄:看圖理解術語
Eager mode and graph mode:
它們是在Pytorch 2.0引入了兩種新的操作執(zhí)行模式。
- Eager mode: 執(zhí)行模式,在這種模式下操作會立即執(zhí)行,而不是等待整個計算圖的構建。這種模式更直觀,適合調試和開發(fā)。
- Graph mode:執(zhí)行模式,在這種模式下操作會被記錄到一個計算圖中,然后整個圖會被優(yōu)化和執(zhí)行。這種模式通常更高效,適合生產(chǎn)環(huán)境。
SYCL:
它是一個跨平臺抽象層,允許算法在硬件加速器(如 CPU、GPU 和 FPGA)之間切換,而無需更改任何代碼行。SYCL是由Khronos Group開發(fā)的免版稅開放標準,允許開發(fā)人員使用標準 C++ 編寫異構架構。此外,其編程模型使用單一源,允許在單個源文件中編寫主機和內核代碼。
由于各種SYCL實現(xiàn)往往遵循相似的規(guī)范,因此無論選擇何種實現(xiàn),代碼都應該成功編譯和運行。但是它們并非都提供相同的功能,因為它們的開發(fā)速度不同,專注于不同的架構,或者與最新的 SYCL 規(guī)范有所不同。其實所有實現(xiàn)都支持在具有最流行的現(xiàn)有架構的 CPU 上執(zhí)行。
Aten operators:
ATen是PyTorch的底層張量計算庫,它提供了高效的張量操作和內存管理功能。ATen基于C++編寫,因此具有高效和可擴展性。它還提供了與PyTorch API兼容的接口,以便在Python環(huán)境中方便地使用。ATen的設計理念是提供易于使用且高效張量計算庫,適用于構建大型神經(jīng)網(wǎng)絡模型。
oneAPI Math Kernel Library (oneMKL):
英特爾? oneAPI數(shù)學核心函數(shù)庫 (oneMKL),以前稱為英特爾數(shù)學核心函數(shù)庫,是一個針對科學、工程和金融應用的優(yōu)化數(shù)學庫。核心數(shù)學函數(shù)包括BLAS、LAPACK、ScaLAPACK、稀疏求解器、快速傅里葉變換和向量數(shù)學。
oneAPI Deep Neural Network Library (oneDNN):
英特爾? oneAPI深度神經(jīng)網(wǎng)絡庫 (oneDNN) 提供高度優(yōu)化的深度學習構建模塊實現(xiàn)。借助這個開源的跨平臺庫,深度學習應用程序和框架開發(fā)人員可以對 CPU、GPU 或兩者使用相同的 API,從而抽象出指令集和性能優(yōu)化的其他復雜性。
Triton:
Triton 是一種用于并行編程的語言和編譯器。它旨在提供一個基于 Python 的編程環(huán)境,用于高效編寫能夠在現(xiàn)代GPU硬件上以最大吞吐量運行的自定義DNN計算內核。
Kineto:
Kineto是一個性能分析工具,用于監(jiān)控和分析模型的執(zhí)行性能。研究人員和工程師經(jīng)常難以在計算上擴展他們的模型,因為沒有意識到工作負載中的性能瓶頸。大型分布式訓練作業(yè)可能會生成數(shù)千個跟蹤,其中包含太多數(shù)據(jù),人類無法檢查。這就是整體分析的作用。
本文轉載自 ??魯班模錘??,作者: 龐德公
