Day 0 支持 ERNIE-Image:在AMD Radeon AI PRO 3.4 安装 Diffusers 及依赖R9700 GPU上部署与验证文生图模型
Day 0 支持 ERNIE-Image:在AMD Radeon AI PRO 3.4 安装 Diffusers 及依赖R9700 GPU上部署与验证文生图模型
原文作者:Zijun Wei, Huaqiang Fang, AIG

摘 要
本文详细呈现了百度 ERNIE-Image 文生图大模型在 AMD Radeon AI PRO R9700(RDNA 4,32 GB GDDR6)上的部署与推理验证。AMD GPU 对该模型在发布Day 0即完成了验证,通过 Hugging Face Diffusers 框架和 ROCm 软件栈,ERNIE-Image 模型在 AMD 专业级 GPU 上实现了稳定运行,并通过enable_model_cpu_offload() 适配其 32 GB 显存限制,验证了 AMD GPU 对国产大模型生态的良好兼容性。
- Radeon AI PRO R9700(32 GB GDDR6):通过 enable_model_cpu_offload() 分时复用单卡,在不改写模型主体代码的前提下完成推理验证。

1.背景
1.1 ERNIE-Image 模型简介
ERNIE-Image 是百度研发的文生图(Text-to-Image)大模型,基于 Diffusion Transformer(DiT)架构,支持中英文双语 prompt 输入。该模型已通过 Hugging Face Diffusers PR (#13432 [1]) 提交合入 Diffusers 官方库。
ERNIE-Image 的模型架构包含以下组件:
| 组件 | 类型 | 大小 | 说明 |
| Transformer | ErnieImageTransformer2DModel | 15 GB | 扩散模型主干网络 |
| Text Encoder | Mistral3Model | 7.2 GB | 文本编码器(基于 Mistral 架构) |
| Prompt Enhancer (PE) | Ministral3ForCausalLM | 7.2 GB | Prompt 增强器(自动丰富用户输入) |
| VAE | AutoencoderKLFlux2 | 161 MB | 变分自编码器 |
| Scheduler | FlowMatchEulerDiscreteScheduler | - | 采样调度器 |
| 总计 | 约 29.5 GB(按权重文件大小估算) |
1.2 AMD Radeon AI PRO R9700
AMD Radeon AI PRO R9700 面向本地 AI 推理、模型开发以及其他高显存负载场景,定位是专业工作站级 AI GPU,属于 Radeon AI PRO R9000 系列。其 32 GB VRAM 与 ROCm 多 GPU 支持,使其更适合承载大语言模型和文生图等对显存容量要求较高的工作负载。
在核心规格上,R9700 基于RDNA 4 架构,配备 64 个 Compute Units、4096 个 Stream Processors、128 个 AI Accelerators 和 64 个 Ray Accelerators,单卡配备 32 GB GDDR6 显存,显存带宽 640 GB/s,并带有 64 MB Infinity Cache。
在板卡规格方面,R9700 采用PCIe 5.0 x16 接口,300W TBP,双槽主动散热,并提供 Linux 下的显存 ECC 支持。由于 ERNIE-Image 全量模型整体规模接近 29.5 GB,本次验证重点关注如何在单卡显存受限条件下完成稳定推理。
2. 环境配置
2.1 硬件环境
| 配置项 | 详情 |
| GPU | AMD Radeon AI PRO R9700 × 4 |
| GPU 架构 | RDNA 4 |
| 单卡显存 | 32 GB GDDR6 |
| 主机 ROCm 版本 | 7.2 |
2.2 软件环境
| 软件 | 版本 |
| Docker 镜像 | rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1 |
| PyTorch | 2.9.1+rocm7.2.0 |
| ROCm (HIP) | 7.2.26015 |
| Diffusers | 0.38.0.dev0(HsiaWinter/diffusers [2] add-ernie-image 分支) |
| Transformers | 5.5.3 |
| Accelerate | 1.13.0 |
| Python | 3.12 |
3. 部署步骤
3.1 拉取 Docker 镜像
从 Docker Hub 拉取与主机 ROCm 版本匹配的 PyTorch 官方镜像:
docker pull rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1
3.2 创建容器
创建具有 GPU 直通访问的 Docker 容器:
docker run -d --name ernie-image-radeon \ --device=/dev/kfd --device=/dev/dri \ --group-add video --group-add render \ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \ --shm-size=16G \ -v /path/to/workspace:/workspace \ rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1 \ sleep infinity
关键参数说明:
-
--device=/dev/kfd --device=/dev/dri:传入 AMD GPU 设备
-
--group-add video --group-add render:赋予容器 GPU 访问权限
-
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined:满足部分调试与运行时需求
-
--shm-size=16G:为推理阶段提供足够共享内存
-
-v /path/to/workspace:/workspace:将模型文件与脚本目录挂载到容器内
3.3 验证 GPU 可用性
进入容器后,验证 PyTorch 能够识别 R9700:
docker exec ernie-image-radeon python3 -c "import torchprint(f'PyTorch: {torch.__version__}')print(f'CUDA available: {torch.cuda.is_available()}')print(f'GPU count: {torch.cuda.device_count()}')print(f'GPU 0: {torch.cuda.get_device_name(0)}')"
输出:
PyTorch: 2.9.1+rocm7.2.0.git7e1940d4CUDA available: TrueGPU count: 4GPU 0: AMD Radeon AI PRO R9700
说明:ROCm 通过 HIP 提供 CUDA API 兼容层,因此 torch.cuda 接口在 AMD GPU 上可直接使用,无需修改代码。
3.4 安装 Diffusers 及依赖
docker exec ernie-image-radeon bash -c " git clone https://github.com/HsiaWinter/diffusers /workspace/diffusers-ernie cd /workspace/diffusers-ernie && git checkout add-ernie-image pip install -e . pip install accelerate Pillow transformers"
3.5 准备模型权重
将ERNIE-Image.tar 放入挂载目录后,在容器内解压:
docker exec ernie-image-radeon bash -c " cd /workspace && tar xf ERNIE-Image.tar"
解压后的目录结构:
ERNIE-Image/├── model_index.json├── transformer/ # DiT 主干 (15 GB)├── text_encoder/ # 文本编码器 (7.2 GB)├── pe/ # Prompt 增强器 (7.2 GB)├── pe_tokenizer/ # PE 分词器├── tokenizer/ # 文本分词器├── scheduler/ # 采样调度器└── vae/ # VAE 解码器 (161 MB)
- 推理测试
4.1 推理脚本
import random
import numpy as npimport torchfrom diffusers import ErnieImagePipeline
seed = random.randint(0, 100000)print(f"seed: {seed}")random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)
# 加载 Pipelinepipe = ErnieImagePipeline.from_pretrained( "/workspace/ERNIE-Image", torch_dtype=torch.bfloat16,)
# Radeon 适配:使用 CPU offload 分时复用单卡pipe.enable_model_cpu_offload()
pipe.transformer.eval()pipe.vae.eval()pipe.text_encoder.eval()pipe.pe.eval()
# 生成图片generator = torch.Generator(device="cpu").manual_seed(seed)
prompt_list = [ "a photo of a flower with a red petal and yellow center", "一朵鲜艳的玫瑰", "A photograph of the Straw Hat Pirates drawn on a glass whiteboard " "with a faded green marker, front view, 4K resolution."]
for idx, prompt in enumerate(prompt_list): output = pipe( prompt=prompt, height=1024, width=1024, num_inference_steps=50, guidance_scale=5.0, generator=generator, ) output.images[0].save(f"ernie_output_{idx+1}.png")print(f"Revised prompt: {output.revised_prompts}")
ROCm 适配说明:ROCm 通过 HIP 兼容层保留了 torch.cuda 这套接口,因此模型主体代码无需针对 AMD GPU 重新改写;但对于 R9700 这类显存较紧张的 GPU,仍需将设备放置策略从 pipe.to("cuda") 调整为 pipe.enable_model_cpu_offload(),并将 torch.Generator 设为 device="cpu",由 Diffusers 自动管理模块迁移。
4.2 运行结果
三组 prompt 均成功生成 1024×1024 高质量图片:
Prompt 1: "a photo of a flower with a red petal and yellow center"

红色花瓣黄色花心的花朵
Prompt 2: "一朵鲜艳的玫瑰"

鲜艳的玫瑰
Prompt 3: "A photograph of the Straw Hat Pirates drawn on a glass whiteboard with a faded green marker, front view, 4K resolution."

玻璃白板上的草帽海贼团
- 显存与设备放置策略
ERNIE-Image 全量模型体积接近单卡显存上限。对于 R9700 这类 32 GB 级专业显卡,直接将全部组件长期驻留在 GPU 上并不是更稳妥的部署方式,因此本文采用 Diffusers 的 enable_model_cpu_offload() 机制,在不同推理阶段按需调度主要组件。
该策略的执行逻辑可以概括为:
1. PE 在需要时加载到 GPU,完成 prompt 增强后释放。
2. Text Encoder 在文本编码阶段使用 GPU,随后释放。
3. Transformer 在去噪阶段占用 GPU。
4. VAE 在最终解码阶段使用 GPU。
这种方式的重点在于让单卡工作站 GPU 以较低改造成本完成 ERNIE-Image 的可运行部署,同时保持脚本主体与标准 Diffusers 用法的一致性。
- 关键技术要点
6.1 ROCm 的 CUDA 接口兼容层
得益于 ROCm 的 HIP(Heterogeneous Interface for Portability)兼容层,基于 PyTorch 的许多 CUDA 风格接口可以直接在 AMD GPU 上使用,例如:
-
torch.cuda.is_available() → 返回 True
-
model.to("cuda") → 在显存充足时可直接映射到 AMD GPU
-
torch.cuda.manual_seed_all() → 正常工作
-
torch.cuda.get_device_name(0) → 可正确识别设备
不过,接口兼容并不意味着同一套设备放置策略适用于所有显存规格。对于 R9700 这类 32 GB 级专业显卡,仍需结合 enable_model_cpu_offload() 进行部署,才能兼顾可运行性与部署稳定性。
6.2 适配注意事项
从 NVIDIA 平台迁移到 AMD 平台时,需注意以下几点:
| 项目 | NVIDIA (CUDA) | AMD (ROCm) | 处理方式 |
| CUBLAS_WORKSPACE_CONFIG | 需要设置 | 不适用 | 移除 |
| torch.backends.cudnn.* | cuDNN 配置 | 使用 MIOpen | 移除相关设置 |
| torch.use_deterministic_algorithms | 可用 | 部分支持 | 按需移除 |
| torch.cuda.* API | 原生支持 | HIP 兼容层 | 无需修改 |
| Attention | Flash Attention / cuDNN | AOTriton | 自动选择 |
6.3 Docker 镜像选择
对于 R9700,本文验证可用的 PyTorch 镜像为:
- rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1
建议优先使用与主机 ROCm 大版本一致的稳定版镜像,以降低驱动与容器之间的兼容性风险。
- 总结
本次验证表明,ERNIE-Image 在 AMD Radeon AI PRO R9700 上可以基于 ROCm 正常运行,整体兼容性良好。
从实际适配结果看,PyTorch + Diffusers 在 ROCm 平台上的迁移成本较低:模型加载、推理和图片生成流程均可直接打通,大部分 torch.cuda.* 接口可通过 HIP 兼容层继续使用。需要调整的主要是少量 NVIDIA/CUDA 专属配置,并在显存压力较大时使用 enable_model_cpu_offload()。
总体而言,ROCm 已具备运行这类 Diffusers 文生图模型的可用兼容性
附录:快速复现指南
Radeon AI PRO R9700 快速复现
# 1. 拉取镜像docker pull rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1
# 2. 创建容器docker run -d --name ernie-image-radeon \ --device=/dev/kfd --device=/dev/dri \ --group-add video --group-add render \ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \ --shm-size=16G \ -v /path/to/workspace:/workspace \ rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1 \ sleep infinity
# 3. 安装依赖docker exec ernie-image-radeon bash -c " git clone https://github.com/HsiaWinter/diffusers /workspace/diffusers-ernie cd /workspace/diffusers-ernie && git checkout add-ernie-image pip install -e . pip install accelerate Pillow transformers"
# 4. 解压模型并运行推理(注意脚本中需使用 enable_model_cpu_offload)docker exec ernie-image-radeon bash -c " cd /workspace && tar xf ERNIE-Image.tar python3 test_ernie_image_radeon.py"
关键点:推理脚本中使用 pipe.enable_model_cpu_offload() 替代 pipe.to("cuda"),torch.Generator 使用 device="cpu"。
测试日期:2026年4月13日 测试平台:AMD Radeon AI PRO R9700 4-GPU Workstation ROCm 版本:7.2 | PyTorch 版本:2.9.1+rocm7.2.0
更多资源
如果你希望进一步把实践经验转化为开源贡献,除了本文的部署与验证内容,近期飞桨黑客松相关活动也在持续进行中。欢迎对大模型、推理部署和开源实践感兴趣的开发者积极关注并报名参与!



<< 滑动查看下一张图片 >>
参考链接
[1] #13432: https://github.com/huggingface/diffusers/pull/13432
[2] HsiaWinter/diffusers: https://github.com/HsiaWinter/diffusers
更多推荐


所有评论(0)