VLLM 0.7.3源码深度解析:PagedAttention与工业级LLM推理优化
简介本资源为VLLM-0.7.3大模型推理框架完整开源源码包面向AI工程师、大模型系统优化研究者及高性能推理部署实践者聚焦解决超大规模语言模型在生产环境中推理速度慢、显存占用高、吞吐瓶颈突出等核心问题。压缩包共1896个文件以1186个Python核心模块含attention、quant、torch_bindings等关键实现、178个JSON/YAML配置与模型定义文件、132个Markdown文档含API说明、部署指南与贡献规范为主干辅以CUDA.cu/.cuh、C.cpp/.hpp、Dockerfile.arm等跨平台构建脚本整体46.33MB结构清晰、模块解耦度高便于深度定制与硬件适配。目前已有343人学习下载读者可直接获取工业级LLM推理引擎的全量实现涵盖PagedAttention内存管理、连续批处理调度、多后端CUDA/ROCm/HPU/TPU/XPU支持及容器化部署能力是深入理解大模型底层推理优化机制与开展二次开发的高质量基准代码库。1. 这不是另一个“跑通就行”的LLM推理玩具VLLM-0.7.3源码包里藏着工业级吞吐的底层开关你试过用HuggingFace Transformers原生加载一个7B模型做批量推理吗当batch_size8、max_seq_len2048时GPU显存占用飙到92%而实际token生成速度卡在14 tokens/sec——这根本撑不起一个日均万次请求的API服务。但把同样模型切进VLLM-0.7.3同一张A100batch_size直接拉到32显存压到76%吞吐翻到89 tokens/sec。这不是参数调优的玄学而是它把PagedAttention这个核心机制从论文变成了可调试、可打断、可单步跟踪的C/CUDA源码。这份0.7.3源码包不是教学Demo是某公司线上大模型网关的推理底座实录包含完整的CUDA kernel实现、Python-C绑定胶水层、动态批处理状态机、以及被注释掉的vLLM早期KV Cache分片实验代码。如果你要改调度策略、加自定义stop token逻辑、或者把推理链路嵌进自己的微服务框架里这份源码就是你的扳手和示波器——而不是只给你一个pip install vllm后黑匣子般运行的wheel包。2. 架构解剖从Python入口到CUDA kernel的完整调用链VLLM的架构不是“Python调用C”这么简单而是一套分层明确、边界清晰的控制流与数据流分离设计。它的核心价值不在于“快”而在于“可控的快”每一层都暴露了足够细粒度的hook点让你能在不碰CUDA的前提下调整调度在不改Python胶水层的前提下替换attention kernel。下面我们就沿着一次generate()调用拆开这个工业级推理引擎的骨架。2.1 Python层Engine与LLM类的职责切割VLLM的Python入口不是Model.generate()而是LLM.generate()或更底层的AsyncLLMEngine.generate(). 这个设计刻意把模型加载、推理执行、结果组装三件事剥离开# vllm/entrypoints/llm.py class LLM: def __init__(self, model: str, tokenizer: Optional[str] None, # ... 其他参数 ): # 注意这里不加载模型权重只初始化配置 self.llm_engine AsyncLLMEngine.from_engine_args( engine_args, # 包含device_config, model_config等 usage_trackerNone ) def generate(self, prompts: Union[str, List[str]], sampling_params: SamplingParams, **kwargs) - List[RequestOutput]: # 关键所有generate调用最终转成add_request await get_output request_id str(uuid.uuid4()) self.llm_engine.add_request( request_id, prompts, sampling_params, ) # 同步等待结果实际是asyncio.run内部封装 return asyncio.run(self._get_all_outputs(request_id))提示LLM类本质是个同步包装器真正干活的是AsyncLLMEngine。如果你要做异步流式响应比如WebSSE必须绕过LLM.generate()直接操作AsyncLLMEngine的add_request和step()方法。AsyncLLMEngine才是调度中枢。它内部维护着三个关键状态容器self._request_tracker: 管理所有待处理、运行中、已完成的请求生命周期self._scheduler: 负责从待处理队列中按优先级如arrival time、prompt length挑选请求组成batchself._model_executor: 实际执行推理的执行器可以是GPUExecutor单卡、RayGPUExecutor多卡或CPUExecutor仅调试。2.2 C/CUDA胶水层PyBind11如何把Python对象喂给GPUVLLM没有用torch.compile或Triton而是用PyBind11手写C绑定把Python端的SamplingParams、SequenceGroupMetadata等结构体序列化为C struct再传入CUDA kernel。这个过程发生在vllm/model_executor/models/llama.py的forward()之后# vllm/model_executor/models/llama.py def forward( self, input_ids: torch.Tensor, positions: torch.Tensor, kv_caches: List[torch.Tensor], attn_metadata: AttentionMetadata, ) - torch.Tensor: # ... 前向计算得到hidden_states hidden_states self.model(input_ids, positions, kv_caches, attn_metadata) # 关键跳转这里不直接调用logits_processor而是交给C层统一处理 # vllm/model_executor/layers/logits_processor.py logits self.logits_processor( hidden_states, # [batch_size, seq_len, hidden_size] self.lm_head.weight, # [vocab_size, hidden_size] attn_metadata, # 包含当前batch的seq_lens, slot_mapping等 ) return logitslogits_processor是一个PyBind11绑定的C函数定义在csrc/attention/flash_attn.cpp中。它接收的attn_metadata对象是Python层通过AttentionMetadata.from_seq_groups()构造的里面最关键的字段是字段名类型说明slot_mappingtorch.Tensor[int64]shape[total_num_tokens]每个token对应KV Cache中的物理slot索引实现PagedAttention的核心映射block_tablestorch.Tensor[int32]shape[num_seqs, max_blocks_per_seq]记录每个sequence占用的block id列表context_lenstorch.Tensor[int32]shape[num_seqs]每个sequence当前已生成的token数这些tensor全在GPU上且生命周期由C层管理避免了Python-GPU频繁拷贝。这也是为什么你不能在logits_processor里随便print()或breakpoint()——它根本不在Python解释器栈里运行。2.3 CUDA Kernel层PagedAttention的三个核心kernelVLLM的吞吐优势70%来自这三个手写的CUDA kernel全部位于csrc/attention/目录下paged_attention_v1.cu: 处理prefill阶段即处理prompt的attention计算支持任意长度prompt利用block_tables查表获取KVpaged_attention_v2.cu: 处理decode阶段即逐个生成token的attention针对slot_mapping做了极致优化每个thread block只负责一个sequence的单个tokencopy_blocks.cu: 在sequence被抢占preemption或迁移swap时高效地在不同GPU memory区域间拷贝KV blocks。以paged_attention_v2.cu中最关键的paged_attention_v2_kernel为例其启动参数暴露了VLLM对硬件的深度理解// csrc/attention/paged_attention_v2.cu void paged_attention_v2_kernel( float* __restrict__ output, // [num_seqs, num_heads, head_size] const float* __restrict__ query, // [num_seqs, num_heads, head_size] const float* __restrict__ key_cache, // [num_blocks, num_kv_heads, head_size/x, block_size] const float* __restrict__ value_cache,// same as key_cache const int* __restrict__ num_contexts, // [num_seqs], 每个seq当前context长度 const int* __restrict__ block_tables, // [num_seqs, max_blocks_per_seq] const int* __restrict__ context_lens, // [num_seqs] const int* __restrict__ slot_mapping, // [total_num_tokens] // ... 其他参数 ) { // 核心逻辑每个thread block处理一个sequence const int seq_id blockIdx.x; const int head_id blockIdx.y; // 使用shared memory缓存当前seq的query避免重复load extern __shared__ float shared_mem[]; // 根据slot_mapping查key_cache和value_cache的物理地址 const int slot_id slot_mapping[seq_id]; const int block_id block_tables[seq_id * max_blocks_per_seq slot_id / block_size]; const int offset_in_block slot_id % block_size; // ... 计算attention score并写回output }这个kernel的gridDim设置为(num_seqs, num_heads)意味着它天然适配VLLM的dynamic batch设计——batch size变化时只需调整gridDim无需重编译kernel。这也是为什么VLLM能比FlashAttention-2在小batch场景下更快它把batch维度直接 baked into kernel launch config里了。3. 编译与运行从源码到可调试的本地环境拿到vllm-0.7.3.tar.gz后别急着pip install -e .。这个版本的编译链对CUDA Toolkit、PyTorch版本、GCC有强约束跳过验证步骤90%的失败都发生在这一步。我一般会强制走三遍检查。3.1 环境预检四个必须确认的硬性条件VLLM-0.7.3不是“兼容主流环境”而是“只认特定组合”。以下四点必须全部满足缺一不可CUDA Toolkit ≥ 12.1低于12.1的nvcc无法编译csrc/quantization/awq/gemm_cuda.cu里的__half2intrinsic函数。检查命令nvcc --versionPyTorch ≥ 2.2.0cu121必须是CUDA 12.1 build的PyTorchtorch.__version__应为2.2.0cu121。用pip install torch2.2.0cu121 --index-url https://download.pytorch.org/whl/cu121安装GCC ≥ 11.2Ubuntu 22.04默认GCC是11.2但CentOS 7是4.8必须升级。检查gcc --versionNVIDIA Driver ≥ 525.60.13这是CUDA 12.1的最低驱动要求。检查nvidia-smi顶部显示的版本号注意不要用conda安装PyTorch再pip install vllm。conda的PyTorch可能链接了旧版CUDA runtime导致ImportError: libcudart.so.12: cannot open shared object file。务必用pip安装官方whl。3.2 源码编译分步执行每步验证输出进入解压后的源码根目录执行以下命令注意顺序# 步骤1先编译C扩展不装Python包 python setup.py build_ext --inplace # 验证检查是否生成了vllm/_C.cpython-*.so文件 ls -lh vllm/_C.cpython-*.so # 应该看到类似-rwxr-xr-x 1 user user 12M May 10 10:23 vllm/_C.cpython-310-x86_64-linux-gnu.so # 步骤2安装Python包此时会复用已编译的_C.so pip install -e . # 步骤3运行最小验证脚本 python -c from vllm import LLM llm LLM(modelfacebook/opt-125m, tensor_parallel_size1) outputs llm.generate(Hello, my name is) print(outputs[0].outputs[0].text[:50]) 如果步骤3报错OSError: libcuda.so.1: cannot open shared object file说明LD_LIBRARY_PATH没设对# 临时修复推荐加到~/.bashrc export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH3.3 启动服务不只是--host 0.0.0.0VLLM自带OpenAI兼容API但默认配置不适合生产# 错误示范直接暴露所有端口 python -m vllm.entrypoints.openai.api_server \ --model facebook/opt-125m \ --host 0.0.0.0 \ --port 8000 # 正确做法加关键参数 python -m vllm.entrypoints.openai.api_server \ --model facebook/opt-125m \ --host 127.0.0.1 \ # 不对外暴露用nginx反代 --port 8000 \ --tensor-parallel-size 1 \ --pipeline-parallel-size 1 \ --max-num-seqs 256 \ # 控制并发请求数防OOM --max-model-len 4096 \ # 限制最大上下文防长文本拖垮 --enforce-eager \ # 开发期必加禁用CUDA Graph方便debug --disable-log-requests \ # 生产关掉开发期开着看输入--enforce-eager是血泪经验它禁用CUDA Graph让每次前向都走完整Python-C调用栈你才能在gdb里b vllm::paged_attention_v2_kernel打断点。不加这个kernel会被Graph捕获gdb完全看不到。4. 避坑指南五个让我重启三次GPU的典型问题VLLM源码编译和运行的坑90%集中在环境链和内存管理上。以下是我在某高校实验室部署时踩出的五个真实问题每个都附带nvidia-smi和dmesg的诊断线索4.1 现象RuntimeError: CUDA error: no kernel image is available for execution on the device原因CUDA Toolkit 12.1编译的kernel运行在Compute Capability 7.0V100或8.0A100GPU上没问题但如果你的GPU是8.6RTX 3090或9.0H100nvcc默认生成的PTX不兼容。VLLM-0.7.3的setup.py没指定--gpu-arch导致kernel只编译了sm_70/sm_80没生成sm_86的code。解决修改setup.py在extra_cuda_cflags里加--gpu-archsm_86然后重新python setup.py build_ext --inplace。检查生成的so文件cuobjdump -sass vllm/_C.cpython-*.so | grep sm_86应有输出。4.2 现象OSError: libtorch_cuda.so: cannot open shared object file原因PyTorch的CUDA库路径没被runtime linker找到。ldd vllm/_C.cpython-*.so | grep torch会显示libtorch_cuda.so not found。解决找到PyTorch CUDA库位置python -c import torch; print(torch.__file__); ls $(dirname $(dirname $(dirname $(python -c import torch; print(torch.__file__)))))/lib/ | grep torch_cuda然后export LD_LIBRARY_PATH/path/to/torch/lib:$LD_LIBRARY_PATH。4.3 现象ValueError: Expected all tensors to be on the same device原因SamplingParams.stop传入了list of str但其中某个str被tokenizer意外转成了CPU tensor比如用了transformers.AutoTokenizer的encode而非vllm.tokenizer.Tokenizer。解决统一用VLLM内置tokenizerfrom vllm import LLM; llm LLM(model...); tokenizer llm.get_tokenizer()然后tokenizer.encode(text)确保返回GPU tensor。4.4 现象RuntimeError: expected scalar type Half but found Float原因模型权重是float16但SamplingParams.temperature1.0是Python float即float64传入CUDA kernel时类型不匹配。VLLM-0.7.3的SamplingParams对数值类型校验不严。解决显式转成float32SamplingParams(temperature1.0, top_p0.9) → SamplingParams(temperaturenp.float32(1.0), top_pnp.float32(0.9))。4.5 现象Segmentation fault (core dumped)在step()调用时原因AsyncLLMEngine.step()被多线程并发调用。VLLM的engine不是线程安全的step()内部有共享状态如_request_tracker。解决确保step()只在单个asyncio event loop里调用。如果要用多进程每个进程起独立AsyncLLMEngine如果要用多线程用asyncio.to_thread()包装或加threading.Lock()。5. 二次开发实战给VLLM加一个“超时强制停止”功能VLLM默认的max_tokens是硬性截断但业务场景常需要“如果3秒内没生成完就停掉并返回partial result”。这功能不在0.7.3主线里但源码结构让它极易注入——我们只需要在调度循环里加一个时间戳检查不碰CUDA不改模型。5.1 定位修改点Scheduler.step()是唯一入口所有请求的调度、batch构建、执行触发都收口在vllm/core/scheduler.py的Scheduler.step()方法。它返回一个SchedulerOutput里面包含本次要执行的SeqGroupMetadataList。我们要在这里给每个SequenceGroup打上“创建时间戳”并在每次step()开始时检查是否超时。# vllm/core/scheduler.py from dataclasses import dataclass from typing import List, Optional, Tuple, Dict, Any import time dataclass class SequenceGroup: # ... 原有字段 arrival_time: float 0.0 # 新增请求到达时间戳 timeout_seconds: Optional[float] None # 新增超时阈值None表示不超时 class Scheduler: def step(self) - SchedulerOutput: # ... 原有逻辑更新running队列、check preemption等 # 【新增】检查running队列中每个sequence group是否超时 now time.time() timed_out_groups [] for seq_group in self.running: if (seq_group.timeout_seconds is not None and now - seq_group.arrival_time seq_group.timeout_seconds): timed_out_groups.append(seq_group.request_id) # 【新增】对超时group执行force stop for req_id in timed_out_groups: self._stop_sequence_group(req_id, reasontimeout) # ... 后续原有逻辑 return SchedulerOutput(...)_stop_sequence_group()是现成的方法它会把sequence标记为FINISHED_STOPPED并清空KV cache所以不用重写内存管理逻辑。5.2 暴露API让Python层能传入timeout参数SequenceGroup的构造发生在vllm/engine/llm_engine.py的_add_seq_group()里它从LLMEngine.add_request()传入的SamplingParams中提取参数。我们扩展SamplingParams类# vllm/sampling_params.py dataclass class SamplingParams: # ... 原有字段 timeout_seconds: Optional[float] None # 新增 # vllm/engine/llm_engine.py def _add_seq_group(self, seq_group: SequenceGroup) - None: # ... 原有逻辑 # 【新增】把SamplingParams.timeout_seconds透传给SequenceGroup seq_group.timeout_seconds seq_group.sampling_params.timeout_seconds seq_group.arrival_time time.time()5.3 验证效果写一个超时测试用例在tests/basic_tests/test_timeout.py里加一个casedef test_timeout_stops_generation(): llm LLM(modelfacebook/opt-125m, enforce_eagerTrue) # 设置超时1秒但故意用极慢的采样参数拖长时间 sampling_params SamplingParams( temperature0.0, # greedy但配合max_tokens1000会很慢 max_tokens1000, timeout_seconds1.0 ) outputs llm.generate(The capital of France is, sampling_params) # 断言应该在1秒内返回且output长度远小于1000 assert len(outputs[0].outputs[0].text) 50 assert outputs[0].outputs[0].finish_reason timeout运行pytest tests/basic_tests/test_timeout.py -v。如果通过说明超时逻辑已生效。5.4 生产加固避免time.time()精度抖动上面的time.time()在高并发下可能有微秒级抖动影响超时判断。更健壮的做法是用time.monotonic()# vllm/core/scheduler.py class Scheduler: def __init__(self, ...): # ... 原有初始化 self._start_time time.monotonic() # 全局单调时钟 def step(self) - SchedulerOutput: now time.monotonic() - self._start_time # 相对时间无抖动 # ... 后续检查逻辑用now代替绝对时间戳从那以后我每次给VLLM加新功能都强制走一遍“Python API → C glue → CUDA kernel”的调用链验证先写Python测试再gdb -p $(pidof python)attach进去b vllm::paged_attention_v2_kernel看是否命中最后用nvprof --unified-memory-profiling off --profile-from-start off抓kernel耗时。这套流程让我在两周内给三个客户项目定制了不同的stop logic没出过一次OOM。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

STM32单片机 主、从、触发模式

STM32单片机 主、从、触发模式

主模式,将定时器内部信号映射到TRGO引脚,用于触发别的外设在手册 控制寄存器2 一节可以知道各种主模式的解释从模式,接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,被别的信号控制触发源选择&#xff…

2026/10/19 2:28:42 阅读更多 →
Flutter鸿蒙化适配:azure_app_config远程配置库完整落地实践

Flutter鸿蒙化适配:azure_app_config远程配置库完整落地实践

前阵子处理一个 Flutter 应用的鸿蒙适配,卡在一个意想不到的地方:项目里用了 azure_app_config 这类第三方库拉取云端配置,结果鸿蒙侧完全没有现成实现。当时第一反应是“要不换个方案”,但仔细一想,应用里十几个关键开…

2026/10/19 2:28:42 阅读更多 →
用TimeGAN合成金融数据,打破量化回测的“单一历史”困境

用TimeGAN合成金融数据,打破量化回测的“单一历史”困境

做量化研究的朋友大概率都遇到过这种尴尬:策略在历史行情上回测绩效相当漂亮,但换一个样本区间或者稍微改点参数,表现就垮了。一开始我也以为是策略不够稳,于是反复调参、反复回测,结果越改越心虚——因为我们手里只有…

2026/10/19 2:27:42 阅读更多 →

最新新闻

Autoware.Universe高精地图路径硬约束解析:为何必须用~/autoware-map

Autoware.Universe高精地图路径硬约束解析:为何必须用~/autoware-map

简介:本资源是面向自动驾驶开发者与ROS2初学者的Autoware.Universe环境验证实践包,聚焦高精地图部署这一关键前置环节,解决安装后‘能否跑通样例’的核心验证问题。压缩包为15.15MB的zip文件,共含4个核心文件:2个yaml配…

2026/10/19 4:03:30 阅读更多 →
开放式代码评审:从GitLab自动化到团队协作文化

开放式代码评审:从GitLab自动化到团队协作文化

"open-code-review"这个标题,一看就不是那种开箱即用的"xx管理平台",而是一套关于代码评审的工程实践思路。我在团队里折腾了大半年,从最初的"谁爱审谁审"到后来形成一套可量化的开放评审机制,中间…

2026/10/19 4:03:30 阅读更多 →
Claude Skills完全指南:从SKILL.md结构到文档、代码、创意技能实战

Claude Skills完全指南:从SKILL.md结构到文档、代码、创意技能实战

写程序写得年头久了,都会积攒下一套自己的“工作定式”:代码怎么排版、注释写到什么程度、周报按什么结构写、需求文档分几个章节。这些经验以前只能靠复制粘贴旧文档来延续,直到我完整梳理了一遍Claude官方Skills仓库之后,才意识…

2026/10/19 4:03:30 阅读更多 →
代码审查自动化实践:从形式主义到真香流程的落地指南

代码审查自动化实践:从形式主义到真香流程的落地指南

1. 为什么我把代码审查从"形式主义"做成了"真香流程"先说一个我观察到的现象:大多数团队聊起代码审查,嘴上都说重要,实际上过得去就行。PR挂了两天没人理,reviewer随便点个"看起来没问题"就合入&am…

2026/10/19 4:03:30 阅读更多 →
在数据处理与分析领域,SQL(Structured Query Language)和 Python 是两种最核心的工具

在数据处理与分析领域,SQL(Structured Query Language)和 Python 是两种最核心的工具

在数据处理与分析领域,SQL(Structured Query Language)和 Python 是两种最核心的工具。SQL 是用于管理和操作关系型数据库的领域专用语言,而 Python 是一种通用编程语言,凭借丰富的生态库(如 Pandas、NumPy…

2026/10/19 4:03:30 阅读更多 →
用元技能优化所有Skill:autoresearch的Prompt工程实践

用元技能优化所有Skill:autoresearch的Prompt工程实践

写一个 Skill 来优化所有 Skill —— autoresearch 的 Prompt 工程实践我最近一直在折腾 AI Agent 的自定义 Skill,前后写了十几个,用来处理不同场景的文本、做资料梳理、调格式。写多了以后发现一个问题:每次新写一个 Skill,都被…

2026/10/19 4:02:29 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →