AMD Ryzen AI Max 395 上跑 Flux 图像生成:从零到一的完整踩坑指南

历时数天,踩遍 ROCm、bitsandbytes、triton 的坑,终于让 FLUX.1-dev 在 AMD 平台上成功生成第一张图。

写在前面

最近在 AMD Ryzen AI Max 395(RDNA 3.5 架构,gfx1151)上尝试部署 Flux 图像生成模型。本以为有 ROCm 加持会顺利很多,结果从环境配置到模型运行,一路踩坑不断。这篇文章记录了完整的折腾过程,希望能帮到同样在 AMD 平台上玩 AI 生成的朋友。

硬件环境

  • CPU/GPU:AMD Ryzen AI Max 395(集成 Radeon 8060S 显卡,RDNA 3.5 架构)
  • 显存:统一内存架构,容量充足(大显存优势)
  • 系统:Ubuntu 24.04 (Noble)

第一阶段:ROCm 环境配置

1.1 安装 ROCm

AMD 官方推荐使用 amdgpu-install 工具来安装 ROCm,不要手动拼包名。

1
2
3
4
5
6
7
8
9
10
11
12
# 下载 amdgpu-install(Ubuntu 24.04 版本)
wget https://repo.radeon.com/amdgpu-install/6.1.3/ubuntu/noble/amdgpu-install_6.1.60103-1_all.deb
sudo apt install ./amdgpu-install_6.1.60103-1_all.deb -y

# 安装 ROCm 完整开发套件
sudo amdgpu-install -y --usecase=graphics,rocm

# 将用户加入必要组
sudo usermod -a -G render,video,rocm $LOGNAME

# 重启生效
sudo reboot

1.2 踩坑记录:apt 源问题

如果你的 apt update 报错,通常是第三方源(如 Chrome、Docker)的公钥问题。可以暂时禁用它们:

1
2
3
sudo mv /etc/apt/sources.list.d/qqbrowser-browser.list /etc/apt/sources.list.d/qqbrowser-browser.list.bak
sudo rm -rf /var/lib/apt/lists/*
sudo apt update

找到 Chrome 源藏在 qqbrowser-browser.list 里,这个问题折腾了我好一会儿。

第二阶段:Python 环境与依赖管理

2.1 使用 uv 管理环境

uv 是一个极快的 Python 包管理器,比 pip 快很多。

1
2
3
4
5
6
7
8
9
# 创建虚拟环境
uv venv
source .venv/bin/activate

# 安装 Flux 核心依赖
uv add diffusers transformers accelerate sentencepiece protobuf

# 安装 PyTorch ROCm 版本(关键!)
uv add torch torchvision torchaudio --index https://download.pytorch.org/whl/rocm7.2

2.2 踩坑记录:bitsandbytes 编译地狱

bitsandbytes 是 Flux 量化加速的关键库,但在 AMD 平台上安装是一场噩梦。

第一次尝试:直接 uv add bitsandbytes → 失败(不支持 AMD)

第二次尝试:从 AMD 官方 ROCm 分支安装

1
uv add "bitsandbytes @ git+https://github.com/ROCm/bitsandbytes.git"

安装成功,但运行时找不到 libbitsandbytes_rocm72.so

第三次尝试:从源码编译

1
2
3
4
5
git clone https://github.com/bitsandbytes-foundation/bitsandbytes.git
cd bitsandbytes
git checkout 0.49.1
cmake -DCOMPUTE_BACKEND=hip -DBNB_ROCM_ARCH="gfx1151" -S . -B build
cmake --build build -j$(nproc)

然后遇到了 cmake: command not found → 安装 cmake:

1
sudo apt install cmake build-essential

接着遇到 setuptools>=77.0.0packaging>=24.2 的兼容性问题:

1
2
# 降级 setuptools 到兼容版本
uv pip install "setuptools<77" --force-reinstall

然后是 pyproject.toml 格式问题:

  • license = "MIT" 改为 license = { text = "MIT" }
  • 删除 license-files 字段

最终成功安装

1
uv pip install ./bitsandbytes --no-build-isolation --no-cache-dir

教训:在 AMD 平台上编译 bitsandbytes,需要先安装所有构建依赖(cmake、scikit_build_core、packaging 等),然后用 --no-build-isolation 绕过 uv 的构建隔离。

第三阶段:运行 Flux 模型

3.1 初始代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import torch
from diffusers import FluxPipeline
import os

os.environ["TORCHDYNAMO"] = "0"
os.environ["PYTORCH_JIT"] = "0"

model_id_or_path = "/path/to/FLUX.1-dev/"

pipe = FluxPipeline.from_pretrained(
model_id_or_path,
torch_dtype=torch.bfloat16
)

# 大显存模式(移除了 cpu_offload)
pipe = pipe.to("cuda")
pipe.vae.enable_slicing()

prompt = "A high-tech laboratory with glowing blue lights"

image = pipe(
prompt,
height=512,
width=512,
guidance_scale=3.5,
num_inference_steps=20,
max_sequence_length=512,
generator=torch.Generator("cuda").manual_seed(42)
).images[0]

image.save("flux_output.png")

3.2 踩坑记录:triton 相关错误

错误信息

1
AttributeError: module 'triton' has no attribute 'language'

环境里安装了 triton-rocm 3.7.1,但与 PyTorch 版本不兼容。

解决方案

1
uv pip uninstall triton-rocm

卸载后,PyTorch 自动回退到不使用 triton 的模式,同时出现警告但可以运行:

1
W0815 16:51:47.836000 triton not found; flop counting will not work

3.3 最终成果

模型成功加载,生成一张 512x512 的图像:

  • 时间:28 步约 10 分 31 秒(CPU Offload 模式)
  • 显存:充足,无需优化卸载

性能优化建议

如果你也是 AMD Max 395 大显存用户:

优化项 操作 预期效果
减少步数 num_inference_steps=20 或更少 速度提升 30-40%
启用 ROCm 调优 export PYTORCH_TUNABLEOP_ENABLED=1 后续运行加快
移除 CPU Offload 注释 enable_model_cpu_offload() 速度提升数倍
换用 Schnell 模型 black-forest-labs/FLUX.1-schnell,4 步即可 速度提升 5-10 倍

总结:AMD 平台跑 AI 的得与失

优势

  • ROCm 生态日趋成熟,PyTorch 官方支持良好
  • Ryzen AI Max 395 的统一内存架构,大显存优势明显
  • 性价比高,无需高价购买 NVIDIA 显卡

挑战

  • bitsandbytes 编译困难:需要手动编译,依赖众多
  • triton 兼容性问题:AMD 版本的 triton 与 PyTorch 容易冲突
  • 社区支持较少:遇到问题需要自己探索,参考文档有限
  • 性能优化需要更多调优:无法直接套用 NVIDIA 的最佳实践

核心经验

  1. 使用 amdgpu-install 安装 ROCm,不要手动拼包名
  2. bitsandbytes 用源码编译,别指望预编译包
  3. 卸载 triton-rocm,如果它导致 AttributeError
  4. 大显存环境下移除 CPU Offload,直接用 pipe.to("cuda")
  5. 善用 --no-build-isolation 绕过 uv 的构建隔离

附录:快速命令清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 环境准备
sudo apt install cmake build-essential
sudo amdgpu-install -y --usecase=graphics,rocm

# Python 环境
uv venv && source .venv/bin/activate
uv add diffusers transformers accelerate sentencepiece protobuf
uv add torch torchvision torchaudio --index https://download.pytorch.org/whl/rocm7.2

# 编译 bitsandbytes
git clone https://github.com/bitsandbytes-foundation/bitsandbytes.git
cd bitsandbytes && git checkout 0.49.1
cmake -DCOMPUTE_BACKEND=hip -DBNB_ROCM_ARCH="gfx1151" -S . -B build
cmake --build build -j$(nproc)
uv pip install "setuptools<77"
uv pip install ./bitsandbytes --no-build-isolation --no-cache-dir

# 运行
export PYTORCH_TUNABLEOP_ENABLED=1
python img_01.py

希望这篇记录能帮到正在 AMD 平台上折腾 AI 生成的你。如果遇到其他问题,欢迎在评论区交流讨论!