跳至主要內容

教學檢視器

CodefyUI 可用於互動式教學,讓學生查看流經每個節點的實際 tensor。教學檢視器會在 run 期間擷取節點輸出,並顯示在右側面板。

操作說明​

  1. 將 TensorInput 節點拖到畫布上(Data 類別)。設定 value_mode: explicit,再於它的 16 格格線中輸入 pipeline 要接收的數值,或按隨機填滿。
  2. 將它連接到一串 tensor 運算節點,例如 Reshape → Softmax → Print,並把 Reshape 的 shape 設為 1,16:預設值 -1,784 容納不了 16 個數值,執行會因此停止,詳見你的第一個圖。
  3. 新增一個 Start 節點,並將 trigger 輸出連到要開始執行的第一個節點,通常是 TensorInput。若缺少這個節點,圖會視為草稿並拒絕執行,詳見你的第一個圖。
  4. 錄製節點輸出預設為開啟。請在設定 → 錄製與檢視中確認它仍開啟,再點擊執行。每個已完成節點的完整輸出會以 run 為 key,擷取到伺服器記憶體。
  5. 點擊任一節點。檢視器面板會取得該節點的輸入與輸出,由上到下顯示 shape、dtype、min/max/mean 及實際數值。在 Softmax 上,發生變更的儲存格會以熱度著色;Reshape 的輸出形狀不同,因此輸入與輸出之間的分隔線改為顯示 [1, 4, 4] → [1, 16]。
  6. 使用 Shift 選取兩個節點,再點擊建立段落(設定 → 錄製與檢視 → 段落比較),只查看 head 輸入與 tail 輸出。畫布會以淺橘色區域包住這些節點,並顯示 HEAD/TAIL 標記。
  7. 若不需要擷取重度訓練的每個 epoch,請先關閉錄製節點輸出。已擷取的 run 在被逐出或伺服器重啟之前仍可查閱。
備註

擷取的輸出會存放在所有分頁共用的伺服器層級 store 中,最多保留最新 20 個 run,容量上限為 2 GiB(CODEFYUI_RUN_OUTPUT_STORE_MAX_MB,預設 2048)。超過任一上限時,會從最舊的完整 run 開始逐出。從執行任務面板刪除 run 也會移除其擷取輸出,詳見訓練記憶體。段落標記會儲存在 graph JSON 中。

建立或清除段落標記都可復原。Ctrl+Z 會還原誤刪的標記,也會還原被收合成子圖或刪除操作移除的標記,並恢復原本的聚焦狀態。

檢視器面板​

選取節點、啟用段落,或將外掛面板停駐在右側時,右側欄會顯示。選取節點時,其中有三個分頁:

分頁顯示內容
前向輸入依序顯示在輸出上方,每個 port 都有依型別著色的圓點;tensor 會顯示為數值格線。節點恰好有一個 tensor 輸入與一個 tensor 輸出且形狀相同時,變更的儲存格以熱度著色;兩者形狀不同時,改由兩者之間的分隔線顯示形狀的變化。
步驟開啟顯示內部步驟時,已插樁的節點所發出的 __steps__ 追蹤,詳見下文。
反向開啟擷取梯度時擷取的權重與輸出梯度,詳見下文。

分頁還沒有可讀取的 run 時(第一次執行之前,以及重新載入頁面之後),面板會顯示尚未擷取資料。執行期間,每個 port 會等待產生其數值的節點(輸入則是上游節點):該節點開始之前顯示等待此節點執行…,執行時顯示節點執行中…,節點完成後數值會自動出現。反向分頁會顯示圖表執行中… 直到整個 run 結束,因為梯度要在 forward pass 之後才計算。執行資料已過期 — 重新執行以擷取表示伺服器沒有該 port 的擷取資料:run 已被逐出或刪除,或伺服器已重啟(見上方說明)。排在 worker 上的 run 會把擷取資料保存在該 worker 上,Inspector 向它讀取;worker 斷線期間,各列會顯示保存此 run 錄製輸出的 worker 目前無法連線,下次畫面讀取時會再試一次(執行架構:Worker 上的錄製輸出)。上次執行時若錄製節點輸出是關閉的,在設定仍關閉時,各列會提示開啟這個設定;開啟之後則顯示執行圖表即可擷取數值。這次執行沒有值表示節點已執行,但該 port 沒有產生值(None),例如 TrainingLoop 不是以 fp16 訓練時的 grad_scaler_state。不在上次執行中表示上次執行沒有這個節點的資料:它是在那次執行之後才加入、才被收進新的子圖,或那次執行在到達它之前就已出錯或被停止;在那次執行中出錯的節點則顯示上次執行時出錯。節點詳情的各分頁也採用相同規則。在打開的子圖裡選取節點,會在執行結束後顯示它在上次執行錄到的值,經由子圖輸入傳入的輸入會顯示從區塊的輸入傳入;子圖裡的卡片不顯示執行狀態。

啟用段落後,段落檢視會取代節點檢視,顯示「段落」標頭、段落輸入(N) 及段落輸出(N)。段落輸入包含進入 head 到 tail 節點集合的每條 edge。建立段落需要恰好選取兩個節點:畫布上位置較左的節點是 head,另一個是 tail;若 head 到 tail 之間沒有資料路徑,會顯示段落:頭節點與尾節點之間沒有資料連線,且不會建立段落。新建立的段落會成為目前段落,也就是檢視器顯示的段落;點擊其他區域的邊框,即可改以該段落為目前段落。畫布上可以同時有多個段落;區域上的 x 只會移除該段落,取消當前段落會清除檢視器目前顯示的醒目段落。按 › 可將面板收合為窄條。

節點詳情​

雙擊節點、選取後按 Enter,或按右鍵 → 開啟節點詳情,即可開啟節點詳情對話框。左側顯示參數表單,右側顯示檢視器中的節點資訊。

分頁顯示內容
程式碼僅適用於 script 節點,且是開啟這類節點時的預設分頁;其中有 script editor 與輸入/輸出 port 數量。
子圖僅適用於 subgraph 實例;其中有 block 的邊界 port 與進入子圖按鈕。
輸入/輸出各 port 擷取的數值,顯示方式與檢視器的前向分頁相同。
步驟/反向傳播步驟追蹤與擷取的梯度;分頁有 run 可供讀取後即可使用。
統計伺服器為每個 port 計算的摘要統計,詳見下文。
說明節點的一行說明與較長的詳細說明、參數的型別/預設值/範圍/選項,以及各個 port。

按 Left/Right 可在不關閉對話框的情況下切換到畫布上的上一個/下一個節點,按 Esc 可關閉。點擊節點名稱會顯示重新命名欄位;Enter 套用,Esc 取消。run 結束後點擊 edge,可查看流經內容的 type、shape、dtype、min/max/mean 摘要。其中的查看統計連結會開啟節點詳情,並在統計分頁中聚焦該 port。

統計分頁​

GET /api/execution/outputs/{run}/{node}/{port}/stats 會回傳已擷取 port 的固定大小摘要,而不是實際數值。元素數、min、max、NaN 與 Inf 數量、零值比例,以及 integer label tensor 的類別分佈一律精確。mean、std、quantile 與 64-bin histogram 在不超過 400 萬個元素時也會精確計算;超過時則使用以 seed 固定的 100 萬元素樣本,並在回應中標記 "sampled": true(CODEFYUI_STATS_SAMPLE_THRESHOLD、CODEFYUI_STATS_SAMPLE_SIZE)。計算後的摘要會快取,總上限為 CODEFYUI_STATS_CACHE_MAX_BYTES(8 MB)。

設定 popover 的開關​

工具列的設定 popover 會依區段排列各列。錄製與檢視與訓練行為屬於目前的分頁:它們隨分頁儲存、會寫入工作區檔案,且沒有開啟任何分頁時不會顯示(見歡迎畫面)。運算裝置與編輯器各列由這個瀏覽器保存,套用到所有分頁。LLM 提供者、選用套件與外掛與這台伺服器各列與伺服器有關。除非該列另有說明,每個開關預設都是關閉的。

區段設定用途
執行運算裝置執行旁的裝置選單設為跟隨設定(…) 的圖使用這個裝置;在你變更之前為 CPU。這台伺服器沒有該裝置時這一列會顯示什麼,請見裝置無法使用時。
LLM 提供者ChatGPT Codex 帳號Codex provider 的登入/登出/重新檢查,詳見 Graph Copilot。
選用套件與外掛套件中心開啟套件中心;這一列會顯示已安裝的套件數量。
外掛中心開啟外掛中心;這一列會顯示已安裝與可安裝的外掛數量。
錄製與檢視錄製節點輸出擷取每個已完成節點的完整輸出,供檢視器使用。預設開啟;請在大量訓練前關閉。
顯示內部步驟已插樁的節點會記錄中間步驟,例如 attention score 與 softmax temperature,並提供給步驟分頁。開啟時不會使用快取,所有節點都會重新執行。
段落比較建立段落會將選取的兩個節點包在 HEAD/TAIL 區域中;取消當前段落會移除醒目的段落。
訓練行為在多次執行間保留權重在多次點擊執行之間保留 Conv2d/Linear/Attention 權重。預設關閉,每個 run 都像匯出的程式一樣從頭開始;開啟時下一個 run 會接著訓練,執行紀錄也會註明。
立即重置所有權重重置會先要求確認,再移除這個分頁所有快取的權重;下一次執行會重新初始化。
擷取梯度執行 forward + .backward(),並儲存各 layer 的梯度供反向分頁使用。開啟時不會使用快取,所有節點都會重新執行。
自動合成損失圖中沒有 Loss/BackwardOnce 節點時,自動合成一個 loss,讓 .backward() 能執行。只有在擷取梯度開啟時才能使用。
亂數種子使用一個數字為每個節點設定 seed,並跟著圖一起存檔(settings.seed);留空表示不設定。seeded run 一次只執行一個節點,詳見可重現的執行。
決定性演算法要求 PyTorch 使用決定性 kernel(warn_only)。這項設定會與 seed 及裝置一起隨 run 送出。
編輯器對齊格線拖曳節點時自動對齊 24 px 的畫布格線;開啟時,畫布上已有的節點也會對齊格線。
顯示節點說明將滑鼠停在畫布或側欄的節點上時顯示說明卡片。預設開啟。
節點分類模式側欄要列出哪些類別:入門只列出 Data、CNN、Training 與 IO;全部(預設)列出所有類別。快速搜尋(雙擊畫布)不受此設定影響,詳見側邊欄。
連線樣式電路板(預設)將連線畫成電路板走線,曲線則使用平滑曲線;Start 節點的 trigger 連線也採用相同設定。
這台伺服器—顯示版本、節點與預設組合數量,以及每個記憶體內 store 相對於預算的使用量,並提供重新讀取按鈕。

步驟追蹤(顯示內部步驟)​

開啟顯示內部步驟後,已插樁的節點會發出 __steps__ 追蹤,檢視器會逐列顯示。教學用外掛節點會使用這項功能。例如,Edu-ColumnStats 會將母體標準差公式顯示為 sum → divide → deviations² → variance → sqrt。詳見 外掛。

擷取梯度(反向分頁)​

開啟擷取梯度後,引擎會執行 forward pass、呼叫 .backward(),並儲存各 layer 的梯度。在檢視器中開啟節點的反向分頁,即可查看每個 layer 的梯度大小,用於診斷梯度消失或梯度爆炸。

這個分頁會列出輸出梯度(每個輸出 port 一項)與權重梯度(每個參數一項)。每一項都是依 |g| 相對於其最大值著色的格線,上方的標記也會列出 L2 norm ‖g‖:‖g‖ 小於 1e-7 或 |g| 的平均小於 1e-8 時為梯度消失,‖g‖ 大於 1e3 或 |g| 的最大值大於 1e2 時為梯度爆炸,其餘為健康。

完整尺寸檢視器​

五張 attention 卡片(attention heatmap、attention mask,以及三個 Edu attention 節點)有查看完整按鈕,embedding scatter 卡片則是開啟詳細檢視;兩者都會在完整尺寸的 heatmap 或 scatter 檢視器中開啟圖表。捲動畫布、縮放或變更 layout 時,檢視器仍會保持開啟;按 Esc 可關閉。

scatter 檢視器會在距畫面中心最近底下列出最接近畫面中心的 60 個標籤,並提供篩選標籤… 輸入框。點擊標籤會將畫面置中到該點,眼睛按鈕可隱藏或顯示該點(全部顯示會恢復所有點)。拖曳可平移、滾動可縮放,也可以使用圖表上方的縮小、放大與重設視圖按鈕。heatmap 檢視器的底部會顯示 seq_len;各列以各自的色階著色時(attention weight 即是如此),還會顯示色階以列為單位正規化。