[電腦][文書] Mermaid 圖 === ###### tags: `學科` ###### tags: `學科`, `電腦`, `文書`, `HackMD`, `語法`, `markdown`, `Mermaid`, `Mermaid Live Editor` <br> **目錄:** [TOC] <br> ## 語法 - https://mermaid.js.org/ <br> ## 範例 ### gantt-1 ```mermaid gantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2014-01-10 section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d ``` ### gantt-2 > Source: https://hackmd.io/MathJax-and-UML-tw > ```mermaid gantt title A Gantt Diagram section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d anther task : 24d ``` ### graph-1: 流程圖 > https://hackmd.io/ujpj0b1DQQ6RXzyS2660rg?both ```mermaid graph LR; id1("你好嗎?<br>test,123") --> id2((B)); id2 --> id3[C]; id3 ==粗線加文字==> id4>D]; id4 -.-> id5{E}; id5 -.test.-> id5; id5 --> id6; id3 --細線加文字--> id1; ``` - id1: A - id2: B - id3: C - id4: D - id5: E <br> ### graph-2: LMCache 架構圖 > - https://github.com/LMCache/LMCache > - by Claude Sonnet 4.0 (2025/10/23) > - 可由 [Mermaid Live Editor 匯出](https://mermaid.live) 輸出高清晰版 ```mermaid graph TB subgraph "External LLM Engines" vLLM[vLLM Engine] SGLang[SGLang Engine] end subgraph "Integration Layer" VAdapter[vLLM Connector V1<br/>lmcache_connector_v1.py] SAdapter[SGLang Adapter<br/>sglang_adapter.py] ReqTracker[Request Tracker] end subgraph "API Layer" InternalAPI[Internal API Server<br/>v1/internal_api_server] CacheAPI[Cache API] InferAPI[Inference API] MetricsAPI[Metrics API] end subgraph "Cache Controller Layer" CtrlMgr[Controller Manager<br/>controller_manager.py] KVCtrl[KV Controller] RegCtrl[Registration Controller] Worker[LMCache Worker] end subgraph "Cache Engine Layer" V0Engine[LMCache Engine V0<br/>cache_engine.py] V1Engine[LMCache Engine V1<br/>v1/cache_engine.py] TokenDB[Token Database] EventMgr[Event Manager] CacheInterface[Cache Interface] end subgraph "Compute Layer" Attention[Attention Module<br/>flash_attn/flash_infer] Blender[Cache Blender<br/>blend/blender.py] Models[Model Implementations<br/>llama/qwen3] end subgraph "Storage Management Layer" StorageMgr[Storage Manager] MemAlloc[Memory Allocator] GPUConn[GPU Connector<br/>gpu_connector.py] end subgraph "Storage Backend Layer" Abstract[Abstract Backend] Local[Local Backend<br/>CPU/Disk] Remote[Remote Backend<br/>Redis/LM] Hybrid[Hybrid Backend] P2P[P2P Backend] end subgraph "Serialization Layer" Serde[Serialization<br/>serde/] CacheGen[CacheGen Encoder/Decoder] TorchSerde[Torch Serde] end subgraph "Memory Pool Layer" LocalPool[Local Pool] BasePool[Base Pool] end subgraph "Hardware Layer" GPU[GPU Memory<br/>CUDA] CPU[CPU DRAM] Disk[Local Disk<br/>SSD/HDD] Network[Network Storage<br/>Redis/Valkey] end %% External connections vLLM --> VAdapter SGLang --> SAdapter %% Integration to Engine VAdapter --> V1Engine SAdapter --> V0Engine VAdapter --> ReqTracker %% API connections InternalAPI --> CacheAPI InternalAPI --> InferAPI InternalAPI --> MetricsAPI CacheAPI --> CtrlMgr %% Controller connections CtrlMgr --> KVCtrl CtrlMgr --> RegCtrl CtrlMgr --> Worker KVCtrl --> V1Engine %% Cache Engine connections V0Engine --> TokenDB V1Engine --> TokenDB V1Engine --> EventMgr V1Engine --> CacheInterface V1Engine --> StorageMgr %% Compute connections V1Engine --> Blender Blender --> Attention Attention --> Models %% Storage Management StorageMgr --> MemAlloc StorageMgr --> GPUConn StorageMgr --> Abstract %% Storage Backends Abstract --> Local Abstract --> Remote Abstract --> Hybrid Abstract --> P2P %% Serialization Local --> Serde Remote --> Serde Serde --> CacheGen Serde --> TorchSerde %% Memory Pool Local --> LocalPool LocalPool --> BasePool %% Hardware connections GPUConn --> GPU Local --> CPU Local --> Disk Remote --> Network %% Styling classDef integration fill:#e1f5ff,stroke:#01579b classDef api fill:#f3e5f5,stroke:#4a148c classDef engine fill:#fff3e0,stroke:#e65100 classDef compute fill:#e8f5e9,stroke:#1b5e20 classDef storage fill:#fce4ec,stroke:#880e4f classDef hardware fill:#f5f5f5,stroke:#424242 class VAdapter,SAdapter,ReqTracker integration class InternalAPI,CacheAPI,InferAPI,MetricsAPI api class V0Engine,V1Engine,TokenDB,EventMgr,CacheInterface engine class Attention,Blender,Models compute class StorageMgr,Abstract,Local,Remote,Hybrid,P2P,Serde storage class GPU,CPU,Disk,Network hardware ``` <br> --- <br> ## 討論 ### 要如何把圖儲存下來? - ### gpt-5 (2025/10/23) 可以,用這幾種做法(依方便度→可控性排列): ### 1) 在 HackMD 預覽區直接存成 SVG(最快) 1. 在右側預覽看到 Mermaid 圖時,對著圖**右鍵 → 另存影像為…**(通常會存成 `.svg`)。 2. 如果右鍵被擋:開 **開發者工具**,選到外層的 `<svg class="mermaid">`,右鍵「**另存為**」或「**Copy → Copy outerHTML**」,貼到檔案 `diagram.svg`。 3. 需要 PNG:用工具轉檔 * Inkscape:`inkscape diagram.svg --export-filename=diagram.png` * librsvg:`rsvg-convert diagram.svg -o diagram.png` > 小提醒:**SVG 是向量圖**,放大不失真,拿去貼投影片最清晰;若一定要 PNG,匯出時加高解析度。 --- ### 2) Mermaid Live Editor 匯出 > https://mermaid.live 把程式碼貼到 **mermaid.live**,點 **Export** 選 **SVG/PNG/PDF**。適合臨時輸出單張圖。 --- ### 3) Mermaid CLI(最可自動化/可控解像度) 1. 安裝:`npm i -g @mermaid-js/mermaid-cli` 2. 存成 `diagram.mmd`(內容以 `flowchart TB` 或 `graph TB` 開頭)。 3. 匯出: ```bash # 輸出向量圖 mmdc -i diagram.mmd -o diagram.svg # 輸出高解析 PNG(透明底、2x 縮放、指定寬度) mmdc -i diagram.mmd -o diagram.png -b transparent -s 2 -w 1600 ``` 常用參數: * `-s` / `--scale`:拉高像素密度(1.5~3 常用) * `-w` / `--width`:指定寬度像素 * `-b transparent`:透明背景 --- ### 4) VS Code 外掛 裝「Markdown Preview Mermaid Support」→ 打開預覽 → **Export** 成 **SVG/PNG**。 --- ### 5) 整頁輸出 HackMD 的 **Export → PDF** 可把整篇(含圖)存成 PDF。若只要圖,建議用上面 1~3 的方法。 --- **建議**:先存 **SVG** 保留最佳品質;需要點陣圖再轉成 PNG(並提高 scale/width),做簡報或文件會更清晰。 <br> {%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}