首页 > 科技周边 > 人工智能 > 我如何在8GB GPU RAM上运行通量模型? - 分析Vidhya

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

Lisa Kudrow
发布: 2025-03-20 10:53:11
原创
405 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板