2026/1/4

Raspberry Pi 4 NetworkManager Wi-Fi AC 設定

 說明如何在 Raspberry Pi 4 環境下,透過 NetworkManager 將無線熱點設定為 5GHz (802.11ac) 模式。

1. 環境確認

執行以下指令確認無線網卡支援 5GHz 頻段:

iw list

輸出內容若包含 Band 2 相關資訊,即代表硬體支援。

2. 修改熱點設定

假設既有的熱點連線名稱為 wifi-ap。若要切換至 AC 模式,必須指定頻段與頻道。

設定頻段

將 wifi.band 參數設定為 a,這代表強制使用 5GHz 頻段。

sudo nmcli connection modify wifi-ap wifi.band a

設定頻道

建議手動指定一組非 DFS 頻道 (例如 36, 40, 44, 48) 以加速啟動時間。

sudo nmcli connection modify wifi-ap wifi.channel 36

套用變更

重新啟動連線以生效設定:

sudo nmcli connection up wifi-ap

3. 驗證狀態

使用以下工具檢視目前的運作頻率與頻寬:

iw dev wlan0 info

正確範例輸出:

channel 36 (5180 MHz), width: 20 MHz

若顯示頻率為 5000 MHz 以上 (例如 5180 MHz),且用戶端連線速率超過 72 Mbps,即確認已運作於 802.11ac 模式。

4. 技術限制說明

使用 NetworkManager 建立熱點時,預設會鎖定頻寬為 20 MHz。雖然運作於 5GHz 頻段,但最高理論速率限制約為 86.6 Mbps。此設定是為了確保最高的裝置相容性與連線穩定度。


另外使用nmcli設定完,nmcli會自動更新 /etc/NetworkManager/system-connections/ 目錄下的 .nmconnection。 讓設定永久保存。

Antigravity ssh remote failed

ssh 到 raspberry pi 都會失敗,但是連到 GB10 是 OK的。
到 pi 的 ~/.antigravity 去看 log: 在 data/logs/20260104T124620/remoteagent.log 有 SIGILL
Language server killed with signal SIGILL
找到一個很像 language server 的 : ./bin/94...af/extensions/antigravity/bin/language_server_linux_arm
run run 看真的 fail
~/.antigravity-server $ ./bin/94f...6af/extensions/antigravity/bin/language_server_linux_arm --version
Illegal instruction
所以用 gdb 來看,用這些參數:
   * `-ex "run"`: Tells GDB to start the program immediately.
   * `-ex "x/i \$pc"`: This is the most important part.
       * x = Examine memory.
       * /i = Format the output as a CPU instruction.
       * $pc = Look at the Program Counter (the exact address where the CPU stopped because of the error).
   * `-ex "bt"`: Generates a Backtrace to show the function call stack leading up to the crash.
   * `--batch`: Runs GDB in non-interactive mode and exits once the commands are finished.
   * `--args`: Allows you to pass the binary path and any flags it needs (like --version).
結果
~/.antigravity-server $gdb -ex "run" -ex "x/i \$pc" -ex "bt" --batch --args ./bin/94...6af/extensions/antigravity/bin/language_server_linux_arm --version

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x000000555d5426ac in ?? ()
=> 0x555d5426ac:	ldaddal	x8, x8, [x9]
#0  0x000000555d5426ac in ?? ()
#1  0x0000007ff7fc1cdc in ?? () from /lib/ld-linux-aarch64.so.1
#2  0x0000007ff7fd83a0 in ?? () from /lib/ld-linux-aarch64.so.1
所以是 ldaddal
查這個 instruction 要ARMv8.1 LSE, raspberry pi 4 是 ARMv8.0,所以沒辦法。
另外用 VSCode 測試,ssh 到 raspberry pi 是 OK 的,髓以猜是language server 重新 compile for armv8.0 應該就可以....
然後 .vscode 沒有 language_server... 這個東西,連 bin 都沒有...

Set default login account for headless raspberry os image.

 在沒有顯示器與鍵盤的情況下(Headless 模式),可以透過在 SD 卡的 boot 分割區中建立特定檔案,來完成系統初始化設定。

1. 啟用 SSH 服務

在 boot 分割區的根目錄下,建立一個檔名為 ssh 的空白檔案(不含任何副檔名)。系統在開機過程中偵測到此檔案後,會自動啟動 OpenSSH 服務並在完成後移除該檔案。

2. 設定使用者帳號與密碼

Raspberry Pi OS 更新後,預設不再提供預設的 pi 使用者。必須手動建立 userconf.txt 檔案來定義使用者資訊。

在 boot 分割區根目錄下建立名為 userconf.txt 的純文字檔案,其內容格式如下:

使用者名稱:加密後的密碼字串

產生加密密碼字串的參考指令(以 Linux 系統為例):

echo -n "你的密碼" | openssl passwd -6 -stdin

範例檔案內容:

charles-chang:$6$0k2ljc4fIQEb9rWU$fo9gJ10kBqy7dcrJqj41W3ENmKVcIBRzeazsRSAqtqadQodTZRETA5LsTjb3TfjyafIOuRfNE8QNNDFmwBrr11

3. 網路連線與遠端存取

將設定完成的 SD 卡插入樹莓派並連接乙太網路線後送電開機。待系統啟動完成後,即可透過 SSH 客戶端連線。連線指令如下:

ssh charles-chang@raspberrypi.local

或者使用分享器分配給樹莓派的 IP 地址進行連線。

4. 安全建議

首次登入後,建議立即執行 passwd 指令更換初始密碼,以確保系統安全性。

2025/12/26

檢查 Windows 系統是否啟用 SSH 伺服器服務

 方法一:使用 PowerShell 檢查 SSH 服務

1. 開啟 PowerShell (以系統管理員身分執行)

2. 輸入以下指令檢查 SSH 相關服務:

   Get-Service -Name *ssh*

3. 檢查 sshd 服務狀態,若狀態為 "Running" 則表示服務已啟動


方法二:使用命令提示字元檢查

1. 開啟命令提示字元 (cmd)

2. 輸入以下指令:

   sc query | findstr -i ssh

3. 檢查 SSH 服務詳細狀態:

   sc query sshd


方法三:檢查 SSH 服務監聽的連接埠

1. 在命令提示字元中執行:

   netstat -an | findstr :22

2. 若有顯示 "LISTENING" 狀態,表示 SSH 服務正在監聽連接埠 22


確認 SSH 服務正在運行後,您就可以使用 SCP 命令來傳輸檔案:

scp file user-name@ip:/path/


注意:請確保防火牆允許連接埠 22 的流量,並有正確的使用者帳號與密碼。

GB10 : MXFP4 support in transformers

在用 huggingfacetransformers load gpt-oss:120b 來 run,出現
triton.runtime.errors.PTXASError: PTXAS error: Internal Triton PTX codegen error
`ptxas` stderr:
ptxas fatal   : Value 'sm_121a' is not defined for option 'gpu-name'
transformers calling 順序
gpt-oss-120b (uses MXFP4 quantization)
    ↓
transformers (loads model)
    ↓
kernels package (provides MXFP4 Triton kernels)
    ↓
Triton (compiles GPU kernels at runtime)
    ↓
ptxas (NVIDIA's PTX assembler, bundled with Triton)
    ↓
❌ Doesn't recognize sm_121a (Blackwell)
然後 ptxas fatal : Value 'sm_121a' is not defined for option 'gpu-name' 說:
The issue should be fixed by using PTXAS shipped with CUDA 13. Try setting TRITON_PTXAS_PATH to /usr/local/cuda/bin/ptxas etc.
所以看 python 自己的 triton ptxas 版本:
$ ./lib/python3.12/site-packages/triton/backends/nvidia/bin/ptxas --version
ptxas: NVIDIA (R) Ptx optimizing assembler
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:22:20_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0
系統的:
$ ptxas --version
ptxas: NVIDIA (R) Ptx optimizing assembler
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Aug_20_01:53:56_PM_PDT_2025
Cuda compilation tools, release 13.0, V13.0.88
Build cuda_13.0.r13.0/compiler.36424714_0
所以依照說明宣告PATH 之後,GB10 就可以用 transformers正常的支援 gpt-oss:120b 的 MXFP4 了。
export TRITON_PTXAS_PATH=/usr/local/cuda/bin/ptxas

有關 gpt-oss:120b 與 MXFP4 可以看 :MXFP4
要等 Pypl 的 triton 用 cuda13 重build 之後,package 才算 official support.

DGX Spark (GB10), transformers load gpt-oss:120b 時遇到的問題

 

問題 1:缺少 Python 開發標頭檔

編譯錯誤
根本原因
Triton 在執行時需要編譯 CUDA 工具模組,但系統缺少 Python 開發標頭檔 (Python.h)。
解決方案
已修復 安裝 Python 開發套件:
sudo apt install python3-dev

問題 2:ptxas 不支援 Blackwell 架構 (sm_121a)

GPU 相容性
錯誤訊息
ptxas fatal : Value 'sm_121a' is not defined for option 'gpu-name'
根本原因

Triton 套件內建的 ptxas (PTX 組譯器) 版本太舊,不認識最新的 Blackwell GPU 架構代號 sm_121a

相關 GitHub Issue: triton-lang/triton#8539

解決方案
已修復 使用系統安裝的較新版 ptxas (CUDA 13.0 內建):
export TRITON_PTXAS_PATH=/usr/local/cuda/bin/ptxas
python llmchat.py
或使用啟動腳本 run_chat.sh 自動設定此環境變數。

問題 3:Tensor on device meta 錯誤

記憶體配置
錯誤訊息
RuntimeError: Tensor on device meta is not on the expected device cuda:0!
根本原因

當使用 device_map="auto" 載入大型模型時,accelerate 套件會使用「meta device」作為權重的佔位符號,延遲載入實際資料。

在 MXFP4 量化與 DGX Spark 的組合下,部分權重 (特別是 MoE router) 可能未能正確從 meta device 轉移到 CUDA device,導致運算失敗。

解決方案
已修復 修改模型載入參數,避免使用延遲載入:
self.model = AutoModelForCausalLM.from_pretrained(
    self.model_id,
    torch_dtype=torch.bfloat16,    # 使用明確的資料型別
    device_map="auto",
    low_cpu_mem_usage=False,       # 停用延遲載入
)

2025/12/6

pyenv + venv

 因為 venv 只負責隔離環境(pip install 到 local),沒有管理python 版本的功能,所以用 pyenv 來做。

pyenv 會 create 一個 ~/.pyenv 目錄,所有你需要的 python 版本,然後就可以用 pyenv local 來決定這個位置(folder) 要使用那一個版本。

這樣配合 venv 就可以作到 python 版本管理和 package 隔離。

所以安裝 pyenv 要修改 PATH,讓pyenv/bin/python 優先被執行,才能發揮效果。

pyenv 目前沒有進入 apt repo,所以要自己下載安裝。修改 .bashrc.