Download src/lib.rs from hongcoding/perch-gpu: direct link, hf CLI and curl.
- Browser
- Download file 2.23 kB
-
https://huggingface.co/hongcoding/perch-gpu/resolve/main/src/lib.rs
- Command line
-
hf download hf://hongcoding/perch-gpu/src/lib.rs
-
curl -L -o lib.rs https://huggingface.co/hongcoding/perch-gpu/resolve/main/src/lib.rs
2.23 kB
| //! # perch-gpu | |
| //! | |
| //! **本机 GPU 加速工具箱**——让本地大模型真的用上 GPU,而且用得对。 | |
| //! | |
| //! 从 [栖木 Perch](https://huggingface.co/datasets/hongcoding/perch) 提取的 Rust 模块。 | |
| //! | |
| //! ## 解决什么问题 | |
| //! | |
| //! 很多人以为"GPU 加速"就是传个 `num_gpu: 40`。**这是错的**: | |
| //! | |
| //! - 强行指定 GPU 层数 → Ollama 触发 runner 重载 → 反而更慢 | |
| //! - 模型闲置后被卸载 → 下次请求冷加载 3~5 秒 → 比云端还慢 | |
| //! - 本机并发跑多个模型 → 抢显存 → 互相拖慢甚至 OOM | |
| //! | |
| //! 本模块做三件对的事: | |
| //! | |
| //! 1. **如实诊断**:读 Ollama `/api/ps` 的真实 VRAM 分配,算出驻留百分比 | |
| //! 2. **热驻留**:预热一次 + `keep_alive` 保活,让模型常驻显存(首 token 0.04~0.18s) | |
| //! 3. **资源调度**:本机并发压到 1、云端可控并发,请求排队而不是互相踩踏 | |
| //! | |
| //! ## 快速开始 | |
| //! | |
| //! ```rust,no_run | |
| //! # async fn demo() -> Result<(), String> { | |
| //! use perch_gpu::{status, warmup, scheduler}; | |
| //! | |
| //! // 1) 预热 + 保活 30 分钟(首 token 从 3s 降到 0.08s) | |
| //! warmup::warmup_model("qwen3-06b:latest", "30m", None).await?; | |
| //! | |
| //! // 2) 查真实 GPU 驻留 | |
| //! let st = status::query_status(None).await?; | |
| //! for m in &st.models { | |
| //! println!("{} → GPU 驻留 {}%({}/{} 字节)", | |
| //! m.name, m.gpu_residency_percent, m.gpu_memory_bytes, m.model_bytes); | |
| //! } | |
| //! | |
| //! // 3) 本机推理排队(并发 1) | |
| //! let _permit = scheduler::acquire(false).await?; | |
| //! // ... 在这里跑本机推理 ... | |
| //! # Ok(()) | |
| //! # } | |
| //! ``` | |
| //! | |
| //! ## 设计红线 | |
| //! | |
| //! - **绝不传 `num_gpu`**:让 Ollama 自己选后端与层数 | |
| //! - **诊断不猜**:驻留百分比来自 `/api/ps` 真实字节数,不是估算 | |
| //! - **调度不改语义**:只控制并发度,不碰模型/prompt/思考档/回复长度 | |
| pub mod scheduler; | |
| pub mod status; | |
| pub mod warmup; | |
| pub use scheduler::{acquire, cached_health, cached_models, invalidate, revision}; | |
| pub use status::{ | |
| from_ps_json, query_status, residency_percent, GpuAccelerationStatus, GpuModelStatus, | |
| DEFAULT_OLLAMA_BASE_URL, | |
| }; | |
| pub use warmup::{warmup_body, warmup_model}; | |