Ray分布式计算框架入门:认识Task、Actor与ObjectRef核心概念
“ray教程-01-认识Ray”这个标题虽然只有八个字但背后其实是一个完整的、面向入门者的分布式计算框架科普系列。作为一个踩过不少分布式计算坑的开发者我拿到这个标题的第一反应是这篇教程要解决的不是“Ray怎么装”而是“我为什么要用Ray、它到底解决了我哪块心病”。所以在第一篇“认识Ray”里我打算从实际痛点出发把Ray的定位、核心概念、第一个程序跑通的全过程以及我实际使用中遇到的那些坑一次性讲清楚。Ray这个名字在分布式计算圈子里不算新面孔了。它最初是某高校实验室为了满足强化学习和超参数搜索这种大规模并行训练需求而提出的开源框架后来迅速发展成一个通用的分布式计算底座。简单说Ray把原本需要你手动管理进程、消息传递、失败重试的分布式编程封装成了几乎和写单机Python一样简单的体验。它的核心价值可以概括成一句话让单机代码能够无缝扩展到集群而且不需要重写业务逻辑。这篇“认识Ray”的教程适合三类人阅读第一类是正在做机器学习训练、发现单机资源不够用的研究者第二类是写后端服务、需要处理高并发任务的开发者第三类是单纯对分布式计算感兴趣、想找个好上手的框架学习的入门者。你不需要先精通操作系统或者网络编程只要会Python基础语法就能跟着这篇文章跑起来第一个Ray程序。1. Ray到底解决了什么问题1.1 单机并行的效率困局先聊一个很多初学者都困惑的问题我写Python用多了几个线程不是也能并行吗为什么要引入Ray这种重量级框架Python的线程有一个著名的坑——全局解释器锁。这个锁保证同一时刻只有一个线程在执行Python字节码所以即便是多线程代码在计算密集型的场景下也几乎得不到加速。你要是想真正利用多核CPU通常得用多进程加上队列来传递结果这套组合拳写起来繁琐不说一旦任务失败你还得自己处理重试和状态恢复代码很快就变得像一团乱麻。我举个例子假设你要计算一组图片的均值色彩特征。单机版代码很简单循环遍历每张图就行。但如果用Python线程去“加速”你会发现CPU占用率可能有4个核但只有1个核在忙总耗时几乎没有变化。而Ray的并行方式完全不同它把任务调度到不同的进程甚至不同的机器上绕过了全局解释器锁的限制真正实现了计算资源的横向扩展。另外还有一个隐形问题就是单机内存的限制。当你的数据量达到几十GB即使CPU算力够内存也扛不住。Ray的对象存储机制支持分布式内存共享可以把大对象切分成小块、分散存储在多台机器的内存里这个设计解决了我前面说的“一张大表塞不进单机内存”的窘境。1.2 分布式编程的复杂度黑幕计算资源不够只是表象背后真正的痛点是分布式编程的复杂度。传统方案里你要处理节点通信、数据序列化、任务调度、故障恢复、动态伸缩等一系列问题。哪怕你已经选定了某种分布式框架比如把Spark看成“批处理神器”把Celery看成“异步任务队列”它们都有各自的适用范围没有一个能让“普通Python开发者也能轻松上手分布式”的通用底座。Ray的差异化定位恰恰在于它面向的是“从单机到分布式”的平滑演进。你写的代码看起来就是普通的Python函数和类只需要加上一个装饰器或者改一下函数调用方式就能变成分布式执行的任务。这种极低的心智负担是Ray早期能够快速圈粉的核心原因。1.3 和同类框架的简单对比为了帮你建立更直观的坐标我做了个不严格的对比表格从几个典型维度看看Ray和Spark、Celery的差异对比维度RaySparkCelery主要定位通用的分布式计算底座大规模批处理和数据分析分布式异步任务队列编程体验几乎等同于写普通Python函数需要理解RDD或DataFrame等抽象任务函数加装饰器简单直接实时性毫秒级任务延迟通常秒级以上调度延迟秒级延迟偏向后台任务是否适合机器学习非常合适原生支持训练、调参、服务偏数据分析ML库支持有限仅适合做异步调用动态任务依赖支持复杂的任务依赖图偏静态DAG调整不灵活各任务相对独立从表格里可以看到Ray更像是一个“基础能力层”它不像Spark那样限定你必须在某个计算模型内做事也不像Celery那样只专注于异步任务分发。你需要什么能力就可以自由组合这是它区别于其他框架的关键竞争力。2. 核心概念拆解Task、Actor、ObjectRef2.1 Task把函数变成分布式任务Ray里最基本的执行单元是Task也就是一个被远程调用的函数。你只要在普通函数上加上ray.remote装饰器这个函数就变成了一个可以分布式执行的Task。调用时不再用func()而是用func.remote()它会立刻返回一个ObjectRef——这个引用可以理解为任务的“取货凭证”真正的计算结果还没拿到手但你随时可以通过ray.get()去领取。我习惯用一个比喻来解释Task想象你去餐厅点餐你把菜单递给服务员服务员给你一张小票这个动作就是func.remote()。小票就是ObjectRef。你不需要站在厨房门口盯着厨师炒菜你可以在等待的时候去干别的事。当菜做好了你凭小票去取餐这就是ray.get()。这个异步的模式极大提升了并行效率因为任务之间不再互相阻塞等待。Task还有一个特性是“自动并行”。当你在一个Task内部又调用了其他.remote()函数时Ray会自动构建一张任务依赖图并按照依赖关系调度执行。也就是说你不需要手动管理哪里等待、哪里并发Ray会自动判断哪些任务可以同时跑。2.2 Actor有状态的分布式服务如果Task是无状态的函数Actor就是有状态的服务。一个Actor就是被ray.remote装饰的Python类。当你实例化这个类并调用它的方法时这些方法调用会串行地执行在同一个进程内从而保证共享状态的一致性。我实际用Actor最多的场景是构建一个分布式的参数服务器。比如在并行训练多个模型副本时每个副本需要从参数服务器拉取最新参数训练完再把梯度推回去。参数服务器的核心是一个长期存活、持有最新参数的进程这不就是Actor的天然场景吗如果你用Task来实现就得手动处理参数存哪里、怎么同步的问题一旦某个任务崩溃参数状态可能就丢了。而Actor天然具备生命周期管理你用ray.kill()可以干净地关闭它平常它就一直运行在那里提供服务。Actor模式还有个很有用的点是可以控制并发度。当实例化Actor时你可以指定num_cpus和num_gpus参数让某些重资源的服务独占特定的硬件资源这在混合负载的场景下特别有用。2.3 ObjectRef分布式对象存储的“通行证”前面提到的ObjectRef其实是Ray分布式对象存储的一个引用。这个设计非常巧妙它允许你不直接把大对象复制到每个任务里而是传递一个轻量级的引用。需要用到数据的任务通过ray.get(object_ref)去实际拉取数据Ray内部会根据数据所在位置自动选择最优的传输路径。这个机制有几个实际好处。第一避免了重复拷贝大量数据节省了网络开销。第二方便跨节点共享大对象比如把整个训练数据集塞进对象存储各个训练任务按需读取。第三配合内存管理当对象不再被引用时Ray会自动清理释放内存。上生产环境时我最先关注的就是对象存储的内存上限如果任务产生太多中间结果可能会把内存撑爆这个我后面在实战避坑里会细讲。3. 环境准备与第一个Ray程序实战3.1 安装Ray的正确姿势Ray的安装比我想象中要简单得多一条pip命令就能搞定pip install ray[default][default]这个extra依赖很关键它会把Ray运行所必需的配套组件一起装上包括Dashboard可视化监控面板和一些与机器学习的集成组件。如果你运行环境的网络比较慢可以考虑用国内镜像源加速比如pip install ray[default] -i https://pypi.tuna.tsinghua.edu.cn/simple安装完成后验证一下是否成功import ray print(ray.__version__)如果你能看到版本号输出说明Ray的核心包已经就绪。这里要提醒一句Ray对Python版本有要求建议使用3.8到3.11之间的版本太高或者太低的Python版本可能会导致兼容性问题这是我在实际使用中踩过的坑。3.2 快速启动Ray运行时在使用Ray之前必须显式启动Ray运行时。最常见的本地开发方式是ray.init()ray.init()会自动检测当前机器的可用资源包括CPU核数、内存和GPU并启动相应的本地调度器。如果你不调用这一步直接用ray.remote装饰器定义的函数去调用.remote()Ray会报错提醒你先初始化。当你的程序退出时可以用ray.shutdown()来关闭Ray运行时释放资源。在Jupyter Notebook里跑Ray特别容易遇到端口占用或者重复初始化的问题我的经验是创建独立的进程来运行Ray脚本或者在使用完手动ray.shutdown()。顺便提一下Dashboard。ray.init()启动后终端窗口会打印一个Dashboard地址类似http://127.0.0.1:8265在浏览器打开这个地址你能看到集群的实时状态每个节点的资源使用率、任务执行情况、对象存储利用率、Actor列表等。我第一次用Dashboard的时候真的有“哎呀这东西真方便”的感觉排查任务卡住的原因变得特别直观因为你能直接看到每个任务在哪个节点上跑、跑了多久、是被阻塞还是正在执行。3.3 手写第一个并行Demo现在来写一个最简单的Ray并行程序目标是并行计算一批数字的平方和。先看整体代码import ray import time ray.remote def compute_square(x): time.sleep(0.1) # 模拟计算耗时 return x * x ray.init() start time.time() # 传统的单机列表推导 squared_list [compute_square(i) for i in range(10)] single_time time.time() - start start time.time() # 使用Ray并行调度 refs [compute_square.remote(i) for i in range(10)] results ray.get(refs) parallel_time time.time() - start print(f单机耗时: {single_time:.2f}s) print(fRay并行耗时: {parallel_time:.2f}s) print(f结果一致: {results squared_list}) ray.shutdown()这段代码包含三个关键步骤第一步ray.remote装饰器把普通函数变成可远程调用的Task这一步没有任何魔法只是给函数打上了标记让Ray知道它可以被调度到其他节点执行。第二步创建列表时使用.remote(i)而不是直接调用函数。这里要注意compute_square.remote(i)会立即返回一个ObjectRef真正的计算是异步在后台执行的所以创建10个.remote()调用时10个任务会被并行调度到不同CPU核心上执行。第三步ray.get(refs)一次性获取所有结果。ray.get是一个阻塞操作它会等待所有引用的结果就绪后才返回。这里有个细节如果某个任务执行时间特别长而另一个任务早已完成ray.get默认会等待所有任务完成后才统一返回。如果你只想取最快完成的任务结果可以用ray.wait接口这在某些场景下能显著提升响应速度。我在自己电脑上实测这段代码单机的循环版本因为串行执行10次sleep(0.1)需要1秒左右而Ray并行版本通常只需要0.2到0.3秒取决于CPU核心数。这还只是10个任务如果扩展到成千上万个任务收益会更加明显。3.4 玩一个稍微复杂的例子分布式参数搜索单纯计算平方和有点太学生气了。我们来看一个更贴近实际机器学习场景的例子并行执行多组超参数试验。假设我们要在一个模拟的机器学习任务里比较不同的学习率对模型损失的影响。每个试验的点是独立的非常适合并行import ray import random ray.remote def run_experiment(learning_rate): # 模拟模型训练过程这里随机返回一个损失值 current_best float(inf) for step in range(100): # 模拟训练评估过程 loss (learning_rate - 0.03) ** 2 random.uniform(0, 0.01) current_best min(current_best, loss) return learning_rate, current_best ray.init() # 把所有待测学习率并行发放给多个worker learning_rates [0.001, 0.01, 0.02, 0.03, 0.05, 0.1] refs [run_experiment.remote(lr) for lr in learning_rates] results ray.get(refs) for lr, loss in results: print(f学习率 {lr}最佳损失 {loss:.4f}) # 找到损失最小的学习率 best_lr, best_loss min(results, keylambda x: x[1]) print(f最优学习率: {best_lr}损失: {best_loss:.4f}) ray.shutdown()这段代码的精髓在于6个试验任务被同时分发到不同的CPU核心上执行总耗时几乎取决于单个试验的时间而不是6倍。当你的超参数组合数量成百上千时这种并行加速的收益是指数级的。在真实项目中我通常会结合调参框架来做类似的事。这里不展开说具体的框架名但思路是通用的把每个试验封装成一个Ray远程函数让调度器自动分发。4. 深入Ray的应用场景和生态位4.1 机器学习训练与超参数搜索Ray在机器学习领域最深入人心的应用场景当属超参数搜索。不管是传统的网格搜索还是更高级的贝叶斯优化本质上都是“大量独立试验并行跑收集结果择优”。这个流程和Ray的Task模型完美契合。我实际参与过的一个训练任务中需要比较上百组参数组合。如果在一台8核机器上串行跑每个试验2小时全部跑完要25天。改用Ray并行调度8个试验同时进行后总耗时缩短到约3.1天效率提升7到8倍。如果再扩展到多台机器组成的集群提速效果会更夸张。这种量级的加速直接决定了一个实验迭代周期的长短对研究方向的影响非常实际。4.2 数据预处理与特征工程在数据科学项目里数据预处理往往是最花时间的环节。清洗缺失值、特征变换、标准化这些操作通常对每一行或每一批次数据都是独立的天生适合并行。Ray的分步式计算模型配合对象存储可以让预处理管道里的每一步都在不同节点上并行运行。我常用的做法是把数据划分成多个分片每个分片作为一个对象存入Ray对象存储然后用多个Task分别处理各自的分片最后把处理结果拼接起来。比如给一亿行用户行为数据做特征工程单机Pandas可能直接内存爆掉而用Ray的分片处理加对象存储共享机制可以轻松完成处理速度也明显更快。4.3 模型服务与在线推理Ray不仅擅长训练阶段也覆盖了模型服务领域。Ray Serve就是一套建立在Ray之上的模型服务框架支持把训练好的模型部署为在线API。这里平时不会有人专门在“认识Ray”的入门教程里展开但它说明了一个重要事实Ray的生态体系从训练到部署是一条龙打通的你不需要在训练框架和服务框架之间来回切换。对于一个入门者来说初期不需要碰Ray Serve知道有这回事儿、知道它的定位就行。重点是把核心概念Task、Actor、ObjectRef吃透后面的路径自然会清晰。5. 实际踩坑与排查技巧实录5.1 序列化带来的“隐雷”分布式计算绕不开序列化问题。当你调用.remote()函数时传进去的参数和返回的结果都要经过序列化才能在节点间传输。Ray默认使用的是自定义的高效序列化协议但如果你传递的是自定义对象、lambda函数、生成器等对象就可能遇到序列化失败。我遇到过最典型的坑是在一个远程Task里传了一个threading.Lock对象结果运行时报序列化错误。逻辑上这个Lock只能在创建它的进程内使用根本不应该传到另一个节点去。解决方法是把需要共享的锁放在Actor里让Actor来保证并发安全。另一个序列化的坑是默认参数。如果你在远程函数里引用了全局变量而这个全局变量不能序列化Ray会在执行时尝试把整个闭包环境序列化传过去要么报错要么性能极差。最佳实践是远程函数内部尽量自包含不要依赖外部全局状态。5.2 任务调度与阻塞Ray的任务调度虽然是自动的但如果你不小心在Task内部调用了另一个远程Task并立刻ray.get等待结果就可能造成“嵌套阻塞”。比如ray.remote def outer_task(x): ref inner_task.remote(x) return ray.get(ref) # 这个调用会阻塞当前worker嵌套的ray.get虽然功能上没问题但它让外层Task占着一个worker干等浪费了调度资源。当任务规模大了以后这种模式会显著降低整体吞吐量。更优雅的写法是让外层Task直接返回inner_task.remote(x)的结果引用由Ray帮你解析依赖关系而不是手动阻塞等待。5.3 对象存储内存爆掉Ray的对象存储空间是有限制的默认大约是机器可用内存的30%左右。如果你在并行任务里产生了大量中间对象又不及时清理就会出现“对象存储内存满了”的警告随之而来的是任务运行速度骤降甚至直接崩溃。我的经验是养成及时释放引用的习惯。用ray.get拿到数据后如果不再需要对象存储中的原始引用可以考虑用ray.kill方式终止不需要的长任务或者让程序自动触发垃圾回收。对于大规模数据处理场景合理调整对象存储上限也是一个方向但这需要结合机器实际内存来设置不能盲目调大否则会压缩操作系统本身的可用内存。5.4 常见问题速查小表格我把入门阶段最容易踩的问题整理成一个速查表方便你遇到问题时对照常见现象可能原因快速解决建议运行时报“Ray hasnt been started”忘了调用ray.init()在代码最前添加ray.init()结果输出乱序任务天然并行完成顺序不确定不需要抱怨顺序用ray.get统一收拢执行速度比单机还慢任务太小调度开销超过计算时间增大任务规模或者用批量数据分片自定义对象传参报错对象不支持序列化改用Actor持有该对象或转成字典传参CPU资源全部被占满默认Ray会用满所有可用CPU初始化时指定num_cpus4限制多次运行不释放资源ray.shutdown()没执行在程序退出时显式调用ray.shutdown()6. 我对Ray的整体评估与后续学习建议6.1 Ray的野心做一个通用分布式底座如果只能用一个词形容Ray我会选“优雅”。它把分布式概念简化到几乎感觉不到“分布式”的存在这种设计理念在现代开源项目里相当难得。一方面它保留了足够的底层控制力熟练的话可以精细调节资源分配另一方面普通开发者面对它时完全不需要背上沉重的分布式理论包袱。但要客观地说Ray不是银弹。如果你只需要非常简单的异步任务分发直接用轻量级的队列方案可能更合适没必要引入整套Ray集群。如果数据规模达到PB级别并且以SQL分析为主已经成熟的数仓方案可能比Ray更适合。Ray最闪光的地方在于“机器学习全流程的通用覆盖能力”这个生态位目前几乎没有对手。6.2 接下来往哪个方向学作为“认识Ray”的收尾我建议按照下面的路线图往下深入第一步熟练掌握Task和Actor的混合使用。先理解清楚无状态和有状态服务的边界这是用的最频繁的两种模式。第二步研究一下对象存储和ray.get、ray.wait的具体行为。这里有很多涉及性能和资源使用的细节值得花时间读官方文档。第三步了解Ray的集群模式。本地单机跑通之后集群部署是自然延伸。可以尝试在多台机器上组一个小集群感受一下Ray的自动调度能力。这个阶段需要注意集群节点之间要通过网络互相发现默认配置在局域网环境下非常容易搭建。最后深入机器学习生态相关的库。当你需要训练调参、模型部署的时候Ray生态里对应的工具可以让你少写很多胶水代码。入门阶段不用贪多把基础的大树扎稳后续自然枝繁叶茂。我在实际使用Ray的过程中最大的体会不是它帮我写了多少分布式代码而是让我彻底转变了思考方式——从“我这台机器能跑多大”变成了“这个任务能不能拆小并行”。这种思维转变比学会某一个库更加宝贵。希望这篇“认识Ray”能帮你迈出这一步。

相关新闻

纯JS魔方代码:前端三维渲染与交互实现的完整拆解

纯JS魔方代码:前端三维渲染与交互实现的完整拆解

简介:一款使用原生JavaScript开发的三维魔方模拟程序,适合前端初学者、算法爱好者以及正在准备前端面试的开发者阅读,借助真实项目理解交互逻辑、动画调度与状态管理。资源以rar压缩包形式发布,整体大小仅255KB,压缩包…

2026/10/18 9:07:25 阅读更多 →
Java数据结构课设:通讯录模拟与24点游戏双模块拆解

Java数据结构课设:通讯录模拟与24点游戏双模块拆解

简介:数据结构课程设计资源包内含两个经典Java项目:手机通讯录模拟与24点扑克牌游戏,覆盖链表、数组、哈希表、排序等数据结构核心应用,适合高校学生完成课程设计、备战考试或巩固Java编程能力。压缩包共73个文件,整体…

2026/10/18 9:07:25 阅读更多 →
Java数据结构课设:通讯录顺序表与24点递归穷举完整方案

Java数据结构课设:通讯录顺序表与24点递归穷举完整方案

简介:这是面向高校计算机相关专业学生的数据结构课程设计参考项目,覆盖手机通讯录模拟与二十四点扑克牌游戏两大经典应用。通讯录部分借助ArrayList、LinkedList实现联系人动态管理,并用HashMap优化按姓名查找;二十四点游戏则基于…

2026/10/18 9:07:25 阅读更多 →

最新新闻

多智能体协作实战:从踩坑到可控的架构设计

多智能体协作实战:从踩坑到可控的架构设计

做多智能体协作这块,说实话是条“看着很香、踩坑很多”的路。我的理解里,多智能体不是单纯把几个 AI Agent 拼在一起,而是让一组各有专长的智能体在同一个目标下分工、协商、互相校验。真正动手做过的人应该都体会过:单个 Agent 表…

2026/10/18 15:30:04 阅读更多 →
BF16未量化还是GGUF?S1-mini-MLX-bf16与s1-mini-GGUF实测对比帮你选型

BF16未量化还是GGUF?S1-mini-MLX-bf16与s1-mini-GGUF实测对比帮你选型

【免费下载链接】S1-mini-MLX-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/S1-mini-MLX-bf16 点击查看 免费下载 S1-mini-MLX-bf16 是 Superwhisper 推出的语音识别(ASR)文本规范化模型 S1-mini 的 MLX BF16 未量化 版…

2026/10/18 15:30:04 阅读更多 →
无线Mesh网络核心原理与工程部署实战:消除Wi-Fi死角

无线Mesh网络核心原理与工程部署实战:消除Wi-Fi死角

几年前接手了一个老式三层楼的项目,业主抱怨最多的就是“二楼书房断流、三楼卧室信号满格但刷不动视频”。当时我用的是传统路由加中继的思路,折腾了一周,问题反而越弄越多。后来换成了无线Mesh方案,拓扑调整了两次,全…

2026/10/18 15:30:04 阅读更多 →
用 vLLM 部署 GLM-5.3-Flash-FP8:从零搭建高可用大模型推理服务的完整配置清单

用 vLLM 部署 GLM-5.3-Flash-FP8:从零搭建高可用大模型推理服务的完整配置清单

【免费下载链接】GLM-5.3-Flash-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/GLM-5.3-Flash-FP8 点击查看 免费下载 本文是一份 GLM-5.3-Flash-FP8 大模型 vLLM 部署指南,带你从零搭建一个高可用的多模态推理服务。GLM-5.3-Flash-FP8 是 …

2026/10/18 15:30:04 阅读更多 →
VC6.0兼容SQLite3实战:工业嵌入式系统数据库升级方案

VC6.0兼容SQLite3实战:工业嵌入式系统数据库升级方案

简介:本资源是专为Windows平台VC6.0开发环境定制的SQLite3数据库引擎编译包,面向嵌入式系统、传统工控软件及遗留C项目维护人员,解决在老旧VS6.0工具链下无法直接集成现代SQLite3库的兼容性难题。压缩包为7z格式,共含多个关键组件…

2026/10/18 15:30:04 阅读更多 →
gdsdecomp:一条命令把 Godot 的 PCK、APK、EXE 逆向回可编辑工程

gdsdecomp:一条命令把 Godot 的 PCK、APK、EXE 逆向回可编辑工程

gdsdecomp:一条命令把 Godot 的 PCK、APK、EXE 逆向回可编辑工程 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp 拿到一个已发布的 Godot 游戏时,你手上往往只有一份 …

2026/10/18 15:29:03 阅读更多 →

日新闻

基于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/18 0:00:55 阅读更多 →

周新闻

基于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/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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 阅读更多 →