02 SDXL:环境安装、模型下载与图片生成实战 ARM + Ubuntu 24 + RTX 4090

张开发
2026/4/10 1:46:11 15 分钟阅读
02 SDXL:环境安装、模型下载与图片生成实战 ARM + Ubuntu 24 + RTX 4090
ARM Ubuntu 24 RTX 4090 本地部署 SDXL环境安装、模型下载与图片生成实战一、前言最近在搭一套本地 AI 视频生成流水线整体思路是先用SDXL生成分镜图、角色图、关键帧再接视频模型做图生视频最后拼成完整内容因此第一步就是先把图片生成环境跑通。本文主要记录一次在ARM 架构服务器 Ubuntu 24 RTX 4090环境下本地部署SDXL并完成测试出图的全过程。目标不是一开始就追求最佳画质而是先把环境跑通先把结果产出来目前结论是环境已成功搭建本地模型能够加载CUDA 推理正常图片可以生成但生成效果还有进一步优化空间如果你也在做本地部署、小说分镜、图生视频或者批量内容生产这篇文章应该会有参考价值。二、环境说明本文测试环境如下CPUARM 架构飞腾 S5000C系统Ubuntu 24GPUNVIDIA GeForce RTX 4090 DPython3.10环境管理conda在这种环境下最关键的一步其实不是先装 SDXL而是先确认PyTorch 能否正常安装CUDA 是否可用GPU 张量运算是否正常这部分我已经提前验证通过所以本文直接进入SDXL 图片生成环境的安装与测试。三、安装 SDXL 依赖环境先进入 conda 环境conda activate aq_py310然后安装图片生成所需依赖python-mpipinstallnumpy pillow safetensors accelerate transformers diffusers huggingface_hub sentencepiece protobuf-ihttps://mirrors.aliyun.com/pypi/simple/这批依赖包含了diffusers模型推理主库transformers文本编码相关safetensors安全权重格式支持accelerate推理加速辅助huggingface_hub模型下载numpy / pillow图片处理基础依赖四、测试 Hugging Face 镜像是否可用由于直接访问 Hugging Face 官方站点速度通常比较慢所以这里使用镜像入口进行测试。先用下面代码检查镜像连通性fromhuggingface_hubimporthf_hub_downloadprint(start)pathhf_hub_download(repo_idstabilityai/stable-diffusion-xl-base-1.0,filenamemodel_index.json,endpointhttps://hf-mirror.com,)print(done:,path)如果能正常输出文件路径说明镜像入口是可用的可以继续下载模型。五、SDXL 模型下载不建议直接全量拉取1. 全量下载方式理论上可以直接通过下面代码把整个仓库下载下来fromhuggingface_hubimportsnapshot_download local_dir/work/models/stable-diffusion-xl-base-1.0print(Start downloading SDXL model...)pathsnapshot_download(repo_idstabilityai/stable-diffusion-xl-base-1.0,local_dirlocal_dir,local_dir_use_symlinksFalse,resume_downloadTrue,endpointhttps://hf-mirror.com,)print(Download finished.)print(Saved to:,path)2. 为什么不推荐全量下载实测全量下载体积非常大耗时长而且在网络不稳定时容易反复中断和重试。如果只是为了本地推理验证完全没必要把整个仓库所有文件都拉下来。所以更推荐的方式是只下载推理必需文件六、推荐方案最小集合下载下面这段代码会只下载 SDXL 推理所需的关键目录并过滤掉不必要的大文件格式fromhuggingface_hubimportsnapshot_download local_dir/work/models/sdxl-base-diffusersprint(Start downloading minimal SDXL model...)pathsnapshot_download(repo_idstabilityai/stable-diffusion-xl-base-1.0,local_dirlocal_dir,endpointhttps://hf-mirror.com,allow_patterns[model_index.json,scheduler/*,text_encoder/*,text_encoder_2/*,tokenizer/*,tokenizer_2/*,unet/*,vae/*,],ignore_patterns[*.bin,*.onnx,*.msgpack,*.h5,],)print(Download finished.)print(Saved to:,path)这种方式的优点很明显下载体积小很多更适合本地推理不容易因为全量下载而浪费时间更适合部署在服务器上下载完成后本地目录结构类似外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传如果这些目录都存在说明模型目录已经具备本地加载条件。其实本人最后因为网络的缘故是下载了最小集合(在windows下下载的)压缩之后使用网盘下载到服务器的实在是无奈七、编写本地测试脚本下面是一份固定参数版本的测试脚本用来快速验证本地模型是否能成功加载CUDA 是否能参与推理是否可以正常生成图片importosimporttimeimporttorchfromdiffusersimportStableDiffusionXLPipeline# # 固定参数区# MODEL_DIR/work/models/sdxl-base-diffusersOUTPUT_PATH../03-output/generated_image.pngPROMPT一名年轻的东方玄幻少年黑色长发青色长袍跪在宏伟的宗门大殿中央四周长老高坐神情冷漠气氛压抑电影感光影精致插画风高细节NEGATIVE_PROMPT模糊低质量畸形手多手指多肢体脸部畸形身体扭曲水印文字WIDTH768HEIGHT768STEPS20GUIDANCE_SCALE7.5SEED42DEVICEcudadefmain():print([1/5] Loading pipeline from local model directory...,flushTrue)t0time.time()pipeStableDiffusionXLPipeline.from_pretrained(MODEL_DIR,torch_dtypetorch.float16,use_safetensorsTrue,local_files_onlyTrue,)print(f[2/5] Pipeline loaded in{time.time()-t0:.2f}s,flushTrue)print([3/5] Moving pipeline to CUDA...,flushTrue)pipepipe.to(DEVICE)pipe.enable_attention_slicing()pipe.enable_vae_slicing()print([4/5] Generating image...,flushTrue)generatortorch.Generator(deviceDEVICE).manual_seed(SEED)t1time.time()resultpipe(promptPROMPT,negative_promptNEGATIVE_PROMPT,widthWIDTH,heightHEIGHT,num_inference_stepsSTEPS,guidance_scaleGUIDANCE_SCALE,generatorgenerator,)imageresult.images[0]print(f[5/5] Image generated in{time.time()-t1:.2f}s,flushTrue)os.makedirs(os.path.dirname(OUTPUT_PATH),exist_okTrue)image.save(OUTPUT_PATH)print(fSaved to:{OUTPUT_PATH},flushTrue)if__name____main__:main()八、运行方式执行命令CUDA_VISIBLE_DEVICES0python test_sdxl.py其中CUDA_VISIBLE_DEVICES0指定使用第 0 张显卡test_sdxl.py你保存的测试脚本文件名运行成功后图片会输出到../03-output/generated_image.png默认生成的感觉有点莫名其妙反正目前先能用就行九、测试结果从结果来看这套环境已经可以完成本地模型加载文本编码GPU 推理图片生成图片保存十、当前存在的问题虽然目前已经可以正常生成图片但从实际效果看仍然存在比较明显的问题1. 提示词理解不够稳定输入的是带场景、带叙事的描述但输出结果有时会偏成人物特写或风格跑偏。2. 构图控制较弱模型很容易优先生成“好看的人物头像”或半身像而不是严格按照分镜式场景描述来出图。3. 小说分镜提示词不够精确如果直接写“文学化描述”模型容易抓住“人物形象”而忽略“镜头语言”和“场景构图”。十一、为什么图片效果还不理想这一步其实很正常。因为现在只是完成了环境验证 基础出图并没有完成真正的“效果调优”。影响图片质量的因素还包括Prompt 写法Negative Prompt 写法分辨率推理步数guidance scaleseed模型风格偏好是否引入 LoRA / ControlNet / IP-Adapter 等控制模块十二、后续优化方向接下来建议重点从以下几个方向继续优化。1. 优化 Prompt 结构后续提示词不要再偏“小说文案”而要偏“镜头指令”。例如优先描述远景 / 中景 / 特写人物位置场景主体镜头类型风格与光影2. 增强 Negative Prompt不仅要压制畸形手、低质量还可以明确排除人物特写头像构图大头风格现代服装室内背景3. 调整参数可以继续尝试WIDTH / HEIGHTSTEPSGUIDANCE_SCALESEED4. 引入控制能力后续可以继续加入LoRA固定角色风格IP-Adapter参考人物形象ControlNet控制姿态和构图5. 为后续视频生成做准备图片稳定后可以继续接AnimateDiffStable Video DiffusionHunyuanVideo十三、总结本文完整记录了在ARM Ubuntu 24 RTX 4090环境下本地部署SDXL的过程包括依赖安装Hugging Face 镜像测试模型下载方式对比最小集合下载方案本地模型加载图片生成测试最终结果证明SDXL 本地环境已经成功跑通可以生成图片。虽然当前效果还不够理想但这并不影响它作为后续工作流的基础模块。对于做小说分镜、图生视频、批量内容生成的人来说这一步非常关键。后续如果继续往下做我会重点优化Prompt 模板场景控制分镜生成效果图片转视频工作流

更多文章