vLLM 高并发推理服务搭建与压测
⚠️ 本文为公开资料整理版(占位):内容基于 vLLM 官方文档与社区实践梳理,用于建立知识框架;本人尚未在本地完成完整压测,真实吞吐/延迟数据待补实践后替换。如果你正在准备面试,这篇能帮你把「高并发推理」讲成体系;若要写进简历,请先亲手跑一遍。 一、vLLM 解决什么问题核心创新是 PagedAttention:把 KV-cache 像操作系统管理内存页一样分页管理,避免为「最大可能长度」预先分配整块显存。效果是对话场景显存利用率大幅提升,能支持的并发数显著上去了。 对比定位: llama.cpp:端侧/单机主力,量化友好、轻量; vLLM:高并发在线服务,吞吐优先; TGI(Text Generation Inference):HuggingFace 出品,企业级、功能全。 二、起一个 OpenAI 兼容服务12345python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --tensor-parallel-size 1 \ --gpu-memory-utili ...
matplotlib 可视化踩坑实录:那些年画错的图
经验驱动。下面这张图是本机真跑的(Agg 后端,p2_matplotlib_demo.png,50KB)。但它中途报了一堆 warning——正好把 matplotlib 最坑的几个点全暴露了。中文乱码、后端选错、双轴混淆、保存丢边,逐个拆。 坑 1:中文乱码(几乎人人都踩)我这张图用了中文标签(”1月””销售额(万元)”),结果真跑时刷了一屏: 1UserWarning: Glyph 26376 (\N{CJK UNIFIED IDEOGRAPH-6708}) missing from font(s) DejaVu Sans. matplotlib 默认字体 DejaVu Sans 不含中文字形,中文全变成方块(豆腐块)。解决: 123import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "PingFang SC"]plt.rcParams[&q ...
🗂 C 盘满了别乱删:一套只读扫描 + 分级清单的审计流程
我的 C 盘是 300 GB,长期只剩 50 多 GB 可用。每隔一阵子就会弹出「磁盘空间不足」,每次都想着”这回一定要清一清”,然后打开资源管理器,看着 AppData 这个黑洞,不知道从哪儿下手,最后关掉继续拖。 真正解决问题的不是某次大清理,而是换了个做法:先只读扫一遍,把「能删的、要想想的、不能碰的」分好级,再动手。下面这套流程从踩坑到成型,全盘扫描 29 秒出报告。 一、为什么不能边扫边删清理磁盘最大的风险不是删错文件,而是在没看清楚之前就动手。 AppData 下面塞着三样东西:真正的缓存垃圾、正在使用的运行时(.conda 里的 llama-factory 环境、.workbuddy 的技能库)、以及应用数据(微信聊天记录)。它们的名字长得一模一样——都是一堆看不懂的英文目录。凭目录名判断该不该删,等于抛硬币。 所以第一条是硬规矩:第一轮只扫描,一个文件都不动。产出带实测大小的分级报告,清理是另一步,必须逐个确认后再执行,而且进回收站,不硬删。 这不是教条。有一次扫完发现 C:\Users\tang\.cache 有 7.3 GB,看着像标准的缓存目录,可以直接清。再往下 ...
机器学习岗高频面试题与答法(含手写推导)
面试季整理的一份「能讲清楚、不是背八股」的机器学习题单。我的经验是:面试官不在乎你背得出公式,而在乎你能不能讲清「为什么用这个、什么时候会翻车、翻车了怎么救」。下面每道题我都按这个逻辑拆。 一、线性回归:从损失函数到闭式解常问:推导线性回归的参数解。 核心是最小化 MSE 损失 $J(w)=\frac{1}{2n}|Xw-y|^2$。对 $w$ 求导并令为 0: $$\nabla_w J = \frac{1}{n}X^T(Xw-y)=0 ;\Rightarrow; w^*=(X^TX)^{-1}X^Ty$$ 这就是正规方程。第一个坑点:当特征存在多重共线性时 $X^TX$ 不可逆,解会爆炸——这正是 L2 正则(岭回归)的动机,$w^*=(X^TX+\lambda I)^{-1}X^Ty$,$\lambda I$ 保证可逆。我在「不平衡数据集与准确率陷阱」那篇里也提到过,正则化本质是给优化问题加先验。 为什么用 MSE 而不是 MAE:MSE 处处可导、有闭式解;MAE 在 0 处不可导,得用梯度下降。这是工程取舍,不是玄学。 二、逻辑回归:为什么是交叉熵常问:逻辑回归损失函数为什么是 ...
pandas 完整数据分析实战:从脏数据到结论
经验驱动。下面这段分析是本机真跑的:一份带典型脏数据的订单 CSV,经 pandas 清洗后算出月度/品类/客单价/环比。每一步的坑和真实数字都写在这里。 真实数据长什么样(脏的)从业务库导出的原始表经常是这样:金额带 ¥ 和逗号、日期混用 2025-01-03 和 2025/01/09、区域有别名(east 和 华东)、有重复行、有负金额、有缺失日期。我造了一份 11 行的样本,结构和真实导出一致。 清洗(每一步都对应一个坑)1234567df = df.drop_duplicates() # ① 去重(重复订单)df["amount"] = df["amount"].astype(str).str.replace("¥","",regex=False) \ .str.replace(",","",regex=False).astype(float) # ② "¥ ...
用 FastAPI 把本地模型包成生产级 API
模型在本地能跑通只是第一步,把它变成别人能稳定调用的服务才是工程。我用 FastAPI 包过本地大模型推理,这篇讲怎么从「能跑」走到「生产可用」,以及几个必踩的坑。 一、为什么是 FastAPI 原生 async,天然适合「等模型推理」这种 IO/计算混合场景; Pydantic 做请求校验,接口边界清晰; 自带 OpenAPI 文档,联调省事; 生态成熟,容器化、中间件都很顺。 二、第一坑:模型必须全局单例加载新手最容易犯的错误:把模型加载写进每个请求里。结果每个请求都重新加载一遍模型,显存瞬间炸。正确做法是模块级单例: 1234567891011# model.py —— 应用启动时加载一次from transformers import AutoModelForCausalLM, AutoTokenizer_model = None_tok = Nonedef get_model(): global _model, _tok if _model is None: _tok = AutoTokenizer.from_pretrained(MODEL_DI ...
📐 从小说到分集地图:短剧开发要先把「不可改的」圈出来
把一本小说或一个想法变成能拍的短剧,最容易走的弯路是直接开始写第一集。 写出来的东西往往不差——场景清楚、台词通顺、镜头感也有——但写到第三集就开始散:主角的策略每集都在换、对手的存在感越来越弱、当初埋的线接不上,最后只能靠”又出了个坏人”往下推。 问题不在文笔,在开发阶段该定的东西没定。下面这套流程是把”什么不能改、什么可以探索、故事靠什么持续产生冲突”先钉死,再谈分集。 一、先判断入口,别为了流程完整虚构材料五种常见入口,处理方式完全不同: 手上有什么 做什么 只有想法、题材或一句情绪目标 先做方向探索,再建创作简报与故事引擎 已有梗概、小说、改编材料 保存来源,先列出已承诺事实 / 可改范围 / 待确认项 方向已定,只缺分集 直接做或改分集地图 已有单集剧本 不要为了流程完整补开发材料,直接进写作 已有多集整稿 保留原文件,只做精确索引,从断点续跑 第 4 条是最反直觉的:已有的单集剧本不需要回头补一份”创作简报”来证明流程完整。补出来的文件多半是把剧本倒着翻译成方法论术语,既没用又会让后续阶段误以为它是原始依据。 长材料还有一条硬规矩:不要用正则 ...
llama.cpp 量化部署:从 GGUF 到端侧推理
本地跑大模型绕不开 llama.cpp。很多人以为它是个玩具,其实它是今天绝大多数桌面/端侧推理的底座——Ollama、LM Studio 底层都是它。这篇讲我从 GGUF 到真正在消费卡上跑顺的实战路径。 一、先搞清楚 GGUF 是什么GGUF 是 llama.cpp 的模型格式,把权重、分词器、超参、对话模板全打进一个文件。相比原来的 GGML,它支持多字段、可扩展。关键认知:同一个模型有无数量化档位,文件大小和显存占用能差好几倍。 我常用的档位: q4_K_M:4-bit 主流量化,质量损失小、体积友好,7B 约 4GB、27B 约 15GB。 q8_0:8-bit,更接近原模型,但体积翻倍。 q2_K / q3_K:极限压缩,质量明显掉,只在没有办法时才用。 经验法则:优先 q4_K_M,质量/体积最平衡;要保真再上 q8_0。 二、怎么把模型变成 GGUF如果拿到的是 HuggingFace 的 safetensors,用 llama.cpp/converting 脚本 + quantize 工具转: 12python convert_hf_to_gguf.py ./mo ...
用原生 JS 做可交互数据可视化(零依赖)
经验驱动。不引 ECharts、不接 CDN,纯 SVG + 原生 JS 手搓一个可交互柱状图(附 p2_js_viz.html,支持 hover 提示、打乱、升降序),JS 已用 node 校验。为什么不用库、怎么画、交互怎么做、高分屏怎么不糊,全在这里。 为什么不用图表库ECharts 好用,但引入就要几百 KB;CDN 不稳(面试现场断网就尴尬);而且面试官想看的是你会不会画,不是你会不会调 API。手搓一个 SVG 柱状图,既能进博客当 demo,又能当面试谈资——“坐标映射 + 事件绑定”这两件事讲清楚,比背配置项值钱。 怎么画:核心是坐标映射柱状图本质是一个线性映射:数据值 v → 矩形高度 h。 123var max = Math.max.apply(null, data.map(d => d.v));var h = (H - pad*2) * d.v / max; // 把值归一化到绘图区高度var y = H - pad - h; // SVG 的 y 轴向下,所以要从底部往上减 x 方向按 数据条数 均分,每条留点间隙。坐 ...
纯前端单文件工具开发套路:一个 HTML 搞定
经验驱动。这篇文章本身附带一个真实可用的单文件工具(p2_frontend_tool.html,JSON 格式化/Base64 编解码/字数统计),内嵌 JS 已用 node 做过语法校验。开发套路、踩过的坑、哪些场景该用、哪些坑必须躲,全写在这里。 为什么需要单文件工具日常和面试里经常有这种小需求:临时格式化一段 JSON、把中文转成 Base64、统计一段文案字数、做个快速的单位换算。开 IDE、建工程、装依赖太重了。一个双击即开、零依赖、可离线的 HTML 文件,刚好补齐这个缝隙——也能直接当博客的 demo 页,面试官点开就能玩。 结构套路(三段式)一个能打的单文件工具,骨架基本固定: <style> 里用 CSS 变量定义主题:--bg / --card / --fg / --accent,深色浅色一键换,后期好维护。 布局用 CSS Grid:.grid{grid-template-columns:1fr 1fr},配 @media(max-width:720px) 在小屏塌成单列。 **交互靠 textarea + button + ...
avatar
HYRX-TG
运维工程师 | AI算法学习者 | 热爱写作与技术分享
关注 河岳日星的 GitHub
公告
欢迎来到河岳日星的博客,记录技术与成长
最新文章
网站资讯
文章数目 :
122
已运行时间 :
本站总字数 :
171.6k
本站访客数 :
本站总访问量 :
最后更新时间 :
一言
:D 获取中...
:D 获取中...