<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[R9700  comfyUI ROCm 10.x up 有人跑通嗎？ 我看還有不少 issue 求大佬帶飛]]></title><description><![CDATA[<p dir="auto">[gfx1201] <code>hip</code> 後端缺少無 <code>_dtype</code> 後綴的 dequant 函式 —— 靜默退回慢速單執行緒 <code>eager</code> 後端,導致模型載入異常緩慢</p>
<p dir="auto"><strong>回報的 repo:</strong> <code>Comfy-Org/comfy-kitchen</code></p>
<hr />
<h2>摘要</h2>
<p dir="auto">在 AMD Radeon AI PRO R9700(RDNA4,<code>gfx1201</code>)上,載入任何權重會經過 <code>comfy/ops.py</code> 的 <code>_load_quantized_module()</code> 路徑的量化模型,對於數十 GB 等級的模型會需要 <strong>10 到 60 分鐘以上</strong>,整段時間單一 CPU 核心會被釘在 ~95-100% 使用率,而 GPU 使用率始終接近 0%。</p>
<p dir="auto"><strong>根因</strong>:<code>comfy_kitchen</code> 的 <code>hip</code> 後端只實作了幾個反量化(dequantize)函式的 <code>_dtype</code> 後綴版本,卻沒有實作 <code>comfy/ops.py</code> 在載入權重時真正呼叫的「無後綴」(bare)版本。由於 <code>BackendRegistry</code> 的優先序是 <code>["hip", "cuda", "triton", "eager"]</code>,而 <code>hip</code> 沒有把這個無後綴函式名稱註冊為自己的能力,dispatch 機制找不到 <code>hip</code> 候選,只好一路退回到 <code>eager</code>——一個純 Python/通用 PyTorch 實作,完全沒有 ROCm 加速——而且是<strong>對每一個權重張量都這樣做</strong>。</p>
<p dir="auto">這個問題在一個完全乾淨的安裝環境下就能重現(官方 <code>rocm/pytorch:rocm10.0_ubuntu26.04_py3.14_pytorch_release_2.13.0</code> Docker image、<code>comfy-kitchen==0.2.35</code>、依規定額外裝好 <code>amd-torch-device-gfx1201==2.13.0+rocm10.0.0</code>),所以不是環境設定錯誤造成的。</p>
<h2>環境資訊</h2>
<ul>
<li>GPU:AMD Radeon AI PRO R9700(RDNA4,<code>gfx1201</code>)</li>
<li>OS/Image:<code>rocm/pytorch:rocm10.0_ubuntu26.04_py3.14_pytorch_release_2.13.0</code>(AMD 官方 image)</li>
<li>torch:<code>2.13.0+rocm10.0.0</code>(+ 另外裝 <code>amd-torch-device-gfx1201==2.13.0+rocm10.0.0</code>,這是讓任何 kernel 能正常派發運算所必需的——詳見下方備註)</li>
<li>comfy-kitchen:<code>0.2.35</code>(在 <code>0.2.10</code> 上也重現)</li>
<li>ComfyUI:2026-09-20 當下的 <code>master</code> 分支</li>
<li>涉及的自訂節點:<code>ComfyUI_MinimaxH3HybridLoader</code> / <code>ComfyUI-MiniMax-H3-Turbo</code>(MiniMax H3 影片模型,<code>int8_convrot</code> 量化的 ~25GB 文字編碼器 + ~20GB 擴散模型 transformer),但<strong>同樣的</strong>「Found quantization metadata version 1」/「Using MixedPrecisionOps for text encoder」卡死症狀,也有其他使用者在載入完全不相關的模型(例如 Pixal3D/Trellis2)、同樣是 <code>gfx1201</code> 架構上獨立回報過——見下方「相關回報」。所以這看起來不是特定模型才有的問題。</li>
</ul>
<h2>重現步驟</h2>
<ol>
<li>在 <code>gfx1201</code> 機器上,安裝乾淨的 <code>comfy-kitchen==0.2.35</code> + 對應的 ROCm-10.0 torch 全套(<code>torch</code>、<code>amd-torch-device-gfx1201</code>、<code>rocm-sdk-core</code>/<code>rocm-sdk-libraries</code>/<code>rocm-sdk-device-gfx1201</code>,版本都對齊 <code>==...+rocm10.0.0</code>/<code>10.0.0</code>)。</li>
<li>確認基本運算正常(<code>torch.ones(4,4,device='cuda')+1</code>、fp16 矩陣乘法)——這些都會成功,確認基礎安裝沒問題。</li>
<li>載入任何權重使用 <code>comfy.ops.MixedPrecisionOps</code>、採 <code>int8_convrot</code>(或單純 <code>int8</code>)量化、且權重數量不小(數百到數千個張量)的模型。</li>
<li>觀察 log 卡在這裡不動:<pre><code>Found quantization metadata version 1
Using MixedPrecisionOps for text encoder
CLIP/text encoder model load device: cuda:0, offload device: cpu, current: cpu, dtype: torch.float16
Requested to load MiniMaxH3TEModel_
Model MiniMaxH3TEModel_ prepared for dynamic VRAM loading. 25882MB Staged. 0 patches attached. Force pre-loaded 310 weights: 1272 KB.
</code></pre>
</li>
<li>對 ComfyUI process 跑 <code>ps -o pid,etimes,time,pcpu</code>,會看到單一執行緒整段時間都釘在 ~90-100% CPU;<code>rocm-smi --showuse</code> 則顯示 GPU 使用率全程只有 ~0-3%。</li>
</ol>
<h2>根因分析</h2>
<pre><code class="language-python">&gt;&gt;&gt; import comfy_kitchen
&gt;&gt;&gt; from comfy_kitchen.registry import registry
&gt;&gt;&gt; registry._priority
['hip', 'cuda', 'triton', 'eager']
&gt;&gt;&gt; sorted(registry._capabilities['eager'] - registry._capabilities['hip'])
['dequantize_int8_convrot_weight', 'dequantize_int8_embedding', 'dequantize_int8_simple',
 'dequantize_mxfp8', 'dequantize_nvfp4', 'prepare_int4_weight_for_int8_linear',
 'quantize_mxfp8', 'quantize_nvfp4', 'rotate_int8_convrot_weight',
 'scaled_mm_mxfp8', 'scaled_mm_nvfp4']
</code></pre>
<p dir="auto"><code>comfy_kitchen/backends/hip/__init__.py</code> 定義了 <code>dequantize_int8_convrot_weight_dtype(...)</code> 跟 <code>dequantize_int8_simple_dtype(...)</code>,但從來沒有註冊 <code>comfy/ops.py</code> 模型載入路徑(<code>_load_quantized_module</code> → 權重反量化/重新量化)實際呼叫的無後綴版本 <code>dequantize_int8_convrot_weight</code> / <code>dequantize_int8_simple</code>。反觀 <code>comfy_kitchen</code> 自己的 <code>cuda</code> 後端<strong>確實有</strong>把這兩個無後綴函式實作成一行的 wrapper,內部呼叫 <code>_dtype</code> 版本並預設輸出 <code>float32</code>:</p>
<pre><code class="language-python"># backends/cuda/__init__.py
def dequantize_int8_convrot_weight(q, scale, group_size) -&gt; torch.Tensor:
    return dequantize_int8_convrot_weight_dtype(q, scale, group_size, DTYPE_TO_CODE[torch.float32])
</code></pre>
<p dir="auto"><code>hip</code> 後端沒有對應的實作——這個無後綴的函式名稱根本沒出現在它的 <code>_build_constraints()</code> 能力字典裡——所以 dispatch 對這個函式名稱找不到任何 <code>hip</code> 候選,只好一路掉到優先序清單最後的 <code>eager</code>。</p>
<h2>已驗證的部分修法</h2>
<p dir="auto">把同樣的一行 wrapper 模式加進 <code>comfy_kitchen/backends/hip/__init__.py</code>(兩個函式都加),並在 <code>_build_constraints()</code> 補上對應的能力條目,<strong>確實有效</strong>——直接驗證過:</p>
<pre><code class="language-python">&gt;&gt;&gt; import comfy_kitchen
&gt;&gt;&gt; from comfy_kitchen.registry import registry
&gt;&gt;&gt; 'dequantize_int8_convrot_weight' in registry._capabilities['hip']
True
&gt;&gt;&gt; comfy_kitchen.backends.hip.dequantize_int8_convrot_weight(q, scale, 64)  # 在 GPU 上跑,輸出正確
</code></pre>
<pre><code class="language-python"># 加在 backends/hip/__init__.py 裡,dequantize_int8_simple_dtype 後面:
def dequantize_int8_simple(q: torch.Tensor, scale: torch.Tensor) -&gt; torch.Tensor:
    return dequantize_int8_simple_dtype(q, scale, DTYPE_TO_CODE[torch.float32])

# 加在 dequantize_int8_convrot_weight_dtype 後面:
def dequantize_int8_convrot_weight(q: torch.Tensor, scale: torch.Tensor, group_size: int) -&gt; torch.Tensor:
    return dequantize_int8_convrot_weight_dtype(q, scale, group_size, DTYPE_TO_CODE[torch.float32])
</code></pre>
<p dir="auto">(另外在 <code>_build_constraints()</code> 裡加對應的 <code>"dequantize_int8_simple"</code> / <code>"dequantize_int8_convrot_weight"</code> 條目,內容照抄 <code>_dtype</code> 版本、只是拿掉 <code>output_dtype_code</code> 這個參數。)</p>
<p dir="auto"><strong>但這只解決了一部分的卡死問題。</strong> 套用這個修法之後,同一個模型還是會在同一行 log 卡住 30 分鐘以上。<code>dequantize_int8_embedding</code> <strong>在 <code>hip</code> 完全沒有實作</strong>(連 <code>_dtype</code> 版本都沒有可以借用)——這幾乎可以確定是文字編碼器載入卡住的真正原因,因為文字編碼器有很大的 embedding 表,而這個函式在 <code>hip</code> 上完全沒有加速路徑。這個需要真正寫一份原生實作,不是包一層 wrapper 就能解決,已經超出我自己能貢獻的範圍。</p>
<h2>附註:重現過程中會先卡到的另一個、不相關的問題</h2>
<p dir="auto">給任何想重現這個問題的人:在全新安裝的 ROCm 10.0 環境下,<code>torch.cuda.is_available()</code> 會回傳 <code>True</code>、裝置名稱也能正確解析,但<strong>任何</strong> kernel 呼叫(包括 <code>torch.ones(4,4,device='cuda')+1</code>)都會噴 <code>hipErrorInvalidImage</code>,除非<strong>額外</strong>裝上 <code>amd-torch-device-gfx1201==2.13.0+rocm10.0.0</code>(跟 <code>torch</code>/<code>rocm-sdk-device-gfx1201</code> 一起裝)。這是一個獨立的套件,裝的是 torch 給這個確切架構用的外部「kernel pack」——官方安裝文件並沒有明顯提到這點。這不是 <code>comfy-kitchen</code> 的 bug,只是在這顆晶片上除錯任何東西之前,值得先知道的前置條件。</p>
<h2>相關回報(獨立佐證這是 <code>gfx1201</code> 這一整代的通病,不是特定模型才有)</h2>
<ul>
<li><a href="https://github.com/Comfy-Org/ComfyUI/issues/15001" rel="nofollow ugc">Comfy-Org/ComfyUI#15001</a> —— 同樣的架構(R9700/gfx1201)、同樣的「Found quantization metadata version 1」卡死訊號,但是不同模型(LTX 2.3)。那邊的根因被追到是 mmap-backed 的 <code>.to(device)</code> 額外開銷(每個張量固定約 0.5 秒),而不是這個 dispatch 缺口——很可能是這個架構上<strong>第二個、獨立的</strong>慢速路徑,不是同一個 bug,因為我們這邊套用 <code>--disable-mmap</code> 並沒有解決卡死問題。</li>
<li>r/comfyui 上一篇討論透過 <code>comfy-kitchen</code> 的 <code>hip</code> 後端跑 Pixal3D/Trellis2 的文章:在 RDNA3(7900XT,<code>gfx1100</code>)上 93.99 秒就跑完,完全正常;但在 RDNA4(RX 9070,<code>gfx1201</code>)上,同一段 <code>_naf_hr</code> 程式碼路徑卡了 3 分鐘以上,而且逐步計時顯示 RDNA4 特有的變慢集中在特定的張量形狀呼叫上。同樣的世代規律:RDNA3 正常、RDNA4(<code>gfx1201</code>)壞掉。</li>
<li><a href="https://github.com/ROCm/TheRock/issues/7992" rel="nofollow ugc">ROCm/TheRock#7992</a>、<a href="https://github.com/ROCm/TheRock/issues/7861" rel="nofollow ugc">#7861</a>、<a href="https://github.com/ROCm/TheRock/issues/7839" rel="nofollow ugc">#7839</a> —— 另外幾個跟 ROCm 10.0/torch 2.13「kernel pack」架構有關的 <code>gfx1201</code>/<code>gfx1151</code> kernel dispatch 回歸問題,其中多個都回報 <code>7.14.0</code> 是最後一個已知正常的版本。</li>
</ul>
<h2>請求</h2>
<ul>
<li>把缺的無後綴 <code>dequantize_int8_convrot_weight</code> / <code>dequantize_int8_simple</code> wrapper 加進 <code>hip</code> 後端(修法如上,如果有幫助我很樂意開 PR)。</li>
<li>應該需要一份原生(或包裝過)的 <code>hip</code> 版 <code>dequantize_int8_embedding</code> 實作,才能完全解決 <code>gfx1201</code> 上有量化 embedding 表的模型(例如文字編碼器)的載入卡死問題。</li>
<li>更廣泛地說:能不能讓這類 dispatch 缺口變得「看得見」(例如第一次某個函式從「應該要加速」的後端掉到 <code>eager</code> 時印一行警告),而不是完全靜默?這樣可以省下很多除錯時間——現在的 log 完全沒有任何跡象顯示一個 25GB 的模型即將被丟進通用 Python fallback 路徑處理。</li>
</ul>
<h2>備註</h2>
<p dir="auto">我看到 #183(還沒合併)已經在針對 gfx1200/gfx1201、專門為 H3 形狀的 projection 調校 HIP INT8 ConvRot 的計算 kernel(<code>@qweqweewqe7-create</code>)——那是同一條程式碼路徑的不同層次(kernel 幾何/效能調校,前提是 dispatch 真的有走到 <code>hip</code>),跟這個 dispatch 缺口是不同問題,但特別標記出來讓大家看到,因為顯然是同一個問題領域跟同一款硬體。如果能讓這兩邊的努力互相對上,應該會很有幫助。</p>
]]></description><link>https://lcz.me/topic/1841</link><generator>RSS for Node</generator><lastBuildDate>Thu, 22 Oct 2026 19:58:56 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1841.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Sep 2026 11:26:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to R9700  comfyUI ROCm 10.x up 有人跑通嗎？ 我看還有不少 issue 求大佬帶飛 on Tue, 22 Sep 2026 02:58:44 GMT]]></title><description><![CDATA[<p dir="auto">请问用4090 48G 在linux环境 也有这个问题吗？</p>
]]></description><link>https://lcz.me/post/19929</link><guid isPermaLink="true">https://lcz.me/post/19929</guid><dc:creator><![CDATA[David Wang]]></dc:creator><pubDate>Tue, 22 Sep 2026 02:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to R9700  comfyUI ROCm 10.x up 有人跑通嗎？ 我看還有不少 issue 求大佬帶飛 on Mon, 21 Sep 2026 12:58:45 GMT]]></title><description><![CDATA[<p dir="auto">我弟这个话题太深奥，论坛没几个看得懂的<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f602.png?v=ec85ec55bc1" class="not-responsive emoji emoji-android emoji--joy" style="height:1.4em;width:auto;vertical-align:middle" title="😂" alt="😂" /></p>
]]></description><link>https://lcz.me/post/19784</link><guid isPermaLink="true">https://lcz.me/post/19784</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Mon, 21 Sep 2026 12:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to R9700  comfyUI ROCm 10.x up 有人跑通嗎？ 我看還有不少 issue 求大佬帶飛 on Sun, 20 Sep 2026 13:02:23 GMT]]></title><description><![CDATA[<p dir="auto">这看着就是 <strong>comfy-kitchen hip 后端的 capability 注册缺失</strong>，不是你的环境问题——你定位到 bare vs <code>_dtype</code> 后缀这一步，方向是对的。</p>
<p dir="auto">把机制说完整一点：<code>comfy/ops.py</code> 的 <code>_load_quantized_module()</code> 调的是<strong>无后缀</strong>函数名，<code>BackendRegistry</code> 按 <code>["hip","cuda","triton","eager"]</code> 找候选；hip 只在带 <code>_dtype</code> 后缀的名字上注册了能力，于是候选里没有 hip，一路退到 eager，而且<strong>对每个权重张量都重试一次</strong>这个回退——几十 GB 模型钉死一个核 10–60 分钟、GPU 全程 0%，症状完全对得上。</p>
<p dir="auto">可做的几步：</p>
<ol>
<li><strong>先把差异坐实</strong>：在干净环境里把 hip 后端实际注册的算子名列出来，和 <code>comfy/ops.py</code> 里真正被调用的 bare 名对一遍，确认差的就是那几个 dequant 的 bare alias（<code>hip</code> 有 <code>xxx_dtype</code>、没有 <code>xxx</code>）。这一步的证据比"加载很慢"更能让上游认账。</li>
<li><strong>临时绕过（不改上游代码）</strong>：在 ComfyUI 启动前 monkeypatch，把 hip 后端的 <code>_dtype</code> 实现注册一个无后缀别名进去：<br />
<code>reg.register("hip", bare_name, getattr(hip_impl, dtype_name))</code><br />
具体签名以 <code>comfy-kitchen==0.2.35</code> 的 <code>BackendRegistry</code> 为准。注册成功后 dispatch 会命中 hip，不再退 eager。这是验证根因最快的方式。</li>
<li><strong>pin 版本 + 报上游</strong>：ROCm 10.0 + torch 2.13 + py3.14 + comfy-kitchen 0.2.35 + 当天 master 是极前沿组合，能复现就尽快给 <code>Comfy-Org/comfy-kitchen</code> 开 issue，附最小复现（干净 image、版本号、缺失的 bare/dtype 名清单）。这种注册缺失上游补起来通常很快，等它比你自己维护 patch 省事。</li>
<li><strong>别把希望押在单卡 32G</strong>：25GB TE + 20GB DiT，就算 dequant 修好，加载/推理仍要 offload，速度受 PCIe 和系统内存约束；修好 bare dispatch 解决的是"加载 10–60 分钟"，不等于全流程飞快。</li>
<li><strong>合并报告</strong>：Trellis2/Pixal3D 在 gfx1201 上的独立回报告诉你这不是特定模型，开 issue 时把这些也挂上，说明是后端注册层的系统性问题。</li>
</ol>
]]></description><link>https://lcz.me/post/19543</link><guid isPermaLink="true">https://lcz.me/post/19543</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Sun, 20 Sep 2026 13:02:23 GMT</pubDate></item></channel></rss>