vatt'ghern jaskier's ballads

2026.05.26 —— 今日 10 則

TODAY'S THREAD 三條 deep 都在替「保證」標價——從 Go 搬到 Rust 拿 GC 暫停換編譯期的資料競爭消除、ECH 把 TLS 握手最後一截明文 SNI 藏進加密、再到一篇把 LLM 訓練當成有雜訊通道、用 Shannon 容量解釋過訓練為何反而變差;場邊有 syscall 為什麼要花上千個 cycle、FlashAttention 的 I/O 下界被改寫成近線性、Discord 怎麼替上兆則訊息建索引、CockroachDB 把向量索引塞回交易式 SQL、NVIDIA 的開源 omni MoE,與 C++26 reflection 真正的編譯成本——軸線是:把每一個抽象與隔離的代價,量到 cycle、位元與微秒這一層。

10 items ai · 3 systems · 3 infra · 2 web · 1 backend · 1
0 / 10 read
#03

把 LLM 訓練當成有雜訊的通道——Shannon Scaling Law 解釋過訓練與量化退化

一篇 arXiv 論文主張,主流那種單調的 power-law scaling law 解釋不了兩個真實現象:catastrophic overtraining 與量化造成的退化——算力加了,效果反而變差。作者把 LLM 訓練重寫成 Shannon-Hartley 的有雜訊通道:參數對應頻寬、訓練 token 對應訊號功率,於是模型有了一個有限的「Shannon 容量」,一旦 SNR 守不住,曲線就從單調下降翻成 U 形。在 Pythia 與 OLMo2 上,它用 ≤6.9B 的資料外推預測未見過的 12B 模型到 307B token,pooled R² 達 0.847,而單調基準直接崩掉。

read source → deep scaling-laws

#05

Approaching I/O-optimality for Approximate Attention——把注意力的 I/O 成本壓到近線性

FlashAttention 這條線把注意力的 I/O 成本壓得很低,但相對序列長度 n 仍是二次方,而讀進輸入、寫出輸出的下界其實只需要 Ω(nd)。這篇論文沿用 Alman–Song 的 approximate attention 框架,給出一個在多數參數區間裡 I/O 成本對 n 幾乎線性的演算法,並補上對應的下界證明,說明它已逼近 I/O 最優。對在長上下文、被 HBM 頻寬卡住的人,這是把「注意力到底非得搬多少資料」講清楚的一篇。

read source → attention-io

#08

NVIDIA Nemotron 3 Nano Omni——30B-A3B MoE 把視覺、音訊、語言收進一個模型

NVIDIA 釋出 Nemotron 3 Nano Omni:一個 30B-A3B 的 hybrid MoE,吃文字、影像、音訊、影片、文件、圖表與 GUI,輸出文字,號稱在相同互動延遲下吞吐量是其他開源 omni 模型的 9 倍。權重、資料集與訓練方法都開放,掛在 Hugging Face 與 OpenRouter 上。對在評估要不要自架多模態推論的人,這把「open omni」的成本曲線又往下壓了一截。

read source → model-release

#01

從 Go 遷移到 Rust——拿 GC 暫停與資料競爭,換編譯期的保證

corrode 的這份遷移指南不喊「Rust 比 Go 好」,而是把兩者放在同幾根軸上比:錯誤處理(if err != nil vs Result 與 ?)、並行(goroutine+channel vs async/await+tokio 的 Send/Sync)、記憶體(GC 低停頓 vs ownership 無 GC、更平的 p99)、型別系統與工具鏈。代價也誠實列出——borrow checker 的學習曲線、以分鐘計的編譯時間、async 的函式染色。它給的不是口號,而是分情境的選法:無聊但要快出貨的服務與 k8s 工具留給 Go,要極致正確性與尾延遲的底層服務才值得搬到 Rust。

read source → deep rust-migration

#04

為什麼一次 system call 要花上千個 cycle——x86-64 進出核心的成本拆解

一篇 Linux internals 的拆解把 syscall 的成本量到位:在 x86-64 上,clock_gettime 走 syscall 約 1429 個 cycle,走 vDSO 在 user space 只要約 157 個——差一個數量級。貴在哪?CR3 換頁表(KPTI)、GS swap、換 kernel stack、清空 80 多條 in-flight 指令的 pipeline,加上 BHB/RSB/IBRS 這些 Spectre 緩解。對寫 hot path、糾結要不要批次化系統呼叫的人,這把「為什麼 syscall 不能亂呼叫」講成了可衡量的數字。

read source → linux-internals

#09

C++26 reflection 的編譯成本不在 reflection——而在 #include <meta>

vittorioromeo 實測 C++26 用 reflection 做 enum-to-string 的編譯開銷,結論反直覺:reflection 本身每個 enumerator 只要約 0.07 ms,真正貴的是光是 #include <meta> 就先吃掉每個 translation unit 約 155 ms。算總帳,reflection 版每 TU 約 188 ms,而老派的 X-macro(const char*)只要約 27 ms;上 PCH 能把 reflection 拉回 2.3 倍加速、勉強追平。對在意建置時間的專案,這是一份提醒:新語法的成本要連 header 一起算。

read source → cpp26

#02

Encrypted Client Hello 進 NGINX——把握手最後一截明文 SNI 藏起來

NGINX 1.29.4 開始支援 Encrypted Client Hello(ECH):在 ESNI 失敗、DoH/DoT 補掉 DNS 洩漏之後,TLS 握手裡最後一截明文——SNI 主機名——終於也能加密,旁觀者只看得到一個 cover 的 public_name。代價是工程上的:得用 OpenSSL 的 ECH feature branch 從源碼編(穩定版要等 OpenSSL 4.0),靠 ssl_ech_file 指向含私鑰與 ECHConfig 的 PEM,而且目前只支援 shared mode。對跑反向代理、在意被動流量指紋的人,這是把「主機名洩漏」這個老問題收尾的一步。

read source → deep tls-privacy

#06

Discord 怎麼替上兆則訊息建索引——40 個 cell 叢集與按目的地分批的寫入

Discord 把訊息搜尋的 Elasticsearch 從兩大叢集拆成 40 個小叢集、上千個 index 的 cell 架構,扛起從十億級長到上兆則的訊息量;中位查詢從 500ms 降到 100ms 以下、p99 從 1s 降到 500ms 以下。關鍵修的是容錯:舊架構下單一節點掛掉會讓約 40% 的 bulk index 操作失敗,他們改成先按目的 index/節點把訊息分批再寫、並用 PubSub 取代 Redis,才止住掉資料。訊息按 guild_id 或 user_id 分片,單 shard 上限 2 億則、50GB。

read source → search-infra

#10

完全在瀏覽器裡 build container image——把映像當成一堆檔案來改

一篇實驗性的文章示範:container image 本質就是一堆檔案,所以下載 base image、解開、改、再打包、匯出成 tar 給本地 docker load,整段都能在瀏覽器 sandbox 裡跑,不碰伺服器。作者老實說這「多半是個 gimmick」,但點出真正的價值——理解 image 規格後,能做出比標準 Docker 流程快得多的客製工具:多 GiB 的映像靠對的架構與快取,幾秒就生得出來。把它當成一堂「別把 Docker 當黑盒」的課。

read source → wasm

#07

CockroachDB 怎麼把向量索引塞回交易式 SQL——C-SPANN 與當成普通資料的索引

CockroachDB 自製了 C-SPANN 演算法(揉合 Microsoft SPANN、SPFresh 與 Google ScaNN 的點子):一棵分層 K-means 樹,100 萬向量 3 層、100 億向量 5 層。最關鍵的設計是把索引當成 CockroachDB 裡的普通 table 資料、存成 KV row,於是自動繼承既有的 split、rebalance 與複製機制,不必另養一套向量資料庫。它換到的是交易級新鮮度——commit 完即可搜尋、強一致,代價是純向量延遲贏不過記憶體內的專用系統;RaBitQ 量化把 1536 維從約 3KB 壓到約 200 bytes。

read source → vector-search

today's deep reads

從 Go 遷移到 Rust——拿 GC 暫停與資料競爭,換編譯期的保證

同樣是後端服務,Go 與 Rust 到底差在哪幾根軸?goroutine+channel 的輕巧,對上 async/await+tokio 的 Send/Sync——買到的 compile-time data-race 消除,值不值那借用檢查器的學習曲線與以分鐘計的編譯?GC 的低停頓 vs ownership 換來的更平 p99,什麼服務該選哪邊?真要搬,carve-off、sidecar、FFI、strangler 哪條路適合你?什麼時候,其實該把 Go 留著?

Encrypted Client Hello 進 NGINX——TLS 握手最後一截明文怎麼藏

ESNI 當年為什麼失敗,ECH 又用什麼不同的做法把真正的 SNI 藏進加密的 inner ClientHello?HPKE 公鑰怎麼透過 DNS 的 HTTPS RR 發佈,server 端怎麼從 outer 底下解出 cover domain?NGINX 1.29.4 要你從 OpenSSL ECH branch 自己編、只支援 shared mode,這些限制從哪來?ssl_ech_file 與 $ssl_ech_status 在實務上怎麼接?對被動流量指紋來說,藏住主機名到底擋掉了什麼?

把 LLM 訓練當成有雜訊的通道——Shannon Scaling Law 從零講起

為什麼算力加了、效果反而會變差——catastrophic overtraining 與量化退化,單調的 power-law 為什麼解釋不了?Shannon-Hartley 的通道容量(bandwidth·log2(1+SNR))是什麼,又怎麼被借來描述 LLM?把參數當頻寬、token 當訊號功率之後,那個 U 形的轉折是怎麼冒出來的?以及最硬的證據——用 ≤6.9B 外推預測 12B 到 307B token、R² 0.847,這代表這套說法有多少預測力?