最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

在英特爾 CPU 上加速 Stable Diffusion 推理

2023-04-11 18:09 作者:HuggingFace  | 我要投稿

前一段時(shí)間,我們向大家介紹了最新一代的 英特爾至強(qiáng) CPU (代號(hào) Sapphire Rapids),包括其用于加速深度學(xué)習(xí)的新硬件特性,以及如何使用它們來加速自然語言 transformer 模型的 分布式微調(diào) 和 推理。

  • 英特爾至強(qiáng)處理器:
    https://www.intel.com/content/www/us/en/products/details/processors/xeon/scalable.html

  • 使用英特爾處理器加速分布式微調(diào):
    https://hf.co/blog/zh/intel-sapphire-rapids

  • 使用英特爾處理器加速推理:
    https://hf.co/blog/zh/intel-sapphire-rapids-inference

本文將向你展示在 Sapphire Rapids CPU 上加速 Stable Diffusion 模型推理的各種技術(shù)。后續(xù)我們還計(jì)劃發(fā)布對 Stable Diffusion 進(jìn)行分布式微調(diào)的文章。

在撰寫本文時(shí),獲得 Sapphire Rapids 服務(wù)器的最簡單方法是使用 Amazon EC2 R7iz 系列實(shí)例。由于它仍處于預(yù)覽階段,你需要 注冊 才能獲得訪問權(quán)限。與之前的文章一樣,我使用的是?r7iz.metal-16xl?實(shí)例 (64 個(gè) vCPU,512GB RAM),操作系統(tǒng)鏡像為 Ubuntu 20.04 AMI (ami-07cd3e6c4915b2d18)。

  • R7iz 實(shí)例信息:
    https://aws.amazon.com/ec2/instance-types/r7iz/

  • 注冊頁面:
    https://pages.awscloud.com/R7iz-Preview.html

本文的代碼可從 Gitlab 上獲取。我們開始吧!
https://gitlab.com/juliensimon/huggingface-demos/-/tree/main/optimum/stable_diffusion_intel

Diffusers 庫

Diffusers 庫使得用 Stable Diffusion 模型生成圖像變得極其簡單。如果你不熟悉 Stable Diffusion 模型,這里有一個(gè)很棒的 圖文介紹。

  • Diffusers:
    https://hf.co/docs/diffusers/index

  • 圖文介紹:
    https://jalammar.github.io/illustrated-stable-diffusion/

首先,我們創(chuàng)建一個(gè)包含以下庫的虛擬環(huán)境: Transformers、Diffusers、Accelerate 以及 PyTorch。

然后,我們寫一個(gè)簡單的基準(zhǔn)測試函數(shù),重復(fù)推理多次,最后返回單張圖像生成的平均延遲。

現(xiàn)在,我們用默認(rèn)的?float32?數(shù)據(jù)類型構(gòu)建一個(gè)?StableDiffusionPipeline,并測量其推理延遲。

平均延遲為?32.3 秒。正如這個(gè)英特爾開發(fā)的 Hugging Face Space 所展示的,相同的代碼在上一代英特爾至強(qiáng) (代號(hào) Ice Lake) 上運(yùn)行需要大約 45 秒。
https://hf.co/spaces/Intel/Stable-Diffusion-Side-by-Side

開箱即用,我們可以看到 Sapphire Rapids CPU 在沒有任何代碼更改的情況下速度相當(dāng)快!

現(xiàn)在,讓我們繼續(xù)加速它吧!

Optimum Intel 與 OpenVINO

Optimum Intel 用于在英特爾平臺(tái)上加速 Hugging Face 的端到端流水線。它的 API 和 Diffusers 原始 API 極其相似,因此所需代碼改動(dòng)很小。

  • Optimum Intel:
    https://hf.co/docs/optimum/intel/index

  • Diffusers:
    https://hf.co/docs/diffusers/index

Optimum Intel 支持 OpenVINO,這是一個(gè)用于高性能推理的英特爾開源工具包。
https://docs.openvino.ai/latest/index.html

Optimum Intel 和 OpenVINO 安裝如下:

相比于上文的代碼,我們只需要將?StableDiffusionPipeline?替換為?OVStableDiffusionPipeline?即可。如需加載 PyTorch 模型并將其實(shí)時(shí)轉(zhuǎn)換為 OpenVINO 格式,你只需在加載模型時(shí)設(shè)置?export=True。

OpenVINO 會(huì)自動(dòng)優(yōu)化?bfloat16?模型,優(yōu)化后的平均延遲下降到了?16.7 秒,相當(dāng)不錯(cuò)的 2 倍加速。

上述 pipeline 支持動(dòng)態(tài)輸入尺寸,對輸入圖像 batch size 或分辨率沒有任何限制。但在使用 Stable Diffusion 時(shí),通常你的應(yīng)用程序僅限于輸出一種 (或幾種) 不同分辨率的圖像,例如 512x512 或 256x256。因此,通過固定 pipeline 的輸出分辨率來解鎖更高的性能增益有其實(shí)際意義。如果你需要不止一種輸出分辨率,您可以簡單地維護(hù)幾個(gè) pipeline 實(shí)例,每個(gè)分辨率一個(gè)。

固定輸出分辨率后,平均延遲進(jìn)一步降至?4.7 秒,又獲得了額外的 3.5 倍加速。

如你所見,OpenVINO 是加速 Stable Diffusion 推理的一種簡單有效的方法。與 Sapphire Rapids CPU 結(jié)合使用時(shí),和至強(qiáng) Ice Lake 的最初性能的相比,推理性能加速近 10 倍。

如果你不能或不想使用 OpenVINO,本文下半部分會(huì)展示一系列其他優(yōu)化技術(shù)。系好安全帶!

系統(tǒng)級優(yōu)化

擴(kuò)散模型是數(shù) GB 的大模型,圖像生成是一種內(nèi)存密集型操作。通過安裝高性能內(nèi)存分配庫,我們能夠加速內(nèi)存操作并使之能在 CPU 核之間并行處理。請注意,這將更改系統(tǒng)的默認(rèn)內(nèi)存分配庫。你可以通過卸載新庫來返回默認(rèn)庫。

jemalloc 和 tcmalloc 是兩個(gè)很有意思的內(nèi)存優(yōu)化庫。這里,我們使用?jemalloc,因?yàn)槲覀儨y試下來,它的性能比?tcmalloc?略好。jemalloc?還可以用于針對特定工作負(fù)載進(jìn)行調(diào)優(yōu),如最大化 CPU 利用率。詳情可參考?jemalloc調(diào)優(yōu)指南。

  • jemalloc:
    https://jemalloc.net/

  • tcmalloc:
    https://github.com/gperftools/gperftools

  • 調(diào)優(yōu)指南:
    https://github.com/jemalloc/jemalloc/blob/dev/TUNING.md

接下來,我們安裝?libiomp?庫來優(yōu)化多核并行,這個(gè)庫是 英特爾 OpenMP 運(yùn)行時(shí)庫 的一部分。
https://www.intel.com/content/www/us/en/docs/cpp-compiler/developer-guide-reference/2021-8/openmp-run-time-library-routines.html

最后,我們安裝 numactl 命令行工具。它讓我們可以把我們的 Python 進(jìn)程綁定到指定的核,并避免一些上下文切換開銷。
https://github.com/numactl/numactl

使用這些優(yōu)化后,原始的 Diffusers 代碼只需?11.8 秒?就可以完成推理,快了幾乎 3 倍,而且無需任何代碼更改。這些工具在我們的 32 核至強(qiáng) CPU 上運(yùn)行得相當(dāng)不錯(cuò)。

我們還有招?,F(xiàn)在我們把?英特爾 PyTorch 擴(kuò)展?(Intel Extension for PyTorch,?IPEX) 引入進(jìn)來。

IPEX 與 BF16

IPEX 擴(kuò)展了 PyTorch 使之可以進(jìn)一步充分利用英特爾 CPU 上的硬件加速功能,包括 AVX-512 、矢量神經(jīng)網(wǎng)絡(luò)指令 (Vector Neural Network Instructions,AVX512 VNNI) 以及 先進(jìn)矩陣擴(kuò)展 (AMX)。

  • IPEX:
    https://intel.github.io/intel-extension-for-pytorch/

  • AVX-512:
    https://en.wikipedia.org/wiki/AVX-512

  • 先進(jìn)矩陣擴(kuò)展:
    https://en.wikipedia.org/wiki/Advanced_Matrix_Extensions

我們先安裝?IPEX。

裝好后,我們需要修改部分代碼以將?IPEX?優(yōu)化應(yīng)用到?pipeline?的每個(gè)模塊 (你可以通過打印?pipe?對象羅列出它有哪些模塊),其中之一的優(yōu)化就是把數(shù)據(jù)格式轉(zhuǎn)換為 channels-last 格式。

我們使用了?bloat16?數(shù)據(jù)類型,以利用 Sapphire Rapids CPU 上的 AMX 加速器。

經(jīng)過此番改動(dòng),推理延遲從 11.9 秒進(jìn)一步減少到?5.4 秒。感謝 IPEX 和 AMX,推理速度提高了 2 倍以上。

還能榨點(diǎn)性能出來嗎?能,我們將目光轉(zhuǎn)向調(diào)度器 (scheduler)!

調(diào)度器

Diffusers 庫支持為每個(gè) Stable Diffusion pipiline 配置 調(diào)度器 (scheduler),用于在去噪速度和去噪質(zhì)量之間找到最佳折衷。
https://hf.co/docs/diffusers/using-diffusers/schedulers

根據(jù)文檔所述:「截至本文檔撰寫時(shí),DPMSolverMultistepScheduler 能實(shí)現(xiàn)最佳的速度/質(zhì)量權(quán)衡,只需 20 步即可運(yùn)行。」我們可以試一下?DPMSolverMultistepScheduler

最終,推理延遲降至?5.05 秒。與我們最初的 Sapphire Rapids 基線 (32.3 秒) 相比,幾乎快了 6.5 倍!

運(yùn)行環(huán)境: Amazon EC2 r7iz.metal-16xl, Ubuntu 20.04, Linux 5.15.0-1031-aws, libjemalloc-dev 5.2.1-1, intel-mkl 2020.0.166-1, PyTorch 1.13.1, Intel Extension for PyTorch 1.13.1, transformers 4.27.2, diffusers 0.14, accelerate 0.17.1, openvino 2023.0.0.dev20230217, optimum 1.7.1, optimum-intel 1.7

總結(jié)

在幾秒鐘內(nèi)生成高質(zhì)量圖像的能力可用于許多場景,如 2C 的應(yīng)用程序、營銷和媒體領(lǐng)域的內(nèi)容生成,或生成合成數(shù)據(jù)以擴(kuò)充數(shù)據(jù)集。

如你想要在這方面起步,以下是一些有用的資源:

  • Diffusers 文檔
    https://hf.co/docs/diffusers

  • Optimum Intel 文檔
    https://hf.co/docs/optimum/main/en/intel/inference

  • 英特爾 IPEX on GitHub
    https://github.com/intel/intel-extension-for-pytorch

  • 英特爾和 Hugging Face 聯(lián)合出品的開發(fā)者資源網(wǎng)站?
    https://www.intel.com/content/www/us/en/developer/partner/hugging-face.html

如果你有任何問題或反饋,請通過 Hugging Face 論壇 告訴我們。
https://discuss.huggingface.co/

感謝垂閱!

英文原文:?https://hf.co/blog/stable-diffusion-inference-intel

作者: Julien Simon, Ella Charlaix

譯者: MatrixYao

審校/排版: zhongdongy (阿東)

在英特爾 CPU 上加速 Stable Diffusion 推理的評論 (共 條)

分享到微博請遵守國家法律
吴江市| 色达县| 介休市| 桓台县| 佛冈县| 阿拉善盟| 邮箱| 栾川县| 西乌珠穆沁旗| 龙游县| 榕江县| 都兰县| 吴川市| 驻马店市| 莱州市| 房山区| 安陆市| 临城县| 常德市| 布尔津县| 龙口市| 长沙市| 格尔木市| 乳源| 巢湖市| 安岳县| 靖安县| 皋兰县| 海兴县| 淮南市| 平南县| 三原县| 凤城市| 莱州市| 弋阳县| 西昌市| 阳谷县| 利川市| 柳州市| 开江县| 弥勒县|