CLASS
CSS
# Advanced CSS and Sass - 高级 CSS 和 Sass:Flexbox、网格、动画(中英文字幕) p05 006 Building the Header - Part 1
# Advanced CSS and Sass: Building the Header - Part 2 Notes
# 21 - 一个 Token 的旅程 [2026 南京大学操作系统原理]
本站点使用 MrDoc 构建
-
+
# 21 - 一个 Token 的旅程 [2026 南京大学操作系统原理]
## 目录 1. [引言:并发编程的回顾与课程目标](#1-引言并发编程的回顾与课程目标) 2. [用户的视角:从 curl 到系统调用](#2-用户的视角从-curl-到系统调用) 3. [数据中心的视角:并发与分布式的挑战](#3-数据中心的视角并发与分布式的挑战) * [C10K 问题与并发模型演进](#c10k-问题与并发模型演进) * [高并发下的性能陷阱](#高并发下的性能陷阱) * [CAP 定理:分布式系统的不可能三角](#cap-定理分布式系统的不可能三角) * [架构演进:从 Unix 到 Serverless](#架构演进从-unix-到-serverless) 4. [Token 的诞生:AI 推理与硬件加速](#4-token-的诞生ai-推理与硬件加速) * [Transformer 与 Tensor 运算](#transformer-与-tensor-运算) * [GPU 加速与 Tensor Core](#gpu-加速与-tensor-core) * [Prefill 与 Decode:推理的两个阶段](#prefill-与-decode推理的两个阶段) 5. [总结与展望](#5-总结与展望) --- ## 1. 引言:并发编程的回顾与课程目标 本课程是操作系统原理的最后一讲,旨在通过“一个 Token 的旅程”这一案例,将过去几周学习的并发编程、数据结构、操作系统内核等知识串联起来,展示真实世界中复杂系统的运作方式。 * **课程回顾**:从 `Spawn`/`Join` 的基础并发模型,到更轻量的 `Goroutine` 和异步事件驱动,再到 Promise/Future。 * **核心观点**:所有的并发编程模型本质上都可以看作是某种形式的 `Spawn` 和 `Join`,只是由不同的运行时框架(Runtime)来管理并行细节。 * **现实世界的复杂性**:真实的系统不仅涉及并发,还涉及网络、分布式存储、硬件加速等多个层面。 ## 2. 用户的视角:从 curl 到系统调用 当我们使用 `curl` 或类似工具向 API(如 `api.deepseek.com`)发送请求时,背后发生了什么? * **网络层交互**: * 通过 `strace` 工具可以观察到程序的系统调用。 * **DNS 解析**:首先进行域名解析,通常使用 UDP 协议,端口为 53。 * **TCP 连接**:建立 TCP 连接,经历三次握手(SYN, SYN-ACK, ACK)。 * **HTTP 请求**:发送 HTTP 请求,包含 Headers(如 `User-Agent`, `Authorization`)。 * **系统调用的本质**: * 对于应用程序而言,它只看到 `open`, `read`, `write`, `connect` 等简单的系统调用。 * 底层的网络分层(TCP/IP)、路由、包重组等细节对应用透明。 * **负载均衡与 CDN**: * DNS 解析可能返回多个 IP 地址,这背后通常是 CDN 或负载均衡器(Load Balancer)。 * 请求会被分发到离用户最近的边缘节点,最终转发到真正的业务服务器。 ## 3. 数据中心的视角:并发与分布式的挑战 请求到达数据中心后端,面临的是海量的并发请求和复杂的分布式环境。 ### C10K 问题与并发模型演进 * **C10K 问题**:1999 年提出,指服务器如何同时处理 10,000 个并发连接。 * **早期方案**:每个连接创建一个线程/进程。但在高并发下,上下文切换(Context Switch)开销巨大,且内存消耗严重。 * **I/O 多路复用**:引入 `select` -> `poll` -> `epoll`。允许单线程监听多个文件描述符(FD),当任意 FD 就绪时再进行处理。这是异步事件驱动模型的基础。 * **协程(Coroutine)**:如 Go 语言的 Goroutine,比线程更轻量,由用户态调度,避免了频繁的上下文切换。 ### 高并发下的性能陷阱 * **锁竞争(Lock Contention)**: * 如果用一个全局锁保护共享数据结构(如 Hash Table),在扩容(Resize)时需要进行大规模内存拷贝(Memory Copy),这会阻塞所有其他请求。 * **P99 延迟**:在高并发系统中,长尾延迟(Tail Latency)至关重要。即使平均响应很快,如果偶尔有请求等待几百毫秒,也会导致大量超时和用户流失。 * **不可靠的网络与硬件**: * 分布式系统中,网络分区(Network Partition)和机器宕机(Crash)是常态。 * 代码必须能够容忍这些故障,例如实现重试机制和容错。 ### CAP 定理:分布式系统的不可能三角 在分布式系统中,无法同时满足以下三点: 1. **Consistency (一致性)**:所有节点在同一时刻看到的数据是一致的。 2. **Availability (可用性)**:每个请求都能收到非错误的响应,不保证数据是最新的。 3. **Partition Tolerance (分区容错性)**:系统在网络分区(通信中断)的情况下仍能继续工作。 * **现实选择**:由于网络分区不可避免,分布式系统必须在 C 和 A 之间做权衡。 * **CP 系统**:牺牲可用性保证一致性(如 ZooKeeper)。 * **AP 系统**:牺牲一致性保证可用性(如 DynamoDB, Cassandra)。 * **例子**:微信朋友圈。如果你在南京拉黑了某人,然后立刻发朋友圈,由于数据同步延迟,在杭州刷朋友圈的人(或你母亲)可能仍然能看到这条朋友圈。这就是为了可用性(快速返回)而牺牲了强一致性。 ### 架构演进:从 Unix 到 Serverless * **Unix 哲学**:"Everything is a file"。数据是流动的,程序是静态的。**把数据带到计算**(Data comes to Program)。 * **分布式哲学**:程序可能会消失(机器宕机),数据必须持久化。**把计算带到数据**(Compute moves to Data)。 * **Google 三篇论文**: 1. **GFS (Google File System)**:构建可靠的分布式文件系统,将大文件切分存储。 2. **Bigtable**:基于 GFS 的 Key-Value 数据库,解决海量数据的读写。 3. **MapReduce**:描述计算图(Dataflow),将计算任务分发到存储数据的机器上运行。 * **Serverless Computing (无服务器计算)**: * 现代云服务的演进方向。开发者只需编写业务逻辑(函数),云平台负责基础设施的调度、扩缩容和容错。 * **关键要求**:函数必须是 **Idempotent (幂等性)** 的。因为函数实例随时可能被销毁并重建,重复执行不应产生副作用。 * **存算分离**:计算节点是无状态的,数据存储在持久化的对象存储(如 S3/OSS)中,并通过高性能网络(RDMA)访问。 ## 4. Token 的诞生:AI 推理与硬件加速 在大模型时代,数据中心的核心任务之一是 LLM Inference(推理)。 ### Transformer 与 Tensor 运算 * **Transformer 架构**: * 核心是一个巨大的计算图,通过多层神经网络处理输入。 * **Next-token Prediction**:给定上文,预测下一个 Token。 * **Attention Mechanism (注意力机制)**:计算 Query (Q), Key (K), Value (V) 之间的关系,提取上下文信息。 * **Tensor (张量)**: * 标量 (Scalar) -> 向量 (Vector) -> 矩阵 (Matrix) -> 多维数组 (Tensor)。 * 深度学习的本质是对 Tensor 进行大规模的线性代数运算(矩阵乘法)。 ### GPU 加速与 Tensor Core * **CPU vs GPU**: * CPU 擅长控制流(分支预测、指令流水线)。 * GPU 擅长数据并行(SIMD/SIMT),拥有成千上万个核心,适合处理大规模的矩阵运算。 * **CUDA 编程模型**: * CPU 将计算任务打包成 Kernel,发送给 GPU 队列执行。 * GPU 内部通过 Thread Block 和 Warp 组织线程。 * **Tensor Core**: * NVIDIA GPU 中专门用于矩阵乘加(MatMul + Add)的硬件单元。 * 能够极大地加速 Transformer 中的注意力计算和前馈网络计算。 * **FlashAttention**: * 一种算法优化,通过 Tiling(分块)技术,减少 HBM(高带宽内存)的访问次数,提高计算利用率。 ### Prefill 与 Decode:推理的两个阶段 为了最大化吞吐量,现代推理引擎通常将推理过程分为两个阶段: 1. **Prefill (预填充)**: * 一次性处理整个 Prompt(提示词)。 * 计算量大,但可以高度并行化。 * 生成 KV Cache(Key-Value Cache),缓存之前的注意力状态。 2. **Decode (解码)**: * 逐个生成 Token。 * 串行过程,每一步都依赖于上一步的输出。 * **Memory Wall (内存墙)**:瓶颈在于读取 KV Cache 和权重,而非计算能力。 * 通过 **KV Cache** 避免重复计算之前的 Token,但会占用大量显存。 ## 5. 总结与展望 * **技术的演进**:从单机的 Unix 哲学,到分布式的 Google 架构,再到现在的 AI 算力集群。每一代技术都是为了解决当时的核心痛点(连接数、数据规模、智能计算)。 * **Future Outlook**: * 当前的技术(如 Transformer)可能不是最终的形态。 * 在万亿美元级的 AI 产业中,充满了未被解决的问题和优化空间。 * 鼓励学生从第一性原理(First Principle)出发,思考现有的系统哪里做得不够好,哪里有新的生态位。 * 不要盲目跟风做微小的学术改进,而要关注真正能改变生产力范式的突破。
peipeo
2026年5月15日 08:32
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码