首頁 > 科技週邊 > 人工智慧 > 我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya

我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya

Lisa Kudrow
發布: 2025-03-20 10:53:11
原創
408 人瀏覽過

Black Forest Labs最近發布的Flux模型因其令人印象深刻的圖像產生功能而廣受歡迎。但是,其尺寸最初阻止了其在標準消費硬件上的使用。此限制促使使用API​​服務以避免本地模型加載。但是,由於GPU的要求,本地部署的成本仍然很高。幸運的是,擁抱Face的擴散器庫現在通過BitsandBytes支持量化,從而可以在僅8GB GPU RAM的機器上進行通量推斷。

我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya

學習目標:

  • 配置依賴關係,用於在Colab環境中使用通量。
  • 使用4位量化的文本編碼器編碼文本提示,以提高內存效率。
  • 實現保存內存的技術,以混合精度加載和運行圖像生成模型。
  • 使用COLAB中的通量管道從文本提示中生成圖像。

本文是數據科學博客馬拉鬆的一部分。

目錄:

  • 學習目標
  • 什麼是通量?
  • 為什麼量化很重要?
    • 用bitsandbytes進行量化
    • BitsandBytes如何工作?
  • 在消費者硬件上運行通量
    • 步驟1:環境設置
    • 步驟2:GPU內存管理
    • 步驟3:加載4位T5文本編碼器
    • 步驟4:生成文本嵌入
    • 步驟5:加載4位變壓器和VAE
    • 步驟6:圖像生成
  • 設備圖像生成的未來
  • 結論
    • 關鍵要點
  • 常見問題

什麼是通量?

Black Forest Labs(穩定擴散的創造者)開發的Flux代表了文本到圖像模型的重大進步。它以穩定的擴散為基礎,提供了提高的性能和輸出質量。雖然最初是資源密集型的,但優化允許對消費者硬件有效執行。本文演示了量化如何增強通量的可訪問性。下圖說明了創意潛力和計算成本之間的權衡。

我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya

Flux擁有幾個關鍵的建築組件:

  • 兩個預訓練的文本編碼器(剪輯和T5):這些編碼器改善了文本及時理解和轉換為圖像。
  • 基於變壓器的DIT模型:這種脫氧主鏈利用變壓器提高效率和準確性。
  • 變性自動編碼器(VAE):潛在空間中的處理可以減少計算需求,同時保持圖像質量。

通量有多種版本:Flux-Schnell(開源),Flux-DEV(開放,具有更限制的許可)和Flux-Pro(封閉消息,可訪問)。

我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya

為什麼量化很重要?

量化是一種通過使用較少位來存儲參數來降低模型大小的技術,對於在有限的硬件上運行大型型號至關重要。雖然在圖像生成中不太常見,但它會大大降低記憶足跡而沒有大量性能損失。神經網絡參數通常存儲在32位,但量化可以將其降低到4位。

用bitsandbytes進行量化

BITSANDBYTES庫實現了Pytorch的有效k位量化。它集成到擴散器庫中,使8GB GPU的運行通量可行。

BitsandBytes如何工作?

BitsandBytes量化為8位和4位精度。 8位量化處理異常值不同,以最大程度地減少性能降解。 4位量化進一步壓縮了該模型,該模型通常與Qlora一起用於微調。

在消費者硬件上運行通量

步驟1:環境設置

確保啟用GPU的環境(例如NVIDIA T4/L4或Google Colab)。安裝必要的軟件包:

 !
!
!
登入後複製

導入依賴性:

導入擴散器
導入變壓器
導入bitsandbytes作為BNB
從擴散器導入FluxPipeline,FluxTransFormer2DModel
從變形金剛導入t5encodermodel
導入火炬
導入GC
登入後複製

步驟2:GPU內存管理

定義一個函數以清除模型負載之間的GPU內存:

 def flush():
    gc.collect()
    TORCH.CUDA.EMPTY_CACHE()
    torch.cuda.Reset_max_memory_allocated()
    TORCH.CUDA.RESET_PEAK_MEMORY_STATS()

flush()
登入後複製

步驟3:加載4位T5文本編碼器

使用4位量化加載T5編碼器:

 ckpt_id =“黑色 - 林 -  luxs/flux.1-dev”
ckpt_4bit_id =“ hf內部測試/flux.1-dev-nf4-pkg”
提示=“巴黎照片中的一隻可愛的狗”

text_encoder_2_4bit = t5encodermodel.from_pretrated(
    ckpt_4bit_id,
    subfolder =“ text_encoder_2”,
)
登入後複製

步驟4:生成文本嵌入

使用量化的編碼器編碼提示:

 pipeline = fluxpipeline.from_pretaining(
    “黑色 - 林 -  luxs/flux.1-dev”,
    text_encoder_2 = text_encoder_2_4bit,
    變壓器=無,
    vae =無,
    TORCH_DTYPE = TORCH.FLOAT16,
)

使用Torch.no_grad():
    提示_embeds,pooled_prompt_embeds,text_ids = pipeline.encode_prompt(
        提示=提示,提示_2 = none,max_secorence_length = 256
    )

Del Pipeline
flush()
登入後複製

步驟5:加載4位變壓器和VAE

將變壓器和VAE加載到4位模式下:

 transformer_4bit = fluxtransformer2dmodel.from_pretrated(ckpt_4bit_id,subfolder =“ transformer”)
pipeline = fluxpipeline.from_pretaining(
    ckpt_id,
    text_encoder =無,
    text_encoder_2 =無,
    tokenizer = none,
    tokenizer_2 =無,
    變壓器=變形金剛_4bit,
    TORCH_DTYPE = TORCH.FLOAT16,
)

pipeline.enable_model_cpu_offload()
登入後複製

步驟6:圖像生成

生成圖像:

打印(“奔跑denoising。”)
高度,寬度= 512,768
圖像=管道(管道
    提示_embeds =提示_embeds,
    pooled_prompt_embeds = pooled_prompt_embeds,
    num_inference_steps = 50,
    gudance_scale = 5.5,
    高度=高度,
    寬度=寬度,
    output_type =“ pil”,
)。圖像

圖像[0] 
登入後複製

我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya

設備圖像生成的未來

量化和高效的模型處理為消費者硬件帶來了強大的AI,使對高級圖像生成的訪問民主化。

結論

通量結合量化,可以在8GB GPU上產生高質量的圖像生成。這一進步使更加精緻的AI可以被更廣泛的受眾訪問。

關鍵要點:

  • 通量使用4位量化和混合精度在Colab中有效運行。
  • diffuserstransformers簡化了圖像生成。
  • 有效的內存管理可以對有限的資源進行大型模型執行。

經常詢問的問題(與原始問題相同,但重新格式化以提高可讀性)

Q1。 4位量化的目的? 4位量化減少了內存使用情況,從而使大型模型在有限的資源上可以有效地運行。

Q2。更改文本提示?prompt變量替換為所需的文本描述。

Q3。調整圖像質量/樣式?調整管道調用中的num_inference_steps (質量)和guidance_scale (及時遵守)。

Q4。處理COLAB中的內存錯誤?確保使用GPU使用率,4位量化和混合精度。考慮降低num_inference_steps或使用CPU卸載。

Q5。在本地運行腳本?是的,但是請確保足夠的GPU資源和內存。

以上是我如何在8GB GPU RAM上運行通量模型? - 分析Vidhya的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板