倍智器 · 硬件检测与 AI 环境清点工具 v1.9（命令行版 · 单文件二进制）
出品：磷虾科技
—————————————————————————————————————

一、这是什么
  一个**单文件、零依赖**的检测程序：把一台机器的硬件与系统信息读出来——
  处理器（型号/核心线程/物理核/插槽/频率范围/缓存层级/NUMA/指令集逐项）、
  内存（已装容量·系统可用·通道·每条的运行与标称频率）、
  加速卡（型号/显存/驱动/计算能力/PCIe 链路）、多卡互联与拓扑（NVLink 分组、卡间拓扑矩阵）、
  存储、网卡、PCIe 插槽、主板与固件、机箱形态、部分内核配置。
  另外会做一节只读的性能测试（内存带宽 / 处理器算力 / 存储顺序读 / 加速卡现场状态）——见第五节的说明。

  跑完生成两份东西：
    1）本机可打印的报告（A4 排版的 HTML + 纯文本）——现场可直接给客户留档
    2）自动上报到云端做规格核对，返回比对结论与一个可回看的报告链接

  **不需要安装任何东西**：不用 Python、不用 curl、不用 dmidecode/lspci/lsblk，
  二进制自带全部所需能力（静态编译，不依赖系统库）。不安装、不修改、不联网也能出报告。
  本工具是**只读**的：不采集任何业务数据或文件内容。

二、怎么用（两步）

  1）把 beizhiqi 拷到目标机器（U 盘 / scp 均可），加执行权限：
         chmod +x beizhiqi
  2）运行：
         ./beizhiqi                # 采集 + 出报告 + 上报（推荐）
         ./beizhiqi --no-upload    # 只出报告，不上报
         ./beizhiqi version        # 看版本

  报告文件生成在当前目录的 beizhiqi-report/ 下（HTML 可打印，TXT 便于复制粘贴）。

三、会清点「已经装了什么」（只读，默认就做）
  · **已安装的推理框架**：llama.cpp（llama-server / llama-cli / llama-bench）、Ollama、vLLM、
    SGLang、PyTorch、Transformers、LM Studio、Docker/Podman 等（只读命令与包元数据，不做任何安装）
  · **本机已下载的模型**：常见目录里的 .gguf / .safetensors / .bin / .onnx（列出大小与量化档），
    并把 VAE、文本编码器、投影层这类"模型组件"与"可独立运行的模型"分开统计
  · **运行中的推理服务**：**端口号不作为判据**——一律发一个只读接口请求确认（Ollama 的 /api/tags、
    OpenAI 兼容的 /v1/models、llama.cpp 的 /health），确认了才写进报告
  · **占用显存的进程**：谁在占着显卡显存，一目了然

四、想验证"服务能不能真的跑"（可选，默认不做）
     ./beizhiqi --probe                 # 对确认过的模型服务各发一次极短请求（生成上限 16 个 token）
     ./beizhiqi --probe --probe-port 37019,9000   # 非默认端口的服务，用这个补上
  · 速度数字**只用引擎自己报的计数**（Ollama 的 eval_count÷eval_duration、llama.cpp 返回的
    timings.predicted_per_second），我们不自制跑分口径；引擎不返回计时的，就写"未测速"，绝不编数字。
  · 报告里会写清口径：用的哪个模型、提示词、生成上限、并发路数。
  · 请求极短且不改任何配置；不希望在客户机器上发请求，就别加 --probe。

五、性能测试（默认就做，全部只读）
  报告里有一节「性能（只读口径）」，测四类：

  1）内存带宽——这是这类机器跑大模型最关键的一项。
     用业界 STREAM 的四个项目（复制 / 缩放 / 相加 / 三元）另加一项纯读，
     并给出与理论峰值（通道数 × 速率）的达成率。
     口径在报告里写全：数组大小、线程数（物理核）、重复次数、测试时长、取最好值、实现方式。
  2）处理器算力——单线程与全部线程的浮点上限（AVX2 FMA 口径）。
     注意：这是算力上限，不是实际推理速度；实际速度以推理引擎自报为准。
  3）存储顺序读——只读不写，读本机最大的那个模型文件（直接 IO，绕开页缓存），
     并直接换算成「按这个速度读一个 134 GB 的模型要多久」，也就是加载时间。
  4）加速卡现场状态——温度、功耗（含上限）、核心时钟、利用率、显存占用、是否降频。

  · 三项合计通常几秒到几十秒，期间会短暂吃满内存带宽与处理器；全程只读，不写盘、不改配置、不装东西。
  · 不想要这一段：加 --no-perf（报告照出，其余内容不受影响）。
  · 测试期间机器可能略卡一下，属正常；现场对性能敏感的时间窗请避开，或加 --no-perf。

六、可选参数
    --out 目录        指定报告输出目录（默认 ./beizhiqi-report）
    --json 文件       另存一份 JSON（便于二次处理）
    --no-perf         跳过性能测试（内存带宽 / 处理器算力 / 存储顺序读）
    --no-upload       不上报，只出报告
    --redact          隐去主机名/用户目录/IP/MAC（把报告当"样例"对外展示时用；
                      现场给客户自己留档不用加，报告会带上本机真实主机名）
    --open            出报告后打开浏览器（机器上有 xdg-open 时）
    --print           出报告后直接提交打印（机器上有 lp 时）
    --url 地址        自定义上报地址（默认 https://dl.linkclaw.tech/api/report）

七、想拿到更完整的信息（可选，不做也能出报告）
  以 root 运行可多读到**内存条明细**（每条容量、标称频率、实际运行频率、通道数）：
         sudo ./beizhiqi
  不加 root 时这几项会在报告里标注"未采集到"，其它项不受影响——不会为了拿这些信息去提权或装软件。

八、关于自动上报（透明说明）
  · 上报内容：上面第一段列出的硬件与系统信息 + 本机生成的设备编号（随机哈希，不含用户名）。
  · 上报地址：https://dl.linkclaw.tech/api/report
  · 不希望上报：加 --no-upload，报告照常生成，程序不会发出任何网络请求。
  · 上报后会返回一个报告链接，随时回看，也便于我方售后跟踪。

九、打印与留档
  · 打开 beizhiqi-report/ 里的 HTML → 点右下角"打印 / 存为 PDF"，或浏览器里 Ctrl+P。
  · 页面已按 A4 排版，横向不出血、不跨页断表，黑白打印机同样清晰。
  · 页脚署名"磷虾科技"，页眉带报告编号与采集时间，便于归档与对账。

十、支持的平台
  · Linux x86_64（静态二进制，已在 Ubuntu 22.04 / 24.04 上运行通过）。
  · 加速卡明细：NVIDIA 走驱动自带的 nvidia-smi；未装驱动时自动退回读取 /sys 里的 PCI 型号并标注。

十一、常见问题
  Q：要不要装 Python 或其它依赖？
  A：都不用。单个文件，拷过去 chmod +x 就能跑。
  Q：需要联网吗？
  A：出报告完全不需要联网；联网只用于把结果上报（可用 --no-upload 关掉）。
  Q：报告里的 PCIe 为什么只写"电气上限"？
  A：电气上限是这张卡的接口规格（比如 Gen4 ×8），稳定、可对比；实际协商速率会随负载在 Gen1~Gen4 之间跳，写进报告反而要解释一堆，所以本报告不写当前速率。
  Q：能测性能吗（推理速度、内存带宽）？
  A：分两种。机器本身的能力，本工具直接测：内存带宽（STREAM 口径）、处理器浮点上限、存储顺序读、加速卡现场状态，口径全部写在报告里，可复现。
     推理速度（每秒出多少字）不自己造：只在加 --probe 且推理引擎自己返回计时字段时给出，用引擎自报的计数，并写清模型、提示词、生成上限与并发路数。

  Q：同一天跑两次，会不会覆盖上一次的报告？
  A：不会。本地报告文件名带日期与时分秒（例：倍智器-硬件检测报告-主机名-20260914-142530.html），
     每次都是一份新文件；上报到服务器的每一份也是独立存档（按时间戳 + 设备编号命名），
     可以随时回看、逐次比对。
  Q：内存带宽为什么要开这么多线程？数字可信吗？
  A：内存带宽由**内存通道数**决定，一条通道要足够多的核同时压才跑得满，所以线程数按物理核自动取
     （上限 128），机器多大就用多大，开少了必然低估。多 NUMA 域的服务器（如 EPYC 分成 4 个域）上，
     每个线程用独立缓冲、分别落在自己所属的域，各域带宽相加才是整机带宽——共用一块大数组只会
     吃到单个域的通道数，数字会被压低近一半。要给出"理论峰值/达成率"，需以 root 运行读到内存条
     明细（通道数 × 频率）；读不到就只报跑出来的数字，不留空白、不编。
  Q：能测这台机器还有几个空槽、还能再加几张卡吗？
  A：能。报告有一节「PCIe 插槽」，直接读主板 SMBIOS：每个槽的槽型（PCIe 4 x16 / M.2 Socket 3 …）、
     电气位宽、槽长、当前是"已用"还是"空闲"，以及这个槽上插的到底是什么（加速卡 / 网卡 / 某块 NVMe）——
     这是这台机器的**实际状态**，规格书上的设计值代替不了。需要以 root 运行才能读到（SMBIOS 原始表权限）。
  Q：网卡测了吗？网络速度呢？
  A：网卡规格测了：型号、协商速率、驱动、接口电气上限、归属哪个 NUMA 域，以及是否插着网线。
     网络**吞吐**不测——那要两台机器同时对打才有意义，属第三方工具（如 iperf3）现场互校的活，
     本报告里写明这条口径，不拿单机数字冒充网络性能。
  Q：报告里没写"当前 PCIe 速率"是漏了吗？
  A：不是。当前协商速率会随负载在 Gen1~Gen4 之间跳（省电机制），写进去反而要解释一大堆；
     报告写的是这张卡的接口电气上限（如 Gen4 ×16），稳定、可对比。

十二、联系
  磷虾科技 · 技术支持
