# ubuntu桌面 **Repository Path**: dulht/ubuntu-desktop ## Basic Information - **Project Name**: ubuntu桌面 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-06 - **Last Updated**: 2026-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 桌面推理运维目录(2×RTX 2080 Ti 本地大模型服务) 这个目录是**本机本地大模型推理服务的运维与调优工作目录**(同时是一个 git 仓库): 存放 fastllm(ftllm) / vLLM 的启动脚本、速度与显存实测记录、以及每次调优的过程存档。 **vLLM 两档启动脚本(同端口 `11434`、服务名 `qwen38-27b`、功能相同,二选一互斥)**: - `start-vllm-2080ti-definitive.sh` —— **当前默认档(2026-10-12 07:11 起,改回)**:FP8 Uncensored 权重 + MTP×4 + 图文,上下文 186368 (`MODEL_DIR=/home/duliang/文档/Qwen3.8-27B-Uncensored-FP8`、`PROFILE=w8a16/mtp4-fp8kv-1x186K-text-image.env`); - `start-vllm-2080ti-nvfp4-dflash2.sh` —— 备用档:NVFP4(W4A16) + DFlash2×7 投机,上下文 262144(短文本更快)。 开机自启单元 `vllm-qwen38-27b.service`(enabled + active)的 ExecStart/ExecStop 指向 **definitive 那支**; 守护形态已**回退**为 `Type=oneshot + RemainAfterExit=yes + Restart=on-failure`(注意:这种形态下 vLLM 进程崩溃 systemd 不感知、不会自动拉起)。 ⚠️ 单元里额外加了 `Environment=SKIP_MM_PROFILING=1`:2026-10-12 06:58 起本机驱动报 `NVRM: Failed to create a DMA mapping!`, 视觉编码器 profile 必失败导致启动失败,跳过该 profile 后启动正常且运行时视觉实测无误(详见 [`readme/plan-20261012-revert-fp8.md`](/home/duliang/桌面/readme/plan-20261012-revert-fp8.md) 与踩坑 PIT-20261012-01)。 fastllm(ftllm) 那套降为**按需手动启动**——单元 `fastllm-qwen38-27b.service` 已 `disable`(文件保留,可用 `systemctl start fastllm-qwen38-27b.service` 手动拉起,与 vLLM 互斥共用 11434)。 另有 **fastllm 的 NVFP4 提速版**(QUASAR-NVFP4 权重 + DFlash2,同端口 11434 互斥切换,2026-09-24 加入)。 ## 目录结构(关键文件) ``` /home/duliang/桌面/ ├── start-fastllm-Qwen3.8-27B.sh # ★ fastllm 启动脚本(唯一入口:bash 脚本 [模式]) │ # dflash(默认) | mtp(上下文自动 163840, MTP_N=3) | plain ├── start-fastllm-Qwen3.8-27B-QUASAR-NVFP4.sh # ★ NVFP4 提速版(QUASAR 权重, 同端口互斥切换) │ # 默认 dflash + DRAFT_N=8, 上下文 163840(可 TOKENS=262144) ├── start-vllm-2080ti-definitive.sh # ★ vLLM 当前主力:FP8 Uncensored + MTP×4 图文 186368(systemd ExecStart) ├── start-vllm-2080ti-nvfp4-dflash2.sh # ★ vLLM NVFP4 另存版(2026-10-11 加):NVFP4 W4A16 + DFlash2×7 图文 262144 ├── test_speed/ # 测速/压测工具(2026-09-22 加) │ ├── ftllm_bench.py # smoke/quality/decode/prefill 四种模式(temp=0、流式) │ ├── ftllm_vision_test.py # 单请求发 N 张图的视觉压测(含请求前后显存余量) │ ├── run_config.sh # 按配置重启服务并等就绪(日志落 logs/) │ ├── bench_longctx.py # ★ 长文本单请求基准(2026-10-11 加,/tokenize 校准 + 随机 nonce + 投机指标) │ ├── render_report_tables.py # ★ 各臂 JSON → Markdown 对比表 │ ├── longctx_20261011/ # ★ 本轮三臂横评原始数据(bench_*.json / logs/ / mixed_corpus.txt / speed_chart.png / plot_report.py) │ └── logs/ vision-images/ # 各配置启动日志、13 张测试图 ├── start-qwen38-27b-best.sh # vLLM 备选启动脚本(Uncensored-FP8 + fp8 KV + 196608 + MTP×3) ├── start-qwen38-27b-best_int4.sh # vLLM int4 实验档 ├── start2080Ti-Qwen3.8-27B-*.sh # 更早的 fastllm/vLLM 实验脚本(保留备查) ├── fp8.sh / W4A16.sh / sglanQwen.sh# 历史实验脚本(SGLang / 量化档) ├── vllm-速度对比.md # ★ 速度/显存对照记录(§一~§二十五,含每次实测与真因分析) ├── vllm长文本速度报告-NVFP4-MTP-FP8-20261011.md # ★★ 本轮长文本三臂横评报告(NVFP4+DFlash2 / NVFP4+MTP4 / FP8+MTP4) ├── fastllm-文档精读-本机适用性.md # ★ 官方 docs 全量精读 + 本机适用性 + 附A~附E 执行记录 ├── launcher使用说明.md # fastllm 网页版 launcher 使用说明 ├── vllm-decode-test.sh # 解码速度测试小工具 ├── vllm-kv-quality-test.sh # KV 类型质量对照小工具 ├── autostart_list.sh # 开机自启清单脚本 ├── *.desktop # 桌面快捷方式(dsh / llama / lyweb / virtualbox) └── readme/ ├── plan.md # 任务计划(MTP 默认值 + 视觉压测) ├── plan-20260924-nvfp4.md # NVFP4 模型下载 + 启动脚本任务计划 ├── plan-20261011-nvfp4-dflash2-script.md # vLLM NVFP4+DFlash2 另存脚本任务计划 ├── plan-20261011-speed-bench.md # 长文本三臂横评任务计划(2026-10-11) ├── plan-20261012-default-nvfp4-mtp4.md # 默认档/自启/守护改 NVFP4+MTP4 图文262K 计划(2026-10-12) ├── plan-20261012-revert-fp8.md # 默认/守护改回 FP8 计划(2026-10-12,含 DMA 坑处置) └── process.md # 过程存档(时间戳 + 操作 + 结果 + 偏差) ``` ## 快速开始(最短路径) ```bash # 1) 当前推荐:MTP 投机,上下文自动 163840(160K),MTP_N=3 bash /home/duliang/桌面/start-fastllm-Qwen3.8-27B.sh mtp # 2) DFlash2 投机(短上下文更快,上下文默认 114688) bash /home/duliang/桌面/start-fastllm-Qwen3.8-27B.sh # 不带参数 = dflash # 2b) dflash + SM75 Triton GDN 预填充(prefill +1.5~3.4%,需独立 triton 3.2.0 venv) TRITON=1 bash /home/duliang/桌面/start-fastllm-Qwen3.8-27B.sh # 2c) NVFP4 提速版(QUASAR 权重 + DFlash2,同硬件实测 ~246 t/s;与 FP8 版二选一) bash /home/duliang/桌面/start-fastllm-Qwen3.8-27B-QUASAR-NVFP4.sh # 2d) vLLM:NVFP4(W4A16) + DFlash2 路线(2026-10-11 新增;会先停掉 11434 上的本项目实例) bash /home/duliang/桌面/start-vllm-2080ti-nvfp4-dflash2.sh # 2e) vLLM:切回 FP8 + MTP4 路线(即当前开机默认那支) bash /home/duliang/桌面/start-vllm-2080ti-definitive.sh # 3) 无投机兜底(最省显存) bash /home/duliang/桌面/start-fastllm-Qwen3.8-27B.sh plain # 读日志/看参数 ss -ltnp | grep 11434 tr '\0' ' ' < /proc/$(pgrep -f 'ftllm[ ]server' | head -1)/cmdline | tr ' ' '\n' | grep -E 'tokens|mtp' curl -s localhost:11434/v1/models | python3 -m json.tool | head -20 ``` > 脚本会先 **kill 掉占用 11434 的进程**(等于强制重启当前实例);端口固定 11434,不是命令行参数。 ## 关键结论摘要(截至 2026-09-22,引擎已更新到上游 37fcad2) | 主题 | 结论 | |---|---| | **引擎版本** | `/opt/fastllm` = 上游 `37fcad2` + 本机补丁 `213f01e`(CUDA 12.8 单文件降 c++17,见踩坑册 PIT-20260922-03);旧版回滚点 `backup/master-61c288a` + `/opt/fastllm-venv/ftllm-bak-61c288a/` | | **更新前后速度** | 同口径(数数 400tok,temp=0):dflash decode 旧 126/145/150 → 新 **125/148/155 tok/s**;prefill 21K/56K/90K:旧 1298/1282/1107 → 新 **1465**/1281/1103 tok/s(**无回退,短档 +13%**)。MTP 档两版持平(88~90 tok/s) | | **SM75 Triton GDN 预填充** | 上游新能力,本机可用(`TRITON=1`):prefill **+1.5~3.4%**、decode 不变;代价=首轮 JIT 编译 + 启动余量 −124MB | | MTP 草稿数 | **N=3 与 N=4 打平**,取 **3**;N=8 是陷阱(41 tok/s) | | MTP 上下文 | 默认 **163840(160K,启动余 1532 MB)**;180224(176K)纯文本稳但**开视觉即崩**(余 434 MB)→ 所以默认取 160K | | 上下文与速度 | 解码速度与上下文长度关系不大;代价在 **prefill** 与 **启动余量**(每 +32768 token ≈ −1088 MB/卡) | | **视觉(图片输入)** | 112K + 13 张 1440×900 大图在新引擎上**连测 2 次通过**(含冷启动;旧引擎必崩)→ 红线放宽,但请求后余量仅 274~294 MB,仍属边际;要稳仍建议降 `TOKENS=98304` | | CUDA 图 | **仍否掉**:112K 启动即 OOM;64K 能起但 21K 长 prefill 时 20MB 工作区分不出来 → fatal | | 思考模式 | 必须 `--enable_thinking true`(否则硬题算错);但对"上下文压缩"等工具性调用会吃掉输出上限 | | NCCL | 必须用 venv 的 NCCL 2.30.7(`LD_LIBRARY_PATH` 顶部已固定);新引擎自带**启动自检**,顺序错会直接报错不再静默降质 | | 显存判据 | 长/图请求跑完后 **GPU0 余量 ≥300 MB** 才算稳;余量几十 MB 就是下一个 OOM 现场 | ## 相关记录位置 - 速度与真因:`vllm-速度对比.md`;文档精读与执行记录:`fastllm-文档精读-本机适用性.md` - 踩坑登记册(全局):`/media/duliang/software_programs/dsh/.dsh/skills/pitfall-registry/pitfalls.md` - 本次任务:`readme/plan.md`(计划)、`readme/process.md`(过程) --- ## 2026-09-24 新增:QUASAR-NVFP4 启动脚本与实测结论 - 新增产物:`quasar_nvfp4/`(测速脚本 `bench_q.py`、四份原始结果 `bench_result*.txt`、启动日志、**`对比报告.md`**) - 一键启动:`bash start-fastllm-Qwen3.8-27B-QUASAR-NVFP4.sh [dflash|mtp|plain]`(默认 dflash,端口固定 11434) - **结论:NVFP4+MTP3 = 63.5 tok/s(比 FP8+MTP3 的 53.9 快 18%),显存余量多约 3GB,thinking 与数学题均正常**;本机虽无 FP4 张量核,fastllm 以 `pre-Ampere mixed GEMM path` 兼容执行。 - 切换前必须 `systemctl stop fastllm-qwen38-27b.service`(FP8 由 systemd 托管、`Restart=on-failure`,直接 kill 会在 60 秒后抢回 11434)。 ### 补充(22:30):QUASAR-NVFP4 默认上下文已固化为 208K - 脚本默认 `TOKENS=212992`(实测推荐);`229376` 为实测上限(无容错);`245760/262144` 本机长文必 OOM。 - 依据:`quasar_nvfp4/ctx_sweep/上下文扫描报告.md`(含各档显存与召回实测、OOM 现场)。 --- ## 2026-10-11 新增:vLLM 的 NVFP4 + DFlash2 另存启动脚本 - **新增产物**:`start-vllm-2080ti-nvfp4-dflash2.sh`(33472 B)—— `start-vllm-2080ti-definitive.sh` 的另存副本, 按 GitHub `weicj/vLLM-2080Ti-Definitive` 的 **2×2080Ti 官方向档**把默认路线换成 NVFP4 + DFlash2。 - **默认路线(本脚本)**: | 项 | 值 | |---|---| | 目标权重 | `/home/duliang/文档/Qwen3.8-27B-NVFP4`(= unsloth/Qwen3.8-27B-NVFP4 本地镜像,仓库表格所测权重) | | profile | `2x2080Ti/qwen27b/w4a16/dflash2-fp8kv-1x262K-text-image.env` | | 路线参数 | W4A16 / `--quantization compressed-tensors` / KV fp8 / **上下文 262144** / **DFlash2×7** / text+image / 单请求 | | 草稿权重 | `/home/duliang/文档/Qwen3.8-27B-DFlash2`(incoai/Qwen3.8-27B-DFlash2 本地镜像,draft 侧纯文本) | | 官方参考 | 2×2080Ti:4K/128 prefill 1370.18 · **decode 220.84 tok/s**;32K/512 1264.66 · 209.35 | | 服务 | `:11434`、服务名 `qwen38-27b`、TP2×PP1、GPU 0,1、Mode=fast | - **与 FP8 原脚本的差异**:非注释代码只改 3 处 —— `MODEL_DIR`、`PROFILE`(+`SERVED_NAME` 行尾注释)、 互斥锁(独立 `LOCK_FILE=/tmp/start-vllm-2080ti-nvfp4-dflash2.lock`,并把原脚本的锁一并视为占用, 两脚本不会同时操作同一个 11434 服务)。原脚本 `md5 = 148bb987de4fdab199862a3717000e88` **未被改动**。 ```bash # 切到 NVFP4 + DFlash2(自动停掉 11434 上的本项目 vLLM 旧实例;冷启动 3~7 分钟) bash /home/duliang/桌面/start-vllm-2080ti-nvfp4-dflash2.sh # 只看最终生效配置 / 只预检 / 停止 / 看状态 bash /home/duliang/桌面/start-vllm-2080ti-nvfp4-dflash2.sh --print bash /home/duliang/桌面/start-vllm-2080ti-nvfp4-dflash2.sh --check bash /home/duliang/桌面/start-vllm-2080ti-nvfp4-dflash2.sh --stop bash /home/duliang/桌面/start-vllm-2080ti-nvfp4-dflash2.sh --status # 切回 FP8 + MTP4 路线 bash /home/duliang/桌面/start-vllm-2080ti-definitive.sh ``` - **注意**:开机自启单元 `vllm-qwen38-27b.service` 的 ExecStart **仍指向 FP8 原脚本**(本任务未改,避免影响现网); 要让开机默认走 NVFP4,需改单元 ExecStart。若现网实例由该单元托管,正式切换建议 `sudo systemctl stop vllm-qwen38-27b` 后再手动跑新脚本(单元 `Restart=on-failure`,直接 kill 会被拉起)。 - **验证**:`bash -n` 通过;`--check` 预检 8 项全 ok;`--print` 输出 `compressed-tensors` / `W4A16` / `fp8` / `262144` / `dflash2/7` / `text+image` / `Mode: fast`; 锁互斥逻辑用隔离单测验证(活流程拒绝 / 死 pid 自动清锁)。 --- ## 2026-10-11 深夜新增:长文本三臂速度横评报告 + 基准工具链 **交付物**:[`vllm长文本速度报告-NVFP4-MTP-FP8-20261011.md`](/home/duliang/桌面/vllm长文本速度报告-NVFP4-MTP-FP8-20261011.md) (方法学 + 三臂原始数据 + 与 GitHub 官方数字对照 + 选型建议 + 踩坑)。 **三臂(同机同口径,单请求、随机 nonce 规避前缀缓存、每档 3 次取中位)** | 臂 | 权重 | 投机 | 上下文 | 五档 decode 均值 | 五档 prefill 均值 | | --- | --- | --- | ---: | ---: | ---: | | A 现网 | NVFP4 | DFlash2 K=7 | 262144 | 85.3 tok/s | 1052.9 tok/s | | B | NVFP4 | MTP4 | 229376 | **86.7 tok/s** | 1032.5 tok/s | | C | FP8(官方) | MTP4 | 262144 | 71.7 tok/s | **1105.5 tok/s** | **四条要点** 1. **官方首页 220.84 tok/s 在真实中文技术文档上不可复现**:同配置实测 4K 99.9 / 32K 97.8 / 64K 82.2 / 128K 81.0 tok/s,真实长文问答 65.7 tok/s;官方口径是"高投机命中率合成输入"。 2. **投机接受率(0.24~1.00)是 decode 的第一变量**,同一臂换个语料能差 2~4 倍;"重复语料续写"会把 MTP4 接受率抬到 1.000,属乐观口径。 3. **MTP4 vs DFlash2(都在 NVFP4 上)**:4K 短档 DFlash2 快 22%,64K/128K MTP4 反超 10~21%,真实不重复语料(chat + 长文)**两者打平**(67.4 vs 67.6 / 66.3 vs 66.6)。 4. **FP8 vs NVFP4**:prefill FP8 全程快 5~7%(TTFT 少 1~4 秒),decode 真实语料下 NVFP4 快 11~22%;128K 输入首字要等 **170 秒**——长文本痛点其实在 prefill。 **工具链**:`test_speed/bench_longctx.py`(可复跑,`--help` 见用法)、`test_speed/render_report_tables.py`(JSON→表格)、 `test_speed/longctx_20261011/plot_report.py`(出图,需 conda cuda 环境);原始数据在 `test_speed/longctx_20261011/`。 **收尾状态**:机器已恢复为开工前的 **NVFP4 + DFlash2 K=7 / 262144** 配置(29 项启动参数与开工前快照逐项一致), 服务 `qwen38-27b` 正常在 `:11434`。 --- ## 2026-10-12:NVFP4+MTP4 默认档试装后**当日改回 FP8**(含驱动 DMA 坑) **时间线**:00:06~00:21 把默认档/自启/守护改成「NVFP4 + MTP4 图文 262K」(新建 `start-vllm-2080ti-default.sh` + 新增 profile `w4a16/mtp4-fp8kv-1x262K-text-image.env` + 单元改 `Type=forking`+`PIDFile`),当时实测全部通过 (视觉正常、4K 78.8 / 32K 99.2 tok/s、`kill -9` 后 5 分 12 秒自动恢复)。 06:53 用户要求「默认改回 fp8,守护也改回,改完以后启动」→ 本轮全部回退,07:11 起服务在 FP8 档上运行。 **当前状态(2026-10-12 07:11 起)** | 项目 | 值 | | --- | --- | | 默认档 | `start-vllm-2080ti-definitive.sh` = **FP8 Uncensored + MTP4 + 图文 186368** | | 开机自启 | `vllm-qwen38-27b.service`(enabled),ExecStart/ExecStop 指向上面这支 | | 守护形态 | **已回退**为 `Type=oneshot + RemainAfterExit=yes + Restart=on-failure`(⚠️ 进程崩溃 systemd 不感知、不会拉起;要"真守护"需改回 `Type=forking`+`PIDFile`) | | 单元附加项 | `Environment=SKIP_MM_PROFILING=1`(见下) | | 已删除 | `start-vllm-2080ti-default.sh`、新增的 NVFP4 图文 MTP profile、`tools/validate_profiles.sh` 白名单那一行(校验回到 `total=27`) | **⚠️ 启动坑:驱动 DMA 映射失败 → 必须跳过视觉 profile** 回退后首启连续失败 3 次(systemd auto-restart 循环),报错固定为 `torch.AcceleratorError: CUDA error: OS call failed or operation not supported on this OS`, 栈在 `gpu_worker.determine_available_memory → profile_run → encoder_runner.profile_encoder_cache`; 同一时刻内核日志出现 **`NVRM: 0000:03:00.0 / 04:00.0: Failed to create a DMA mapping!`**(两块 2080Ti,06:58/07:02/07:06 各一次)。 解法:用 launcher 自带开关 `SKIP_MM_PROFILING=1` 跳过视觉编码器 profile(写入单元 `Environment=`), 启动即成功;**运行时视觉已实测正常**("蓝色圆形 + 橙色正方形 + 7391"全对,5.1 s)。 仅文本模型该开关默认就是 1,图文档默认 0 —— 本机目前必须显式置 1。详见踩坑 PIT-20261012-01。 **回退后实测**:`active (exited)`、`enabled`;`/v1/models` = `qwen38-27b @ /home/duliang/文档/Qwen3.8-27B-Uncensored-FP8`、186368; cmdline 含 `--quantization fp8`、`--kv-cache-dtype fp8`、`--limit-mm-per-prompt {"image":64,…}`、`--speculative-config {"method":"mtp","num_speculative_tokens":4}`; 4K 输入 prefill **1369.6** tok/s / decode **67.8** tok/s(与 10-11 横评 FP8+MTP4 臂 1349/68.7 一致);质量题 907 ✅;视觉 ✅。 **想再切 NVFP4+MTP4**:profile 需按下面内容重建(本机已删)后 `MODEL_DIR=/home/duliang/文档/Qwen3.8-27B-NVFP4 PROFILE=2x2080Ti/qwen27b/w4a16/mtp4-fp8kv-1x262K-text-image.env bash start-vllm-2080ti-nvfp4-dflash2.sh`; 完整命令与 profile 内容见 [`readme/plan-20261012-default-nvfp4-mtp4.md`](/home/duliang/桌面/readme/plan-20261012-default-nvfp4-mtp4.md) 与 [`使用说明.md`](/home/duliang/桌面/使用说明.md)。