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中文网其他相关文章!