English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

CUDA 報告文件索引

CUDA 訓練器知道它採樣了哪個文件

每個訓練步驟從 .btok 二進位檔案中拉取一個序列,該檔案將許多文件端到端打包。CUDA 連同損失記錄文件索引:step 47213, source=gutenberg, doc=128407, loss=2.81。代理收集這些報告,並維護每個來源看到的唯一文件索引集合。


從計數到覆蓋率

來源的覆蓋率 = unique_docs_seen / n_docs。幾個例子:


來源n_docsunique seen覆蓋率
gutenberg512,000154,00030.1%
hermes3-general67,39547,17670.0%
dictionary88,00088,000100.0%
synthetic-chat1,4001,400100.0%

小型來源很快就會飽和。大型來源會在數週內降至 50% 以下。覆蓋獎勵鼓勵 bandit 訪問來源中尚未採樣的文件。


Coverage bonus per source


獎勵公式

覆蓋獎勵從 0% 覆蓋時的 1.3x 線性縮放到 50% 覆蓋時的 1.0x,然後在 50% 以上保持平坦的 1.0x:


if coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
else:
bonus = 1.0

覆蓋率為 0% 的來源獲得 1.3 倍加成;覆蓋率為 25% 的來源獲得 1.15 倍加成;覆蓋率為 50% 的來源降至 1.0 倍。超過 50% 時,不適用加成。

計算獎勵加成

一個運行中 gutenberg 覆蓋率 30% & hermes3-general 覆蓋率 70%。計算每個來源的覆蓋率獎勵乘數。顯示你的計算過程。

兩個不同的新鮮度信號

相同目標,不同粒度

ANDREA 有兩個機制來防止過度訓練單一來源。它們聽起來相似;它們測量不同的東西。


Epoch 懲罰。 追蹤總體過度拉取。當 lifetime_pulls / n_docs > 1.0 時,一個來源理論上已經至少環繞每個文件一次。懲罰 = 1 / (1 + epochs)。一個擁有 1.4K 文件的 synthetic-chat 來源,在 5,600 次終身拉取(epochs = 4)時,獲得懲罰 1/5 = 0.2x。Epoch 計數會在重啟時持續存在;它們永不衰減。


覆蓋率獎勵。 追蹤來源內每個文件的最新度。CUDA 報告文件索引;代理為每個來源維護一個集合。獨特文件覆蓋率低於 50% 的來源可獲得高達 1.3x 的獎勵。覆蓋率獎勵探索來源的尾部;epoch 懲罰則懲罰耗盡它。


為什麼兩個都重要


訊號追蹤方向上限跨重啟持續
Epoch 懲罰彙總過度拉取降低1/(1+e)
覆蓋加成每文件新鮮度提升1.3x

一個 500K 文件的 Gutenberg 來源可以在整個 200K 訓練過程中保持低於 50% 覆蓋率,同時永遠不會接近 epoch=1。Epoch 懲罰忽略它;覆蓋加成積極拉動 bandit 朝 Gutenberg 未探索的 70% 尾部前進。


相反地,一個 1.4K 合成聊天來源在幾千次拉取內就達到飽和覆蓋(100%);覆蓋加成維持在 1.0x,而 epoch 懲罰則持續增長。

區分這兩個

想像訓練中兩個來源:來源 A 有 1,400 個文件 & 8,400 次終身拉取。來源 B 有 500,000 個文件 & 80,000 次終身拉取;代理已為 B 記錄 75,000 個唯一文件索引至今。哪個信號(epoch 懲罰或 coverage 獎勵)主導每個來源的 bandit 權重,& 為什麼?

Coverage 獎勵為 ANDREA 帶來什麼

它防止的失敗模式

沒有文件級別追蹤的情況下,基於每步獎勵選擇的 bandit 會貪婪地挑選 .btok 序列。一個 500K 文件的 gutenberg 語料庫中包含幾千個低交叉熵的序列(一致的散文,常見詞彙)。僅基於獎勵的 bandit 會反复返回那些序列,因為它們持續產生強烈的獎勵信號。


結果:一個 500K 文件的語料庫在 200K 訓練步驟中僅被採樣約 2K-5K 個不同的序列。模型記住了那些序列,從未見過其餘部分。容量浪費;覆蓋率停留在 1% 以下。


覆蓋率獎勵帶來什麼

在 0% 覆蓋率時為 1.3x,在 50% 時縮減至 1.0x。這種輕推透過 UCB1 選擇傳播:覆蓋率低的臂即使單次拉動獎勵下降,仍保持競爭力。bandit 透過設計而非偶然探索尾部。


在 500K 文件 gutenberg 的 200K 步驟運行中,覆蓋率獎勵通常將觀測到的覆蓋率從 ~3%(無獎勵)提高到 ~25-30%(有獎勵)。相同計算量,觸及的文件數量增加八到十倍。


追蹤所在的位置


組件責任
microgpt_cuda.cu每個訓練步驟報告文件索引
training_proxy.py每個來源維護 seen_docs 集合
training_proxy.py計算覆蓋率,應用獎勵到 bandit 獎勵
training_proxy.py在重啟時將 seen_docs 持久化到 .state.json

連結到具體的工程選擇

假設你從 ANDREA-120M 訓練中移除覆蓋率獎勵。預測對 gutenberg 分支(擁有 500K+ 文件)的具體一個後果,在 200K 步驟的運行中。參考覆蓋率百分比、文件多樣性或下游樣本品質。