本地布署Diffusers库实现文生图
本次随笔,记录开源Python库Diffusers库的使用。
Diffusers库由Hugging Face维护,拥有活跃的社区和丰富的文档。
Diffusers库是专注于扩散模型(Diffusion Models)的开源Python库。
Diffusers库多任务支持:支持无条件图像生成、文本到图像、图像到图像、超分辨率、图像修复、音频生成等多种任务
一,#本机环境检查
执行nvidia-smi,查看右上角。验证显卡驱动已安装最高支持的版本。
nvidia-smi
执行nvcc -V验证cuda
nvcc -V
执行conda --version验证conda版本
conda --version
#列出所有已创建的Conda 环境:
conda env list
或
conda info --envs
#创建新环境
conda create -n diffusers_qwen_image python=3.10
#激活环境
conda activate diffusers_qwen_image
二,库和依赖包安装
#安装最新版本的 diffusers,清华镜像源下载
pip install git+https://github.com/huggingface/diffusers
#安装最新版本的 diffusers,临时清华镜像源下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple diffusers[torch]
#用python3导入diffusers库。验证 diffusers是否安装成功
python3 -c "import diffusers; print('diffusers 导入成功,版本:', diffusers.__version__)"
#安装 transformers库。 Stable Diffusion 所需的其他常见依赖也一并安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade transformers diffusers accelerate scipy ftfy
#验证PyTorch是否能正确识别GPU
python -c "import torch; print('PyTorch版本:', torch.__version__); print('CUDA可用:', torch.cuda.is_available()); print('CUDA版本:', torch.version.cuda); print('GPU设备:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'None')"
三,设置环境变量,运行轻量级模型
首次运行 DiffusionPipeline.from_pretrained时,程序会从 Hugging Face Hub下载预训练模型。如果网络连接不稳定,下载可能会非常慢或失败,导致程序卡在下载阶段
解决方法:配置国内镜像加速。在运行你的Python命令之前,先在终端执行以下命令:
#设置环境变量,使用Hugging Face国内镜像站:
export HF_ENDPOINT=https://hf-mirror.com
#使用轻量级模型: "CompVis/ldm-text2im-large-256",用于验证流程。本次我本机指定第7张和第8张显卡运行
CUDA_VISIBLE_DEVICES=6,7 python3 -c " from diffusers import DiffusionPipeline import torch# 使用镜像站后,直接加载模型,不指定 revision(使用默认版本) pipe = DiffusionPipeline.from_pretrained('runwayml/stable-diffusion-v1-5', torch_dtype=torch.float16)# 根据CUDA可用性决定设备 device = 'cuda' if torch.cuda.is_available() else 'cpu' pipe.to(device)# 如果使用CPU或内存有限,可以启用模型卸载(但会慢一些) # pipe.enable_attention_slicing()print('Pipeline加载完成,开始生成图像...') # 生成图像 image = pipe('一只猫', num_inference_steps=20).images[0] # 减少步数以加快速度 image.save('test_output_sd.png') print('图像已保存为 test_output_sd.png') "
效果图