{
  "labs": [
    {
      "slug": "p1-serving-baseline",
      "title": "Phase 1 · 本地 LLM Serving 基线",
      "description": "阶段 1 已完成复现包：请求链路、本地服务 Bring-up、测量脚本、原始日志、响应与长度扫描数据",
      "usageMode": "evidence",
      "files": 9,
      "archive": "p1-serving-baseline.tar.gz",
      "archiveBytes": 14416,
      "archiveUrl": "https://zqwiki.cn/labs/p1-serving-baseline.tar.gz",
      "artifacts": [
        {
          "path": "lab.json",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/lab.json",
          "size": 1083,
          "sha256": "a2c4f981ae618fb4b53da667420e341bcadb2dc3d153cb495b472cb23c97d6ef"
        },
        {
          "path": "logs/p1-l2-vllm-metal-install.log",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/logs/p1-l2-vllm-metal-install.log",
          "size": 4007,
          "sha256": "2e1160bfe665f6341d4afe99f297a21622ca73c492a56d68193d45b3829b7e7a"
        },
        {
          "path": "logs/p1-l2-vllm-metal-server.log",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/logs/p1-l2-vllm-metal-server.log",
          "size": 15514,
          "sha256": "c41c8f4c4a2739da4ce645c6f6e7f95ede4c5c08e0c9e655870a699858d97958"
        },
        {
          "path": "README.md",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/README.md",
          "size": 2873,
          "sha256": "1de67371355d41d129d3d1bee75211a1ee94d306f56e724098279eb1943af184"
        },
        {
          "path": "responses/p1-l2-chat-completion.json",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/responses/p1-l2-chat-completion.json",
          "size": 868,
          "sha256": "4108fc16649143c8fbc36c508c993357464da7aa98f3ce52d56e0e90962f9567"
        },
        {
          "path": "results/p1-l4-input-length-scan.csv",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/results/p1-l4-input-length-scan.csv",
          "size": 1486,
          "sha256": "1e450be1f8589191df606ff0d66aaa9b501162f213f01c4c75eb112096854df9"
        },
        {
          "path": "results/p1-l4-input-output-length-scan-initial.csv",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/results/p1-l4-input-output-length-scan-initial.csv",
          "size": 2752,
          "sha256": "c153fa6ee30e0b3a063a0ed47f1ce2ee8d6bc10a640acf380e6d135ad88862c9"
        },
        {
          "path": "scripts/p1_l4_benchmark_input_length.py",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/scripts/p1_l4_benchmark_input_length.py",
          "size": 4598,
          "sha256": "6b2db1e4108b47dc49bd186dc262d92f3646137579c48f719df428535b7589e9"
        },
        {
          "path": "scripts/p1-l2-install-vllm-metal.sh",
          "url": "https://zqwiki.cn/labs/p1-serving-baseline/scripts/p1-l2-install-vllm-metal.sh",
          "size": 6065,
          "sha256": "a541d01b9dbea627435dd3723bcf8f2d1f9ee4de7467618eaa4ea4829a4d178e"
        }
      ]
    },
    {
      "slug": "p2-inference-systems",
      "title": "LLM 推理机制 Lab",
      "description": "从 KV Cache、Batched Decode 到 MHA/GQA 的 NumPy 实验 Starter 与可复查证据",
      "usageMode": "starter",
      "files": 19,
      "archive": "p2-inference-systems.tar.gz",
      "archiveBytes": 24978,
      "archiveUrl": "https://zqwiki.cn/labs/p2-inference-systems.tar.gz",
      "artifacts": [
        {
          "path": "assignments/m2-b-causal-attention.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/assignments/m2-b-causal-attention.md",
          "size": 9396,
          "sha256": "e4bfd5b4d7636caf5d727e85f1b9d281b90b2c64dfc437206adbc2a8412a338e"
        },
        {
          "path": "assignments/m2-c-cached-mha.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/assignments/m2-c-cached-mha.md",
          "size": 4635,
          "sha256": "1fa888ae395caeb9fe4497c81bd0e54227846c2249d75bb592a645857ba3f4ea"
        },
        {
          "path": "checkoffs/m0-kv-cache.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/m0-kv-cache.md",
          "size": 1853,
          "sha256": "ae119c3f24f87946e34ed42a42e81c8bb7f3c9308aa69e5a8e281cc88347ac99"
        },
        {
          "path": "checkoffs/m1-batch-size-scan.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/m1-batch-size-scan.md",
          "size": 1745,
          "sha256": "c5c9ab200bed849605c34aad52c549de886ef5040b3fd225620cbf7091199e89"
        },
        {
          "path": "checkoffs/m2-a1-split-heads.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/m2-a1-split-heads.md",
          "size": 1537,
          "sha256": "5812bd143074ab5ed27dd72c20833ec626a752ef5b2d82e5e2b43d4affa4a3a8"
        },
        {
          "path": "checkoffs/m2-a2-qkv-projection.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/m2-a2-qkv-projection.md",
          "size": 2015,
          "sha256": "a70b0ad2d14d3020fb0277f422538d8f7f4b1d5db4990fca524ffb637bfe578f"
        },
        {
          "path": "checkoffs/m2-b-causal-attention.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/m2-b-causal-attention.md",
          "size": 6660,
          "sha256": "a207b6d6fab292a2710d5c592c3e4a3af29b6541867e6a16706fdfd458522c86"
        },
        {
          "path": "checkoffs/m2-c-cached-mha.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/m2-c-cached-mha.md",
          "size": 3838,
          "sha256": "cf7aafd6ab79773ca1d2ed94bb789ca94209c8b571be70cc77ed3adb7d7bdd22"
        },
        {
          "path": "checkoffs/p0-numpy-semantics.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/checkoffs/p0-numpy-semantics.md",
          "size": 2326,
          "sha256": "be6ca16bead04e24bb1ca05c0524381e822d23b02097dc4ea6a8f2c6c06ef5e6"
        },
        {
          "path": "grade-lab",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/grade-lab",
          "size": 3515,
          "sha256": "c73489a1a8437387a86c55dcadc139f4f9a529e5d5bb29abb4f7deaa228b75bd"
        },
        {
          "path": "grader_tests/test_m2_c_cached_mha.py",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/grader_tests/test_m2_c_cached_mha.py",
          "size": 6660,
          "sha256": "cdd38502649add2bfc2f4348c7b82ebc9d573021d148e1b6ab8344ca1058be46"
        },
        {
          "path": "lab.json",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/lab.json",
          "size": 3060,
          "sha256": "0e2e544626d2f7892a55a5c15913fd3a3f2ee52e0860564748a600a2886de9e7"
        },
        {
          "path": "Makefile",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/Makefile",
          "size": 729,
          "sha256": "b1537cc1e4ec709cc3611de952014989887c36365c18f263ee0d6545bedf2084"
        },
        {
          "path": "pyproject.toml",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/pyproject.toml",
          "size": 467,
          "sha256": "195e8f3131b906fff4a9632fe9e6fd89e5c8a6980d452ee207b8c93b4f0c0340"
        },
        {
          "path": "README.md",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/README.md",
          "size": 2343,
          "sha256": "8dfa3c11226624560ef08b7815d1b04ab786d9544a64a6c2aa3139852e7a5f40"
        },
        {
          "path": "src/inference_lab/__init__.py",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/src/inference_lab/__init__.py",
          "size": 64,
          "sha256": "b5ac9ff9700d1b240e91be3bd66d38b3981556ffc21c24828d1109d5f0108ded"
        },
        {
          "path": "src/inference_lab/multi_head_attention.py",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/src/inference_lab/multi_head_attention.py",
          "size": 3955,
          "sha256": "c84d8b970f831fdb25bc4ad0aefed8c7e1abc7125d94636427e6d4514e8bad40"
        },
        {
          "path": "tests/test_multi_head_attention.py",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/tests/test_multi_head_attention.py",
          "size": 7444,
          "sha256": "d1b13b040ae2b1373843ac190d06bf0c476fc844266c620cacb3271bad991b26"
        },
        {
          "path": "uv.lock",
          "url": "https://zqwiki.cn/labs/p2-inference-systems/uv.lock",
          "size": 14335,
          "sha256": "7a646797bb22cd5ae5decdcc80db646117a612ddb765dfb88b20a12a95fc8120"
        }
      ]
    }
  ]
}
