第七十篇-V100-32G+命令行代码+运行Flux.1-Schnell+Lora+文生图

代码

r_test_1.py

importtorchimporttimeimportargparseimportosfromdatetimeimportdatetimefromdiffusersimportFluxPipelinedefsetup_environment():"""设置环境变量优化V100性能"""os.environ["PYTORCH_CUDA_ALLOC_CONF"]="expandable_segments:True,max_split_size_mb:128"os.environ["TOKENIZERS_PARALLELISM"]="false"torch.backends.cudnn.benchmark=Trueiftorch.cuda.is_available():print(f"📊 GPU显存:{torch.cuda.get_device_properties(0).total_memory/1024**3:.2f}GB")print(f"🔧 PyTorch版本:{torch.__version__}")print(f"🔧 CUDA版本:{torch.version.cuda}")defsetup_xformers(pipeline):"""安全启用xformers(带fallback)"""try:# 尝试启用 xformerspipeline.enable_xformers_memory_efficient_attention()print("✅ 启用 xformers 内存高效注意力")except(ImportError,AttributeError)ase:print(f"⚠️ xformers不可用 ({e}), 回退到默认注意力实现")# 可选:启用 attention slicing 作为补充(你已启用)passdefload_flux_model_mini(precision="fp16",device="cuda"):"""超轻量级加载 - V100 OOM专用"""print(f"🚀 正在加载FLUX.1-schnell模型(超轻量模式)...")start_time=time.time()torch_dtype=torch.float16# V100 onlytry:pipeline=FluxPipeline.from_pretrained("/models/flux-schnell",torch_dtype=torch_dtype,use_safetensors=True,# 安全起见:禁用 text encoder offload(FLUX-schnell 无 text encoder))# 关键优化print("✅ 启用顺序CPU卸载...")pipeline.enable_sequential_cpu_offload()print("✅ 启用VAE切片与拼接...")pipeline.vae.enable_slicing()pipeline.vae.enable_tiling()print("✅ 启用Attention Slicing...")pipeline.enable_attention_slicing(slice_size="max")# ✅ 启用 xformers(或 fallback)setup_xformers(pipeline)exceptExceptionase:print(f"❌ 加载失败:{e}")importtraceback traceback.print_exc()raiseload_time=time.time()-start_timeprint(f"✅ 模型加载完成! 耗时:{load_time:.2f}秒")ifdevice=="cuda":print(f"💾 当前VRAM:{torch.cuda.memory_allocated()/1024**3:.2f}GB")print(f"💾 峰值VRAM:{torch.cuda.max_memory_allocated()/1024**3:.2f}GB")returnpipeline,load_timedefload_lora_weights(pipeline,lora_path,lora_weight=1.0):"""加载LoRA权重 - 显存优化版 + 兼容新API"""ifnotlora_path:returnpipeline,0print(f"\n🔌 正在加载LoRA权重:{os.path.basename(lora_path)}")print(f"⚖️ LoRA权重强度:{lora_weight}")start_time=time.time()try:torch.cuda.empty_cache()# 新版 Diffusers 推荐方式(set_adapter 已弃用/更名)pipeline.load_lora_weights(lora_path,adapter_name="default")# ✅ 正确设置 adapter(新版为 set_adapters 或直接 fuse)# 方法1:动态切换(推荐用于多LoRA)pipeline.set_adapters(["default"],adapter_weights=[lora_weight])# 方法2:临时融合(推理更快,但不可逆)→ 注释掉,保持灵活# pipeline.fuse_lora(lora_scale=lora_weight)# pipeline.unfuse_lora() # 需要时再调用load_time=time.time()-start_timeprint(f"✅ LoRA加载完成! 耗时:{load_time:.2f}秒")iftorch.cuda.is_available():print(f"💾 LoRA加载后VRAM:{torch.cuda.memory_allocated()/1024**3:.2f}GB")returnpipeline,load_timeexceptExceptionase:print(f"❌ 加载LoRA失败:{e}")importtraceback traceback.print_exc()returnpipeline,0defgenerate_image_optimized(pipeline,prompt,**kwargs):"""显存优化的生成函数"""torch.cuda.empty_cache()# 移除 FLUX 不支持的参数(避免警告)kwargs.pop("max_sequence_length",None)print(f"\n🎨 开始生成...")print(f"提示词:{prompt[:50]}{'...'iflen(prompt)>50else''}")start_time=time.time()try:result=pipeline(prompt=prompt,**kwargs,)inference_time=time.time()-start_timeprint(f"✅ 生成完成! 耗时:{inference_time:.2f}秒")returnresult.images[0],inference_timeexcepttorch.cuda.OutOfMemoryError:print("❌ 仍然OOM!建议: 1) 降低分辨率 2) 检查LoRA是否兼容FLUX")raisedefmain():setup_environment()parser=argparse.ArgumentParser(description='FLUX.1-schnell推理 + LoRA支持 - V100 OOM优化版')parser.add_argument('--prompt',type=str,required=True,help='生成提示词')parser.add_argument('--negative_prompt',type=str,default="",help='负面提示词')parser.add_argument('--lora_path',type=str,default=None,help='LoRA权重路径 (.safetensors)')parser.add_argument('--lora_weight',type=float,default=1.0,help='LoRA权重强度 (0.0-1.0)')parser.add_argument('--steps',type=int,default=4,help='推理步数 (schnell推荐4)')parser.add_argument('--guidance',type=float,default=0.0,help='引导比例 (schnell必须为0)')parser.add_argument('--height',type=int,default=512,help='图像高度')parser.add_argument('--width',type=int,default=512,help='图像宽度')parser.add_argument('--seed',type=int,default=None,help='随机种子')parser.add_argument('--output_dir',type=str,default='outputs',help='输出目录')args=parser.parse_args()# 验证参数ifargs.guidance!=0.0:print("⚠️ 警告: FLUX.1-schnell要求guidance=0.0,已自动修正")args.guidance=0.0ifargs.height>1024orargs.width>1024:print("⚠️ 警告: 尺寸>1024可能导致OOM,建议减小")print("\n"+"="*60)print("📋 运行配置")print("="*60)print(f"提示词:{args.prompt}")print(f"LoRA:{os.path.basename(args.lora_path)ifargs.lora_pathelse'无'}")print(f"尺寸:{args.width}x{args.height}")print(f"步数:{args.steps}")print(f"种子:{args.seedifargs.seedelse'随机'}")print("="*60)total_start=time.time()# 1. 加载模型pipeline,model_time=load_flux_model_mini("fp16","cuda")# 2. 加载LoRAlora_time=0ifargs.lora_path:pipeline,lora_time=load_lora_weights(pipeline,args.lora_path,args.lora_weight)else:print("\n⏭️ 跳过LoRA加载")# 3. 生成image,gen_time=generate_image_optimized(pipeline,prompt=args.prompt,negative_prompt=args.negative_prompt,height=args.height,width=args.width,num_inference_steps=args.steps,guidance_scale=args.guidance,generator=torch.Generator().manual_seed(args.seed)ifargs.seedelseNone,)# 4. 保存(✅ 文件名缩短)os.makedirs(args.output_dir,exist_ok=True)timestamp_short=datetime.now().strftime("%H%M%S")# 仅时分秒,如 143045lora_tag="lora"ifargs.lora_pathelse"none"output_path=f"{args.output_dir}/flux_{lora_tag}_{timestamp_short}.png"image.save(output_path)print(f"\n💾 图像保存至:{output_path}")# 5. 清理print("\n🧹 清理内存...")delpipeline torch.cuda.empty_cache()# 6. 统计total_time=time.time()-total_startprint("\n"+"="*60)print("📊 最终统计")print("="*60)print(f"模型加载:{model_time:.2f}秒")ifargs.lora_path:print(f"LoRA加载:{lora_time:.2f}秒")print(f"图像生成:{gen_time:.2f}秒")print(f"总耗时:{total_time:.2f}秒")iftorch.cuda.is_available():print(f"剩余显存:{torch.cuda.memory_allocated()/1024**3:.2f}GB")print("="*60)if__name__=="__main__":main()

运行

python r_test_1.py --prompt"a girl, 8k"--lora_path /opt/ai-lora_v1/lora_v1.safetensors --seed42--height512--width512

记录下后面会用到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1120377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【珍藏必看】2026年AI产品经理转型全攻略:从零基础到4大岗位分类,5步快速入门!

文章详细介绍了产品经理如何转型为AI产品经理,涵盖AI产品发展趋势、四大岗位分类(C端、B端、硬件型、技术型),以及转型所需的AI知识体系和实践方法。文章强调AI是未来趋势,传统产品经理需主动转型,提供了具…

2026年最新爆火AI论文工具:8款神器实测,开题报告免费写,30分钟搞定初稿!

⚠️ 最后72小时! 2026毕业季进入倒计时,导师催稿、查重爆炸、问卷数据空白——你还有多少时间能浪费?本文为你带来深夜急救级AI论文工具实测清单,让你用最快速度抢回主动权,30分钟产出初稿,开题报告免费拿…

2026年AI大模型高薪路线:从入门到精通的学习宝典,大模型人才的薪资,彻底爆了

本文详细解析了2025年AI大模型行业的高薪前景,介绍了5大高薪岗位及必备技能,提供了从学历提升到项目实战的全面建议,并预测未来3年行业发展趋势。掌握大模型技术,不仅能获得百万年薪,更是抓住AI红利的关键机遇。开门见…

从应用到框架:Deep Research与Deep Agent的关系深度解析

文章解析了Deep Research(深度研究智能体)与Deep Agent(深度智能体)的关系。Deep Research是一种针对复杂问题进行深入研究的智能体应用,而Deep Agent是实现复杂任务的通用架构范式。两者发展呈现"先场景落地&…

lambda的变量捕获机制

https://blog.csdn.net/weixin_69059394/article/details/155944312?spm1001.2014.3001.5502 上述博客的进程中断中提到了lambda的变量捕获机制。 public class demo6 {public static boolean isFinishedfalse;public static void main(String[] args) throws InterruptedExc…

多模态大模型前沿论文精析:8大开源框架助小白快速掌握AI核心技术

本文汇总了2025年11月多模态大模型领域的8篇前沿论文,涵盖视频理解生成、视觉语言对齐、模型训练策略等多个方向。UniVideo实现视频统一处理,COCO-Tree提升组合推理能力,FG-CLIP 2优化双语理解,ViSurf和SRUM改进训练与生成能力&am…

synchronized和ReentrantLock

ReentrantLock可重入互斥锁,和synchronized的定位类似,都用于实现互斥效果,保证线程安全。ReentrantLock的用法:lock():加锁,获取不到锁就死等trylock():超时时间加锁如果设置了超时参数&#x…

[论文阅读]One Shot Dominance: Knowledge Poisoning Attack on Retrieval-Augmented Generation Systems

One Shot Dominance: Knowledge Poisoning Attack on Retrieval-Augmented Generation Systems https://aclanthology.org/2025.findings-emnlp.1023/ EMNLP 2025 阅后总结: 作者是对PoisonedRAG方案的进一步优化,目的是使用单一有毒文档影响RAG系统的…

掌握核心!如何成为优秀提示工程架构师

从“写提示”到“搭体系”:优秀提示工程架构师的核心能力清单 引言:你离“架构级Prompt设计者”还差一层思维 你有没有过这样的经历? 为了让AI生成符合要求的商品标题,反复调整提示词:“帮我写个吸引人的手机标题”→“…

JVM-垃圾回收算法

一、垃圾回收思想垃圾回收的基本思想是考察每一个对象的可触及性,即从根节点开始是否可以访问到这个对象,如果可以,则说明当前对象正在被使用,如果从所有的根节点都无法访问到某个对象,说明对象已经不再使用了&#xf…

PrimeTime roport timing语法

set rpt_dir ${pt_dir}/reports/io_timing/test file mkdir ${rpt_dir} set i3csm_scl {PAD[9]} set i3csm_sda {PAD[10]} puts “i3csm” delay_type max 是setup, delay_type min是hold report_timing -from [get_clocks v_clk_i3c_s_scl] -thr [get_ports $i3csm_sda] -del…

2026必备!本科生毕业论文AI工具TOP8测评

2026必备!本科生毕业论文AI工具TOP8测评 2026年本科生论文写作工具测评:为何需要一份权威榜单? 随着人工智能技术的不断进步,越来越多的本科生开始借助AI工具提升论文写作效率。然而,面对市场上五花八门的AI写作软件&a…

【Python】字符串类型之间比较大小

1、概述为什么今天会写一个这个内容呢,主要是当时学习时确实遇到了这个,并且作者以为比较的是字符串的长度,但是后来学到后发现并不是这样,里面涉及到了关键点ASCII码,现在我就再来说下哈。2、字符串比较规则按照以下两…

echarts实现3d饼图

上效果先使用 import * as echarts from echarts import echarts-gllet myCharts echarts.init(document.getElementById(yearInventoryStatisticsId)) initChartR2(myCharts)//3d饼图 export const initChartR2 function (echartsM) {// 传入数据生成 optionconst optionsDa…

水库大坝安全监测:无人测量船的关键应用场景

水库大坝是水利工程关键设施,其安全运行关乎下游生命财产、社会经济和生态平衡。传统大坝安全监测靠人工巡检与固定式传感器网络结合。但人工巡检效率低、强度大、主观性强、数据不连续,恶劣条件下巡检人员安全难保障,也难全面覆盖监测点&…

【计算机毕业设计案例】深度学习基于CNN卷积网络的蔬菜识别基于CNN卷积网络的蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

python基于django的社区流浪动物领养管理系统_65kwrn28

目录基于Django的社区流浪动物领养管理系统核心功能模块技术实现社会价值关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的社区流浪动物领养管理系统 该系统旨在通过数字…

提示工程数据坑:架构师视角下的6个数据质量导致的失败案例

提示工程数据坑:架构师视角下的6个数据质量导致的失败案例 引言:提示工程的“地基”为何比技巧更重要? 2023年,某头部医疗AI公司的辅助诊断系统发生了一起严重事故:一位30岁男性患者因“咳嗽、发热3天”使用该系统,提示工程生成的诊断建议为“肺炎”,但后续CT检查显示…

andorid 学习之ContentProvider 和 ContentResolver 使用笔记

📚 概述这个教程将帮助你理解 Android 中的 ContentProvider 和 ContentResolver,它们是 Android 四大组件之一,用于实现应用间的数据共享。🎯 学习目标理解 ContentProvider 和 ContentResolver 的作用学会创建和注册 ContentPro…

python基于django的群众网上高效办事系统的设计与实现_6e4j9xi1

目录基于Django的群众网上高效办事系统设计与实现关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django的群众网上高效办事系统设计与实现 该系统旨在利用Django框架构建一个高…