2026年5月2日 星期六

Ryzen 8845HS w/ Radeon 780M的LLM性能測試

 Rentry的易讀表格版本:https://rentry.co/5utrg5cy

LLM性能測試

硬體

GMKTek K8 Plus
CPU: AMD Ryzen 8845HS
RAM: 64GB DDR5-5600 SODIMM(雙通道)
GPU: Radeon 780m 8GB(透過BIOS設置VRAM大小)
OS: Ubuntu 24.04

系統配置調整:

/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.gttsize=49152 ttm.pages_limit=12582912"
主要是讓單一程序可以使用最多48GB的記憶體。

測試軟體:llama-benchy 0.3.7
指令
llama-benchy --base-url <api url> --model zerofata/G4-MeroMero-26B-A4B --depth 0 4096 8192 16384 32768 --tg 128 --latency-mode generation --enable-prefix-caching
測試模型:G4-MeroMero-26B-A4B Q5_K_M量化版本(Gamma 4 26B A4B的微調版本)

測試標的

koboldcpp-1.112.2

啟動指令
./koboldcpp-linux-x64-nocuda --model ./G4-MeroMero-26B-A4B-Q5_K_M.gguf --host 0.0.0.0 --threads 7 --usevulkan 0 --blasbatchsize 2048 --gpulayers 49 --contextsize 32768 --flashattention --skiplauncher --jinja --mmproj ./mmproj-Gemma-4-26b-a4b-f16.gguf --mlock --usemmap --jinjatemplate ./chat_template.jinja

model test t/s peak t/s ttfr (ms) est_ppt (ms) e2e_ttft (ms)
zerofata/G4-MeroMero-26B-A4B pp2048 419.95 ± 2.39
5288.49 ± 27.66 4879.28 ± 27.66 5288.49 ± 27.66
zerofata/G4-MeroMero-26B-A4B tg128 18.41 ± 0.04 20.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d4096 384.90 ± 3.16
11054.21 ± 87.02 10644.99 ± 87.02 11054.21 ± 87.02
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d4096 17.54 ± 0.05 19.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d4096 350.57 ± 2.01
6251.27 ± 33.44 5842.05 ± 33.44 6251.27 ± 33.44
zerofata/G4-MeroMero-26B-A4B tg128 @ d4096 17.30 ± 0.02 19.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d8192 357.27 ± 1.90
23341.93 ± 122.05 22932.71 ± 122.05 23341.93 ± 122.05
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d8192 16.97 ± 0.02 18.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d8192 313.21 ± 0.19
6947.91 ± 3.87 6538.69 ± 3.87 6947.91 ± 3.87
zerofata/G4-MeroMero-26B-A4B tg128 @ d8192 16.75 ± 0.02 18.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d16384 311.77 ± 1.46
52964.47 ± 245.13 52555.26 ± 245.13 52964.47 ± 245.13
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d16384 16.19 ± 0.08 17.33 ± 0.47


zerofata/G4-MeroMero-26B-A4B pp2048 @ d16384 254.26 ± 0.49
8464.01 ± 15.68 8054.79 ± 15.68 8464.01 ± 15.68
zerofata/G4-MeroMero-26B-A4B tg128 @ d16384 15.94 ± 0.02 17.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d32768 261.11 ± 1.65
125417.69 ± 791.20 125008.48 ± 791.20 125417.69 ± 791.20
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d32768 14.70 ± 0.02 16.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d32768 142.70 ± 1.09
14761.37 ± 109.20 14352.15 ± 109.20 14761.37 ± 109.20
zerofata/G4-MeroMero-26B-A4B tg128 @ d32768 14.77 ± 0.02 16.00 ± 0.00


llamacpp-rocm b1256

啟動指令
./llamacpp-rocm/llama-server -m ./G4-MeroMero-26B-A4B-Q5_K_M.gguf -ngl 99 -c 32768 --temp 1 --top-k 64 --top-p 0.95 --host 0.0.0.0 -mm ./mmproj-Gemma-4-26b-a4b-f16.gguf --chat-template-file ./chat_template.jinja
在16k的測試出現異常,可能是模型崩潰與重複輸出造成。

model test t/s peak t/s ttfr (ms) est_ppt (ms) e2e_ttft (ms)
zerofata/G4-MeroMero-26B-A4B pp2048 335.70 ± 14.45
6233.64 ± 258.34 6115.70 ± 258.34 6233.64 ± 258.34
zerofata/G4-MeroMero-26B-A4B tg128 15.42 ± 0.01 16.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d4096 290.31 ± 12.24
14253.80 ± 580.96 14135.86 ± 580.96 14253.80 ± 580.96
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d4096 14.07 ± 0.01 15.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d4096 238.90 ± 2.19
8691.36 ± 78.59 8573.42 ± 78.59 8691.36 ± 78.59
zerofata/G4-MeroMero-26B-A4B tg128 @ d4096 13.79 ± 0.01 14.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d8192 260.37 ± 3.20
31589.77 ± 383.96 31471.83 ± 383.96 31589.77 ± 383.96
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d8192 13.67 ± 0.01 14.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d8192 218.36 ± 0.69
9497.17 ± 29.59 9379.23 ± 29.59 9497.17 ± 29.59
zerofata/G4-MeroMero-26B-A4B tg128 @ d8192 13.55 ± 0.00 14.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d16384 241.87 ± 3.54
67874.56 ± 1000.78 67756.62 ± 1000.78 67874.56 ± 1000.78
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d16384 66.75 ± 0.02 70.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d16384 204.84 ± 2.69
10117.85 ± 130.36 9999.91 ± 130.36 10117.85 ± 130.36
zerofata/G4-MeroMero-26B-A4B tg128 @ d16384 66.23 ± 0.04 69.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d32768 191.92 ± 10.78
171424.55 ± 10017.11 171306.61 ± 10017.11 171424.55 ± 10017.11
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d32768 12.37 ± 0.07 13.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d32768 142.47 ± 3.70
14502.40 ± 380.91 14384.46 ± 380.91 14502.40 ± 380.91
zerofata/G4-MeroMero-26B-A4B tg128 @ d32768 12.34 ± 0.00 13.00 ± 0.00


llamacpp b8999 (vulkan backend)

啟動指令
./llama-b8999/llama-server -m ./G4-MeroMero-26B-A4B-Q5_K_M.gguf -ngl 99 -c 49152 --temp 1 --top-k 64 --top-p 0.95 --host 0.0.0.0 -mm ./mmproj-Gemma-4-26b-a4b-f16.gguf --chat-template-file ./chat_template.jinja
在32k的測試出現異常,可能是模型崩潰與重複輸出造成。

model test t/s peak t/s ttfr (ms) est_ppt (ms) e2e_ttft (ms)
zerofata/G4-MeroMero-26B-A4B pp2048 315.62 ± 12.25
6633.52 ± 244.36 6502.53 ± 244.36 6633.52 ± 244.36
zerofata/G4-MeroMero-26B-A4B tg128 20.70 ± 0.02 21.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d4096 291.80 ± 10.49
14189.23 ± 493.34 14058.24 ± 493.34 14189.23 ± 493.34
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d4096 19.54 ± 0.00 20.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d4096 275.22 ± 1.81
7572.64 ± 49.08 7441.65 ± 49.08 7572.64 ± 49.08
zerofata/G4-MeroMero-26B-A4B tg128 @ d4096 19.53 ± 0.01 20.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d8192 286.29 ± 1.35
28747.85 ± 134.81 28616.86 ± 134.81 28747.85 ± 134.81
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d8192 19.68 ± 0.03 20.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d8192 252.09 ± 0.21
8254.93 ± 6.84 8123.94 ± 6.84 8254.93 ± 6.84
zerofata/G4-MeroMero-26B-A4B tg128 @ d8192 18.64 ± 0.03 19.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d16384 269.11 ± 1.28
61018.78 ± 289.55 60887.79 ± 289.55 61018.78 ± 289.55
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d16384 18.08 ± 0.00 19.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B pp2048 @ d16384 217.98 ± 1.58
9526.90 ± 67.69 9395.91 ± 67.69 9526.90 ± 67.69
zerofata/G4-MeroMero-26B-A4B tg128 @ d16384 18.01 ± 0.02 19.00 ± 0.00


zerofata/G4-MeroMero-26B-A4B ctx_pp @ d32768 231.32 ± 0.68
141795.99 ± 417.40 141665.00 ± 417.40 141795.99 ± 417.40
zerofata/G4-MeroMero-26B-A4B ctx_tg @ d32768 31.67 ± 20.37 41.67 ± 33.47


zerofata/G4-MeroMero-26B-A4B pp2048 @ d32768 168.40 ± 1.35
12292.98 ± 97.49 12161.99 ± 97.49 12313.51 ± 124.96
zerofata/G4-MeroMero-26B-A4B tg128 @ d32768 16.47 ± 0.01 17.00 ± 0.00


綜合測試結論(使用Gemini做的分析

1. 硬體潛力與系統優化

  • 記憶體配置與優化: 透過調整 Linux 核心參數(GRUB)將 amdgpu.gttsize 設為 48GB,是成功在此類 iGPU 設備上順暢執行 26B 大模型量化版的關鍵。64GB 的實體記憶體為 780M 提供了充足的空間來處理大型模型文件及高達 32K 的 Context 需求。
  • 推論效能: 整體而言,在 8845HS 的平台上,26B Q5 模型能達到約 15~20 t/s 的生成速度,對於單人使用情境已具備極高的實用性,接近一般人的閱讀速度。

2. 後端軟體性能對比 (Backend Comparison)

測試項目 Koboldcpp-1.112.2 Llamacpp (Vulkan) Llamacpp-rocm
提示處理 (Prompt Processing) 最快 (~420 t/s) 中等 (~315 t/s) 較慢 (~335 t/s)
權杖生成 (Token Gen) 穩定 (~18.4 t/s) 最高 (~20.7 t/s) 較慢 (~15.4 t/s)
長文本穩定性 (Stability) 極高,隨 Context 增加性能衰減平緩。 高 Context (32k) 時出現數據異常。 中 Context (16k) 時出現異常。
  • Koboldcpp: 在本次測試中表現最為均衡且可靠。其 Prompt Processing 速度大幅領先,且在高 Context (32768) 下依然維持穩定的生成速度(14.7 t/s),沒有出現模型崩潰或邏輯異常,是長文本應用的首選。
  • Llamacpp (Vulkan): 提供了最高的初始生成速度(超過 20 t/s),但在 Context 達到 32k 時出現數據劇烈波動與異常(Variance 較大),顯示在極端上下文負荷下驅動或後端尚不夠穩定。
  • Llamacpp-rocm: 在此硬體配置下表現差強人意,不僅生成速度最低,且在 16k Context 時便提早出現模型異常,推測 ROCm 在此 APU 上的優化或記憶體管理仍有改進空間。

3. 測試異常觀察

  • llamacpp-rocm (16k) 與 vulkan (32k) 的測試中,出現了速度異常(如跳升至 66 t/s)或誤差值過大的現象,這通常與模型崩潰、重複輸出 (Repetition)K-V Cache 溢位有關。這指出在 iGPU 環境下進行超長文本推論時,後端軟體的穩定性 (Robustness) 比純粹的峰值速度更為重要。

總結建議

對於使用 AMD Ryzen 8000 系列 APU 的用戶,若要執行 26B 規模 的模型:

  1. 推薦後端: 優先選用 Koboldcpp,其在長文本處理的穩定度與 Prompt 處理速度上具有明顯優勢。
  2. 效能追求: 若僅進行短文本對話,可嘗試 Llamacpp (Vulkan) 以獲取最高生成速度。
  3. 環境設定: 務必修改系統核心參數以釋放顯存限制,否則無法充分發揮 64GB 記憶體的硬體優勢。

2025年2月21日 星期五

在Ryzen 7 8845HS w/ Radeon 780M用ComfyUI生圖(Linux)

試了很久才發現成功的方程式…這是因為每次安裝ROCm都需要下載安裝超過30GB的檔案!!!

 

tl;dr 直接說結論

OS: Ubuntu 22.04(因為ROCm 6.1只支援此以下的版本)

ROCm:  <= 6.1.2,6.2跟6.3都沒辦法正常運行

PyTorch: <= 2.4.1,2.5.1版會顯示不支援硬體的警告,圖片有時候無法正確產生。

UserWarning: Attempting to use hipBLASLt on an unsupported architecture! Overriding blas backend to hipblas 

2.6以上則完全無法正常運行。使用PyTorch官網的版本而不是AMD提供的。

https://pytorch.org/get-started/previous-versions/

ComfyUI: 當前版本v0.3.14可正常運行。 

 

Update 2024/2/25

使用 Radeon 780M 產生圖片的時候經常會出現全黑的圖,並且出現以下警告

RuntimeWarning: invalid value encountered in cast
  img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
原本以為是 780M 沒有被 ROCm 支援的問題,但 ComfyUI 在去年的確發生過這樣的 bug,且不限硬體。我從下面的連結得到解法
https://github.com/comfyanonymous/ComfyUI/issues/3500

解法就是:換 scheduler,預設是 normal ,換成 karras 似乎就沒有再出現這樣的問題。


2024年12月20日 星期五

我的Home Assistant配置

Home Assistant 是用於家庭自動化的免費開源軟體。它作為整合平台和智慧家庭中心,允許用戶控制智慧家居設備。該軟體強調本地控制和隱私,設計獨立於任何特定的物聯網生態系統。 - 維基百科

我會使用Home Assistant (簡稱HA)應該是在我買了Sonoff S30智慧插座與Basic R2智慧開關,但我不想使用製造商的平台或App,研究了一下決定在S30刷入ESPHome,Basic R2刷入Tasmota,然後接上HA來控制。而S30還有電流計的功能,可以整合到HA做能源消耗的監測。Home Assistant是裝在Raspberry Pi 4 (4GB RAM,簡稱RPi4)。



之後我想監控每個房間的溫濕度,上網搜尋可用的方案,最多人建議是小米的米家藍牙溫濕度計 2因為這個小裝置非常便宜,並刷入ATC的韌體來改善耗電與連接性。但問題來了,溫濕度計的放置位置離RPi4很遠,肯定收不到訊號。而改善的作法是購買幾個便宜的ESP32-C3-MINI-1刷入ESPHome的Bluetooth Proxy配置。之前提到使用ATC的韌體是要讓溫濕度計定期用藍芽低功耗技術來廣播資料,而這些Bluetooth Proxy則作為中繼,傳送資料回HA,這樣的設計會比主動連接的耗電量少,資料取得比較快且穩定。

後來我買了兩個Reolink的網路攝影機,作為車庫與門口的監控。但跟前面一樣,我不想使用製造商提供的平台或軟體,會選擇這個廠牌是因為它提供區域網路連接功能,網路上最多人推薦使用FRIGATE,這個開源軟體可以與HA深度整合,方便檢視與管理各種事件與錄影,並且支援物件識別的功能,雖然可以使用CPU來做識別但極度推薦專用的AI加速器:Coral USB Accelerator,可以快速識別影像中的物件。當然它提供物件識別的模型並不完美,你可以支付一次性的費用,上傳需要辨識或修正的影像來做訓練,一年內可以訓練12次。就我的經驗只訓練兩次就已經沒碰到識別錯誤的問題。自動化的部份則是使用HA論壇上網友提供的藍圖,在影像偵測到有人時發送通知到HA的手機APP。

因為我家是透天有鐵捲門,我就在想要怎麼把開關鐵捲門的功能整合到HA,但是我不想去修改鐵捲門控制器,因為風險太高。最後我想到的作法是拿一個外殼破損但功能完好的鐵捲門遙控器來改裝,上網研究發現只需要一片Lolin d1 mini、一個12V轉3.3V的降壓模組、然後加上幾個電晶體與電阻做成開關電路,就可以接上遙控器來控制。

幾個月前買了SwitchBot的套件組(主控機器人2、開關機器人、門窗感測器),主控機器人2的功能需要透過雲端連接,但是開關機器人與門窗感測器則可以使用藍芽連接,前面提到的Bluetooth Proxy又可以派上用場。門窗感測器裝在大門,可以很方便知道大門是不是沒關好,有沒有人經過,這也是透過HA來發送通知。而開關機器人則是裝在車庫的電燈開關,透過HA可以設計為打開鐵捲門同時開燈。

最近買了Shelly EM想要強化能源消耗的監控,但是打開配線箱後發現這遠超過我的能力,可能要找水電技師來協助安裝。

總而言之,家庭自動化是一條不歸路,花的錢會越來越多。

2024年12月19日 星期四

我的家用網路配置

 紀錄一下我的家用網路配置給有興趣的人參考。

 

  • 路由器:NanoPi R5S (4GB RAM/32GB Flash)
    作業系統是使用OpenWRT,但目前還沒有正式發布的版本,因此使用Anael Orlinski發布的版本。除此之外,還有硬體製造商FriendlyARM自行發布的FriendlyWRT可以使用(但不建議)。

    選擇使用NanoPi R5S是因為它的性能不需要打開Software flow offloading就可以處理1Gbps的網路連線。除此之外,它還包含有兩個2.5G與一個1G乙太網路界面,可以應對未來網路升級需求。
  • 區域網路:Ubiquiti的USW-Lite-8-POE與USW-Flex-Mini
  • 無線網路:Ubiquiti的UniFi UAP-AC-Lite與U6-Lite。
    看到這應該會有人問為何不使用Ubiquiti的全家桶?我有考慮過,但是在購買NanoPi R5S當時能考慮的是Dream Router,但它提供了我不需要的功能(Wifi),而且性能不足且價格高昂。現在有UXG-Max可以選擇,但是價格還是蠻高的。

    應該還會有人問為何要買Wifi AP而不是直接買整合的Wifi Router?這是因為Wifi Router放置的位置受限,某些角落的收訊會很差,而且性能比不上功能單一的Wifi AP。

    會選擇Ubiquiti的設備也是因為整合性與維護性,透過UniFi Network應用程式,可以很方便檢視與管理網路狀態。當然如果要看到最完整的網路狀態還是需要搭配UniFi的路由主機。


2022年4月15日 星期五

尋找DS Audio的替代方案

家裡有Synology NAS的人,可能都用過DS Audio(手機APP)與Audio Station(Server),用來播放音樂算是還可以用,但這麼多年都沒什麼改進,缺乏一鍵加到最愛的功能,網頁跟手機APP把音樂加到播放清單的功能也不好用,給音樂評分的功能看起來也沒什麼用處。尋找替代方案,大多都會提到Plex Media Server,可是這個軟體太過臃腫(bloated),不符合我的需求。除此之外就是各種相容Subsonic的方案。

Server部份,目前使用NAVIDROME,運作起來相當輕量且迅速,網頁界面也比較現代化。安裝方式使用Docker,說明文件建議不要用root啟動程式這點就要特別注意設定檔貯存位置與音樂檔案儲存位置的存取權限,否則程式會無法啟動或存取音樂檔案。

Android手機APP部份先測試了substreamer,看起來很漂亮但是ui會因為io存取卡住,使用體驗打折扣。除此之外還試了UltrasonicSubtracks,都相當順暢,不過在Play Store的安裝量很少,比不上substreamer。這三個App都有一鍵加到最愛與下載離線收聽的功能,基本上符合我的需求。不過從界面上來看,substreamer跟Subtracks比較符合我的喜好(跟Spotify很相似),應該會優先使用Subtracks。