Black Forest Labs最近發布的Flux模型因其令人印象深刻的圖像產生功能而廣受歡迎。但是,其尺寸最初阻止了其在標準消費硬件上的使用。此限制促使使用API服務以避免本地模型加載。但是,由於GPU的要求,本地部署的成本仍然很高。幸運的是,擁抱Face的擴散器庫現在通過BitsandBytes支持量化,從而可以在僅8GB GPU RAM的機器上進行通量推斷。
學習目標:
本文是數據科學博客馬拉鬆的一部分。
目錄:
什麼是通量?
Black Forest Labs(穩定擴散的創造者)開發的Flux代表了文本到圖像模型的重大進步。它以穩定的擴散為基礎,提供了提高的性能和輸出質量。雖然最初是資源密集型的,但優化允許對消費者硬件有效執行。本文演示了量化如何增強通量的可訪問性。下圖說明了創意潛力和計算成本之間的權衡。
Flux擁有幾個關鍵的建築組件:
通量有多種版本:Flux-Schnell(開源),Flux-DEV(開放,具有更限制的許可)和Flux-Pro(封閉消息,可訪問)。
為什麼量化很重要?
量化是一種通過使用較少位來存儲參數來降低模型大小的技術,對於在有限的硬件上運行大型型號至關重要。雖然在圖像生成中不太常見,但它會大大降低記憶足跡而沒有大量性能損失。神經網絡參數通常存儲在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]
設備圖像生成的未來
量化和高效的模型處理為消費者硬件帶來了強大的AI,使對高級圖像生成的訪問民主化。
結論
通量結合量化,可以在8GB GPU上產生高質量的圖像生成。這一進步使更加精緻的AI可以被更廣泛的受眾訪問。
關鍵要點:
diffusers
和transformers
簡化了圖像生成。經常詢問的問題(與原始問題相同,但重新格式化以提高可讀性)
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中文網其他相關文章!