技术分享
未读
深入浅出 llama.cpp(七):突破上下文壁垒 —— KV Cache 的滚动与平移策略
零、前言 在之前的章节中,我们已经实现了多轮对话,甚至掌握了并行处理多个序列。但有一个现实的“物理极限”我们始终没有正面回应:n_ctx(上下文窗口大小)。 如果你的模型设置 n_ctx = 2048,当对话进行到第 2049 个 Token 时,程序会因为空间不足而报错或崩溃。为了让 AI 能进行
技术分享
未读
深入浅出 llama.cpp(六):并行推理的艺术 —— 多序列管理与批量解码优化
零、前言 在上一章中,我们通过集成 common 库极大简化了代码逻辑,实现了一个可以连续对话的 REPL。但那个实现存在两个致命的性能缺陷: 逐字解码 (Serial Prefill):即使是输入的 Prompt,我们也是一个 Token 一个 Token 喂给模型的。这完全浪费了现代 CPU/G
技术分享
未读
深入浅出 llama.cpp(五):拥抱 C++ 环境 —— 集成官方 common 工具库
零、前言 在之前的开发中,我们一直试图保持“纯净”,只调用 llama.h 提供的 C 接口。但在处理“批量填充 Batch”或“复杂的采样策略”时,代码开始变得臃肿且难以维护。 llama.cpp 官方其实为我们准备了一套非常强大的 C++ 工具库,就在源码的 common/ 文件夹里。虽然它不是
技术分享
未读
深入浅出 llama.cpp(四):手动操纵 KV Cache 实现增量对话
零、前言 在上一篇文章中,我们跑通了 simple.cpp。但细心的读者会发现,那个例子每轮都会重置。 如果要实现像 ChatGPT 那样“有记忆”的连续对话,核心就在于对 KV Cache 的管理。 为了深入理解,不如脱离高层封装,直接通过手动操作 llama_batch 结构体,来看看 llam
技术分享
未读
深入浅出 llama.cpp(三):拆解 simple.cpp —— 掌握推理的核心逻辑
零、前言 在上一篇文章中,成功搭建了开发环境并编译了第一个程序。今天,我将深入 llama.cpp 官方提供的最简示例—— simple.cpp。 虽然它只有 200 多行代码,但它完整地展示了一个大语言模型从加载到生成文字的“生命周期”。理解了这个文件,就掌握了 llama.cpp 的核心 API
技术分享
未读
深入浅出 llama.cpp(二):环境搭建与最小可行示例
零、前言 在上一章中,我简单介绍了 llama.cpp 的整体项目架构,而在这一章中,我将要将其导入我的项目进行集成,并且构建出一个最小可行程序,让它能够成功跑起来。 注:本章节适合对 CMake 项目配置、导入和构建不熟悉的人群,如果你已经对这一过程完全了解,可以直接跳过。 一、拉取 Git 子模
技术分享
未读
深入浅出 llama.cpp(一):C++ 开发者集成大模型的首选
零、前言 随着 AI 技术的不断发展,各种前沿 AI 科技从科研领域转向实战,其中 Python 环境(PyTorch、Transformers)以其极其高的性能与较为简单的使用工作量成为了许多人的首选。 然而,当想要进一步 将 AI 集成进高性能的原生应用 时,Python 的 运行时环境、巨大的
技术分享
未读
关于解决电脑连接校园网WIFI后无法连接认证页面而无法上网的经验
在 Windows 上以 WIFI 连接了校园网后,会偶然发生找不到校园网登录页面的问题。 甚至在获取了登录页面的网址之后,也会提示“无法连接DNS”。 为解决这一问题,现编写以下教程以供参考,在 Windows 11 上测试有效。 操作时长:约 3 到 5 分钟。 前言 本篇经验适合同时满足以下条
技术分享
未读
从零开始:手把手教你实现一个 C++ 的 std::variant (基础数据结构复现实战)
前言 你好,C++ 探索者!你是否曾对 std::variant 的内部机制感到好奇? 这个 C++17 引入的“类型安全的联合体”,究竟是如何在编译期施展魔法,从而在运行时优雅地存储多种不同类型的值的? 这篇博客就是为你准备的钥匙。我们将一起打开 variant 的引擎盖,亲手用 C++ 模板元编
技术分享
未读
人工智能-第五、六周周报
第五周周报:https://www.gstech.fun/knowledge/AI/post5.html 第六周周报:https://www.gstech.fun/knowledge/AI/post6.html