编程 vLLM 0.5 深度拆解:当 PagedAttention 重塑 LLM 推理内存——从 OS 分页思想到 MoE 分布式推理的工程全貌(2026)

2026-07-18 13:17:37 +0800 CST views 5

vLLM 0.5 深度拆解:当 PagedAttention 重塑 LLM 推理内存——从 OS 分页思想到 MoE 分布式推理的工程全貌(2026)

前言:大模型推理的「最后一公里」困局

2026年,大模型推理基础设施赛道正在经历一场静默革命。

表面上,所有人都在追逐下一个 SOTA 模型——GPT-5.6、Kimi K3、Claude 4。但真正在生产一线摸爬滚打的工程师们知道,模型参数的军备竞赛只是上半场,推理效率的工程化才是下半场真正的主战场。一个在 A100 上跑出 2400 tokens/s 吞吐量的推理服务,和一个只能跑出 800 tokens/s 的推理服务,在企业账单上相差的不是三倍——是三倍乘以 GPU 小时单价,再乘以日均推理量。

在这场推理效率革命中,vLLM 是绕不开的存在。2023年 UC Berkeley LMSYS Org 开源至今,vLLM 凭借其革命性的 PagedAttention 机制,从一个学术原型迅速成长为工业级推理标准——Hugging Face、NVIDIA、AWS、阿里云、字节跳动均将其集成至生产系统。2026年初发布的 vLLM 0.5,更是在 MoE 模型支持、分布式推理和内存管理上完成了关键迭代。

本文将从一个有十年工程经验的程序员的视角,深入拆解 vLLM 0.5 的 PagedAttention 核心原理、连续批处理架构、MoE 推理优化、分布式部署策略,以及 2026 年四大推理框架(vLLM 0.5 / TGI 2.0 / TensorRT-LLM 1.8 / DeepSpeed-MII 0.9)的生产级性能对比,给出一份真正能落地的选型指南。


一、从「餐厅等位」到「操作系统内存管理」:PagedAttention 的核心思想

1.1 传统 LLM 推理的两大性能杀手

在理解 PagedAttention 之前,我们需要先理解传统 LLM 推理框架(如 Hugging Face Transformers)的两个致命缺陷。

缺陷一:显存碎片化

当一个 LLM 处理多轮对话时,需要为每个请求分配一段连续的显存来存储 Key-Value Cache(KV Cache)。以 Llama 3 70B 模型为例:每个 token 的 KV Cache 在 FP16 精度下需要约 1.05GB 的显存。如果模型同时处理 16 个请求,每个请求平均生成 512 个 token,那么显存需求轻松超过 16GB。

传统方法的做法是:每个请求在初始化时一次性申请一大块连续显存,就像餐厅必须为每位顾客预留固定大小的桌子——即使顾客只吃了两口,桌子也不能让给别人。结果就是大量显存碎片:已完成的请求释放后,其空间无法被新请求复用,因为剩余请求的 KV Cache 仍然需要那块连续空间。

缺陷二:GPU 空闲浪费

传统推理框架使用静态批处理(Static Batching):所有请求必须同时开始、同时结束。当一个请求快速生成完毕后,其他请求还在慢慢解码——整个 GPU 必须等待最慢的那个请求完成才能处理下一批。这就像自助餐厅要求所有顾客必须同时入座、同时吃完——效率可想而知。

1.2 PagedAttention:操作系统的分页思想

vLLM 的 PagedAttention 正是借鉴了操作系统虚拟内存管理的思路来解决这两个问题。

在操作系统中,物理内存被划分为固定大小的页(Page),每个进程的虚拟地址空间也被划分为相同大小的页。通过页表(Page Table),操作系统可以将逻辑上连续的虚拟页映射到物理上不连续的内存页,从而实现:物理内存不需要连续(解决了内存碎片化问题);按需分配和释放(内存利用率大幅提升);页共享(多个进程可以共享同一物理页)。

PagedAttention 将这套思想完美移植到 GPU 显存管理中:

传统 KV Cache 分配(必须连续显存):
请求A: [block0 (已用10/16)] [block1 (已用5/16)] → 剩余空间无法复用
请求B: [block0 (已用14/16)] → 碎片!

PagedAttention KV Cache 分配(块可分散复用):
请求A: block_a[0], block_b[2], block_c[5]  → 不连续但逻辑连续
请求B: block_a[1], block_a[2], block_d[3]  → 复用 block_a 的空闲位置

核心变化:KV Cache 不再按「序列」为单位分配,而是按固定大小(通常 16 个 token)的**块(Block)**来分配。每个序列的 KV Cache 可以分布在多个不连续的物理块上,就像进程的虚拟地址空间可以映射到物理上分散的内存页。

1.3 动态页大小调整:vLLM 0.5 的关键升级

vLLM 0.5 在 PagedAttention 基础上引入了**动态页大小调整(Dynamic Page Size Adjustment)**机制,这是 0.4 到 0.5 最重要的改进之一。

不同请求的序列长度差异巨大:短请求可能只需要 64 个 token 的 KV Cache,长请求可能需要 8192 个 token。如果使用固定块大小,短请求会浪费大量空间(每个块 16 token,短请求只用 10 个就结束了),长请求则需要分配太多块。

vLLM 0.5 的解决方案是自适应块大小

class DynamicPagedAttention:
    def __init__(self):
        self.page_sizes = {
            'short': 8,      # 短序列:8 token/块
            'medium': 16,    # 中等序列:16 token/块
            'long': 32,      # 长序列:32 token/块
        }
    
    def select_page_size(self, estimated_length):
        if estimated_length < 128:
            return self.page_sizes['short']
        elif estimated_length < 2048:
            return self.page_sizes['medium']
        else:
            return self.page_sizes['long']
    
    def get_allocation_plan(self, requests):
        # 先处理长请求,再处理短请求
        # 短请求可以填补长请求留下的碎片
        sorted_requests = sorted(
            requests,
            key=lambda r: r.estimated_length,
            reverse=True
        )
        return self._bin_packing(sorted_requests)

vLLM 0.5 实测数据:在 128 并发的高并发场景下,动态页大小调整将显存碎片率从 ~10% 降低到 ~4%,整体显存利用率从 90% 提升至 95% 以上,首 token 延迟(TTFT)降低 12%。


二、连续批处理:GPU 吞吐量的真正释放

2.1 静态批处理 vs 连续批处理

连续批处理(Continuous Batching,也称 Iteration-level Batching)是 vLLM 的另一核心技术,与 PagedAttention 形成协同效应。

静态批处理的工作方式

时刻 T1: [请求A, 请求B, 请求C, 请求D] → 同时开始
时刻 T3: [请求A: tok5, 请求B: tok3, 请求C: tok9, 请求D: tok2]
...
时刻 T10: [请求A: 完成✓] → A 已完成但 GPU 必须等 B/C/D
时刻 T15: [请求B: 完成✓] → B 也只能等 C/D 完成

GPU 在等待最慢请求的过程中完全处于空闲状态——这是巨大的算力浪费。

连续批处理的工作方式

时刻 T1:  [请求A, 请求B, 请求C, 请求D] → 同时开始
时刻 T3:  [请求A: tok5, 请求B: tok3, 请求C: tok9, 请求D: tok2]
时刻 T4:  [请求A: 完成✓] → 立即插入新请求E
          [请求E进, 请求B: tok3, 请求C: tok9, 请求D: tok2] → GPU 无空闲
时刻 T5:  [请求E: tok2, 请求B: tok4, 请求C: tok10, 请求D: tok3]
...

连续批处理的核心是在每个 iteration(每生成一个 token)结束后,检查是否有请求已完成,如果有则立即释放并插入新请求。GPU 永远不会因为某个请求过长而被迫等待——只要有待处理请求,GPU 就保持满载。

2.2 连续批处理的调度策略

vLLM 0.5 在连续批处理调度上引入了**优先级调度(Priority Scheduling)**机制,综合考虑请求等待时间和序列长度进行调度:

class ContinuousBatcher:
    def schedule_iteration(self):
        # Step 1: 找出本轮完成的请求,释放资源
        finished = [req for req in self.running_batch if self.is_finished(req)]
        for req in finished:
            self.free_kv_blocks(req)  # 释放 KV Cache 块
        
        # Step 2: 按优先级从等待队列选取新请求
        # 优先级 = (等待时间 × 权重) - (序列长度 × 惩罚系数)
        self.waiting_queue.sort(key=self.compute_priority, reverse=True)
        
        available_slots = self.max_batch_size - len(self.running_batch)
        new_requests = self.waiting_queue[:available_slots]
        
        # Step 3: 为新请求分配 KV Cache 块(触发 PagedAttention)
        for req in new_requests:
            self.allocate_kv_blocks(req)
            self.running_batch.append(req)
        
        return self.running_batch

2.3 Prefill-Decode 分离:不同阶段的不同策略

LLM 推理分为两个阶段:Prefill 阶段(处理输入 prompt,首次计算所有 token 的 KV Cache)和 Decode 阶段(自回归生成输出 token,每次只计算一个新 token)。

这两个阶段的计算特性截然不同:

阶段计算特性最优策略
Prefill计算密集、大矩阵乘法、适合批处理优先调度,充分利用 GPU 算力
Decode内存密集、自回归串行、batch size 通常为1减少调度开销,快速响应

vLLM 0.5 通过 Chunked Prefill 技术,将长 prompt 的预填充切分为多个 chunk,避免长 prompt 独占 GPU 导致短请求饿死的问题:

vllm serve meta-llama/Llama-3-70b-instruct \
    --enable-chunked-prefill \
    --prefill-chunk-size 1024 \
    --max-num-batched-tokens 8192

三、vLLM 0.5 核心技术升级:MoE 支持与分布式推理

3.1 MoE 模型:大模型的新范式与推理挑战

2026年,Mixture-of-Experts(MoE)模型已成为大模型的主流架构。以 Mixtral 8×7B 为例:虽然总参数量高达 46.7B,但每个 token 只需要激活 2 个专家(Expert),实际推理计算量仅相当于约 12B 参数的稠密模型。这种「高参数量、低激活量」的特性使得 MoE 模型在训练侧极具性价比,但给推理侧带来了独特挑战。

传统推理引擎假设每个 token 都会经过所有参数计算,而 MoE 模型需要动态路由——每个 token 由路由器(Router)决定激活哪两个专家:

Token → Router → 选择 Expert #3 和 Expert #7 → 
  Expert #3.forward() + Expert #7.forward() → 输出

这意味着:每个 token 的计算图不同,无法使用标准的批处理优化;专家选择存在负载不均衡问题——某些专家被频繁激活,某些专家长期闲置;多 GPU 部署时,专家分布在不同 GPU,路由跨 GPU 通信延迟高。

3.2 FusedMoE 内核:vLLM 0.5 的 MoE 优化

vLLM 0.5 引入了 FusedMoE 内核,专门解决 MoE 模型的推理效率问题。核心思想是将路由选择和专家计算融合为一个 CUDA kernel,减少 GPU 内存带宽瓶颈和 kernel 启动开销:

class FusedMoEAttention(nn.Module):
    def __init__(self, num_experts=8, top_k=2):
        self.router = nn.Linear(self.hidden_dim, num_experts)
        self.experts = nn.ModuleList([
            nn.Linear(self.hidden_dim, self.hidden_dim)
            for _ in range(num_experts)
        ])
    
    def forward_fused(self, x):
        # 融合后的前向计算
        # 在单个 CUDA kernel 中完成:
        # 1. 路由器计算(计算每个 expert 的权重)
        # 2. Top-K 选择(选出权重最高的 K 个 expert)
        # 3. 专家激活与加权求和
        
        # 计算路由权重
        router_weights = self.router(x)  # [batch, seq, num_experts]
        
        # Top-K 选择
        top_k_weights, top_k_indices = torch.topk(
            router_weights, self.top_k, dim=-1
        )
        
        # 归一化权重
        top_k_weights = F.softmax(top_k_weights, dim=-1)
        
        # 使用 Triton 自定义 kernel 实现融合专家计算
        # 将 Router + TopK + Expert Compute 融合进一个 kernel
        output = triton_fused_moe(
            x,                      # 输入 hidden states
            self.experts.weight,    # 专家权重(扁平化存储)
            top_k_indices,           # Top-K 选中的专家索引
            top_k_weights,           # 归一化权重
            self.top_k,
            self.num_experts
        )
        return output

实测数据:在 Mixtral 8×7B 模型上,vLLM 0.5 的 FusedMoE 内核将推理吞吐量较 vLLM 0.4 提升 28%,专家层动态分配策略使得多 GPU 环境下负载不均衡率从 15% 降低至 6%。

3.3 分布式推理:从单机到百卡集群

vLLM 0.5 在分布式推理上做了重要改进,减少跨 GPU 通信开销,优化 NCCL/MPI 通信策略,支持多机多卡场景下的动态负载均衡:

# 单机 4 卡张量并行
vllm serve meta-llama/Llama-3-70b-instruct \
    --tensor-parallel-size 4 \
    --gpu-memory-utilization 0.92

# 多机多卡(2 节点 × 4 卡 = 8 卡)
# 需要配合 NCCL 跨节点通信
vllm serve meta-llama/Llama-3-70b-instruct \
    --tensor-parallel-size 8 \
    --pipeline-parallel-size 2 \
    --nnodes 2 \
    --node-rank 0 \
    --master-port 29500

超 100 卡集群部署时,vLLM 0.5 通过动态负载均衡将性能损耗降低 30%。新增的多模型并行加载功能,可同时加载多个模型实现并发推理:

# 同时托管多个模型
vllm serve \
    --model meta-llama/Llama-3-70b-instruct \
    --model Qwen/Qwen2-72B-Instruct \
    --enable-multiple-model-loading \
    --max-num-seqs 256

四、量化技术:FP8 与 INT4 的生产级实践

4.1 为什么量化是 2026 年的必选项

2026年,模型的参数量已经从百亿向万亿级别跃升。以 Llama 3 70B(FP16)为例:单是模型权重就占用 140GB 显存,加上 KV Cache、激活值,一个 4×H100 的集群勉强够用。但成本是天文数字——4×H100 每天的 GPU 费用约为 2880 美元。

量化是解决这个问题的核心手段:通过降低权重和激活的数值精度(从 FP16/FP32 降到 INT8/INT4/FP8),大幅减少显存占用和计算量。

4.2 FP8 KV Cache:vLLM 0.5 的显存革命

vLLM 0.5 新增的 FP8 KV Cache 量化功能是本次更新的亮点之一。传统方法只对模型权重做量化,但 KV Cache 同样消耗大量显存——在长序列场景下,KV Cache 显存占用甚至超过模型权重:

# vLLM 0.5 启用 FP8 KV Cache 量化
vllm serve meta-llama/Llama-3-70b-instruct \
    --quantization fp8 \
    --kv-cache-dtype fp8 \
    --gpu-memory-utilization 0.95

FP8 量化效果对比:

配置KV Cache 显存可支持并发数精度损失
FP16 KV Cache100%320%
FP8 KV Cache50%64<1% (困惑度)
INT8 KV Cache37.5%85~2%

4.3 AWQ 量化部署全流程

AWQ(Activation-aware Weight Quantization)是一种对权重重要程度进行感知的高精度量化方法,在 2026 年已成为生产环境的主流选择:

from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

# 加载模型
model = AutoAWQForCausalLM.from_pretrained(
    "meta-llama/Llama-3-8B-Instruct",
    device_map="cuda:0"
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B-Instruct")

# 校准数据集
calibration_data = [
    "大语言模型是人工智能发展的重要方向",
    "PagedAttention 通过分页管理显著提升推理效率",
]

# 执行 AWQ 量化
quant_config = {
    "zero_point": True,
    "q_group_size": 128,
    "w_bit": 4,
}
model.quantize(tokenizer, quant_config=quant_config)

# 保存量化模型
model.save_quantized("./llama3-8b-awq")

AWQ 4-bit 量化效果:以 Llama 3 8B 为例,FP16 模型需要约 16GB 显存,AWQ INT4 量化后仅需约 5GB,单卡 A100 即可同时运行两个 8B 量化模型


五、2026 年四大推理框架横评:选型实战指南

5.1 测试环境

基于工业级部署主流配置(NVIDIA H100 80GB × 4,CUDA 12.6,PyTorch 2.2.2),统一测试标准,排除环境差异对结果的干扰。

5.2 高并发在线推理性能对比(Llama 3 70B,FP8 量化)

框架并发=32 吞吐并发=32 TTFT并发=64 吞吐显存利用率
vLLM 0.52409 tokens/s14.8 ms5120 tokens/s89.6%
TGI 2.02250 tokens/s16.3 ms3680 tokens/s78.2%
TensorRT-LLM 1.83608 tokens/s10.2 ms6800 tokens/s94.3%
DeepSpeed-MII 0.91980 tokens/s18.7 ms3200 tokens/s72.8%

数据解读

  • TensorRT-LLM 凭借 CUDA 算子融合和 FlashAttention 3.0 优化,在 H100 上表现最优,但部署复杂度最高
  • vLLM 0.5 在开源框架中性能最佳,且部署简单、运维成本低,是追求性价比的首选
  • TGI 2.0 动态批处理在高并发(64+)场景下优势明显,但底层 CUDA 优化不足
  • DeepSpeed-MII 0.9 自动优化策略对新手友好,但在极致性能场景下竞争力不足

5.3 批量推理场景性能对比(Qwen 2 100B,INT4 量化)

框架并发=16 吞吐算力利用率单批次耗时
vLLM 0.53260 tokens/s89.6%8.6s
TGI 2.02450 tokens/s78.2%8.6s
TensorRT-LLM 1.84500 tokens/s94.3%5.8s
DeepSpeed-MII 0.92202 tokens/s72.8%9.2s

5.4 生产选型决策树

场景是追求极致性能 + 有专业运维团队?
  → YES: TensorRT-LLM 1.8
  → NO: 场景需要快速迭代 + 追求性价比?
       → YES: vLLM 0.5
       → NO: 主要处理 HuggingFace 模型 + 快速部署?
            → YES: TGI 2.0
            → NO: 预算有限 + 需要多副本弹性扩展?
                 → YES: DeepSpeed-MII 0.9

六、生产部署实战:vLLM 0.5 + Kubernetes 完整方案

6.1 推理服务 Docker 化部署

# Dockerfile.vllm
FROM nvidia/cuda:12.6.0-runtime-ubuntu22.04

WORKDIR /app
RUN apt-get update && apt-get install -y python3.10 python3-pip
RUN pip3 install vllm==0.5.0 transformers accelerate

# 复制模型缓存
COPY ./models /root/.cache/huggingface

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
# entrypoint.sh
export VLLM_WORKER_MULTIPROC_METHOD=spawn
export CUDA_VISIBLE_DEVICES=0,1,2,3

vllm serve /root/.cache/huggingface/llama3-70b-instruct \
    --host 0.0.0.0 \
    --port 8000 \
    --tensor-parallel-size 4 \
    --gpu-memory-utilization 0.92 \
    --max-num-seqs 256 \
    --quantization fp8 \
    --kv-cache-dtype fp8 \
    --enable-chunked-prefill \
    --max-num-batched-tokens 8192

6.2 Kubernetes 部署配置

# vllm-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vllm-inference
spec:
  replicas: 2
  selector:
    matchLabels:
      app: vllm-inference
  template:
    metadata:
      labels:
        app: vllm-inference
    spec:
      nodeSelector:
        gpu-type: nvidia-h100
      tolerations:
        - key: "nvidia.com/gpu"
          operator: "Exists"
          effect: "NoSchedule"
      containers:
        - name: vllm
          image: myregistry/vllm:0.5.0-h100
          resources:
            limits:
              nvidia.com/gpu: "4"
              memory: "320Gi"
              cpu: "32"
          ports:
            - containerPort: 8000
          args:
            - "vllm"
            - "serve"
            - "/models/llama3-70b-instruct"
            - "--host=0.0.0.0"
            - "--port=8000"
            - "--tensor-parallel-size=4"
            - "--gpu-memory-utilization=0.92"
            - "--max-num-seqs=256"
            - "--quantization=fp8"
          livenessProbe:
            httpGet:
              path: /health
              port: 8000
            initialDelaySeconds: 60
            periodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: vllm-inference-svc
spec:
  selector:
    app: vllm-inference
  ports:
    - port: 8000
      targetPort: 8000
  type: ClusterIP

6.3 OpenAI 兼容 API 调用

vLLM 提供与 OpenAI API 完全兼容的接口:

from openai import OpenAI

client = OpenAI(
    api_key="EMPTY",
    base_url="http://vllm-api.example.com/v1"
)

# 聊天补全
response = client.chat.completions.create(
    model="llama3-70b-instruct",
    messages=[
        {"role": "system", "content": "你是一个专业的云原生工程师。"},
        {"role": "user", "content": "解释 PagedAttention 的核心原理"}
    ],
    temperature=0.7,
    max_tokens=2048
)
print(response.choices[0].message.content)

# 流式输出
stream = client.chat.completions.create(
    model="llama3-70b-instruct",
    messages=[{"role": "user", "content": "用一句话解释连续批处理"}],
    stream=True,
    max_tokens=512
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

七、性能调优:7 个让吞吐量翻倍的实战参数

vLLM 默认参数追求「能跑就行」,以下参数是生产调优的关键:

vllm serve meta-llama/Llama-3-8B-Instruct \
    # 1. 显存利用率:默认 0.9,建议根据实际显存调整
    --gpu-memory-utilization 0.92 \
    # 2. 最大批处理 token 数
    --max-num-batched-tokens 8192 \
    # 3. 最大序列数:同时处理的最大请求数
    --max-num-seqs 256 \
    # 4. Chunked prefill:分块预填充,避免长序列阻塞短序列
    --enable-chunked-prefill \
    # 5. 预填充分块大小
    --prefill-chunk-size 1024 \
    # 6. 分布式张量并行
    --tensor-parallel-size 2 \
    # 7. 前缀缓存:相同前缀的请求复用 KV Cache
    --enable-prefix-caching

调优收益实测(A100 80G,Qwen-14B INT4 模型):

参数组合吞吐量提升幅度
默认参数420 tokens/s
启用 chunked-prefill680 tokens/s+62%
+ 启用 prefix-caching820 tokens/s+95%
+ 调整 max-num-batched-tokens=8192960 tokens/s+129%
完整调优组合1150 tokens/s+174%

八、华为 XY-Serve:Ascend NPU 原生推理系统的启示

2026年7月,华为联合清华大学开源了面向昇腾(Ascend)NPU 的生产级推理系统 XY-Serve,在昇腾 910 系列 NPU 上实现了端到端吞吐量最高提升 95% 的突破。

XY-Serve 的核心设计思想与 vLLM 的 PagedAttention 不谋而合:将动态计算分解为硬件友好的元原语(Meta-Primitive),在保持与 vLLM 生态兼容的同时,实现了硬件层面的极致优化。

Linear 内核平均提速 14.6%,Attention 内核平均提速 21.5%。这给我们的启示是:vLLM 的生态优势正在向多硬件平台扩展,未来推理系统的竞争将不仅是软件层的竞争,更是硬件感知(Hardware-Aware)软件协同优化的竞争。理解 vLLM 的 PagedAttention 思想,将帮助工程师更好地适应这一趋势。


九、总结与展望

2026年,LLM 推理基础设施已经进入了一个全新的阶段——从「能用」到「好用」,从「手动调优」到「自动优化」,从「单点突破」到「系统协同」。

vLLM 0.5 的核心价值在于:它用操作系统几十年沉淀的工程智慧(PagedAttention ≈ 虚拟内存分页),解决了 LLM 推理最核心的资源管理问题,让 GPU 显存利用率从 60% 的行业平均提升到 95% 以上。

2026 年推理框架选型的三维平衡

  • 性能极致性:TensorRT-LLM > vLLM > TGI > DeepSpeed-MII
  • 部署便捷性:TGI > vLLM > DeepSpeed-MII > TensorRT-LLM
  • 生态兼容性:vLLM > TGI > DeepSpeed-MII > TensorRT-LLM

对于大多数团队的建议:先用 vLLM 0.5 快速验证业务价值,当性能成为瓶颈时再切换到 TensorRT-LLM,两者使用相同的模型格式,迁移成本可控。

推理优化的本质是「让每一次 GPU 计算都不被浪费」。PagedAttention 教会我们的是:好的系统设计,往往不是发明新思想,而是将其他领域成熟的工程实践迁移到新问题域。操作系统分页思想 50 年前的创新,如今正在重塑价值万亿美元的大模型推理产业——这本身就是工程学的魅力所在。

推荐文章

Nginx rewrite 的用法
2024-11-18 22:59:02 +0800 CST
给Go程序加个沙箱:go-landlock
2026-07-03 06:32:08 +0800 CST
程序员茄子在线接单