分享下 AMD 黑苹果使用 CoreML 加速 AI 画图需要折腾的点。

ml-stable-diffusion提供了 torch 到 coreml 的模型转换能力

  • 手动转换模型时需要添加--attention-implementation ORIGINAL

否则默认会用到自然语言引擎。

  • 手动转换模型需要给 torch 打补丁

AMD Hackintosh torch 依赖了 Intel MKL 。可以用 amdfriend 对动态库或二进制打补丁。

  • 无法正常图片的话需要手动转换模型并设置 CoreML 模型精度为 FP32 。
coreml_model = ct.convert(
    torchscript_module,
    convert_to="mlprogram",
    minimum_deployment_target=ct.target.macOS13,
    inputs=_get_coreml_inputs(sample_inputs, args),
    outputs=[ct.TensorType(name=name) for name in output_names],
    compute_units=ct.ComputeUnit[args.compute_unit],
    compute_precision=ct.precision.FLOAT32,
    # skip_model_load=True,
)

整个流程搞定后 6800xt 可以 30 秒可以跑完 50 次迭代速度介于 M1 和 M2 之间。