电子产品的长期主义

刚刚完成学生到职场的身份转变————本质上是收入来源从父母到自己的转变,我开始回过头来review自己的消费观。以及,什么样的产品,能叫具有长期主义的电子产品。 作为一个学生而言,除了钱什么都不缺,我有的是时间和精力还有热情去做自己想做的事情,就拿手机举例,我会买小米手机————以一个较低的价格获取更好的硬件,然后去尝试给它刷各种系统、尝试解除温控、尝试root+探索。总而言之,是用时间(你要付出时间精力去学习理解参数并选择)换取金钱。 聊聊我的电子产品:2018,伴随着入学季,老妈为我购买了一台戴尔G3笔记本,iPad是哥哥给我的高考超过600分的奖励,另外一个电子产品是高中时期的红米手机。当然,这么多年过去了,手机已经不知道换了多少部,戴尔G3虽然也没有更换,但它的稳定性太差了,在它身上也没少折腾,拆机、清灰、换风扇、加内存条,现在不到必须使用window的情况下,我一般也不会打开它。至于这台iPad,3000块,七年过去了,二手市场的均价仍然在500块。虽然是非全贴合屏幕+60hz,但他对我产生过一些影响。本科的时候用这台iPad和一只Apple Pencil写下了无数的课堂笔记,至今做笔记这个功能它仍然可以满足我,当然,除此之外,现在它的作用也只有作为连接蓝牙的音乐播放器和电纸书了。我潜意识里认为的这台iPad是性价比最高的产品,原因应该是 它曾经足够好用 它现在依旧能基本满足作为一台平板的功能 它足够稳定,我几乎不需要考虑维修和折腾,充好电,它就可靠 它为我的成长做出过一些贡献 我现在慢慢觉得,一个你经常会用到的东西,它必须足够稳定和优秀,才能降低你对自身时间和精力的浪费,本质上,是用金钱换取为数不多的时间和精力了。我最近很喜欢的电子产品是Airpods Pro3,也是我终于舍得狠下心尝试的一款产品。我读书的时候也买过降噪耳机,Vivo TWS 3,降噪的确还算强,但是当时没有做足功课,它的音质我只能用垃圾形容,但我还是使用了它相当长的一段时间。直到我购买了Airpods Pro3,第一次戴上它我的脑海里只有震惊,给不接触电子产品的女朋友体验后,她说你在路上的时候千万不要戴它,注意安全。现在,它已经成为我上班时必备的工具之一了,我总是在想,如果上学时狠狠心购买的是Airpods Pro2就好了。一千块,其实几乎不会改变我的生活,但体验往往是截然不同的。 现在,对于电子产品的选购,我的买点: 稳定,一个产品稳定与否,取决于开发团队的态度,也决定了这个产品的生命周期 短期足够好用,长期能提供它作为该类型产品的基本功能 价格并不代表价格,贬值率才代表价格

February 7, 2026 · 1 min · 18 words · YuZhouye · 

迷茫与长期主义

时常感到焦虑,焦虑的来源是迷茫,是对未来生活的不确定性。但是有一些事情可以贯穿时间,在更长的跨度范围内给予一个人在某方面甚至整体上的成长,这就是长期主义。 想一下在我的视角里可以被称之为长期主义的事情:读书,电影(我指的是已经经过时间考验的经典的作品),投资(观念、认知、知识广度),音乐(一件乐器),以及我现在在做的事情(复盘、总结、记录)。但这些事情往往很花时间,而且是完整的大块时间,而不是碎片化的垃圾时间。 于我而言,这两件反而是相互矛盾的事情,正是因为它足够长期,反而使我无法从中获得积极的反馈。我知道我需要做一些长期的事情,但是时间和精力被工作挤满后,想做的事情只能一拖再拖。 但是我又好奇,如果我真的做了这些事情,它一定切切实实地会给予我回报吗?或者从概率的角度出发,它大概率会给予我一个正向的回报吗?如果答案是yes,那为什么不放弃工作,而专心于这几件长期的事情?如果答案是no,那它们还是长期主义的事情吗?

February 7, 2026 · 1 min · 4 words · YuZhouye · 

PyTorch内存管理:Caching Allocator(一)

概述 当Pytorch显存溢出时,通常会抛出如下的错误: torch.OutOfMemoryError: CUDA out of memory. Tried to allocate xxxx MB. GPU 0 has a total capacity of xxxx GiB of which xxxx bytes is free. Of the allocated memory xxxx GiB is allocated by PyTorch, and xxxx MB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables) 阅读本文,你将理解下面这句报错中的显存大小 GPU 0 has a total capacity of xxxx GiB of which xxxx bytes is free 和下面这句报错中的显存大小的关系 ...

January 31, 2026 · 2 min · 318 words · YuZhouye · 

个人博客搭建指南-基于Hugo和Github Pages

概述 基于Hugo和Github Pages搭建个人博客是一件非常成熟简单的事情,你不需要看懂html和css源码,只需要修改几个配置就可以搭建出一个静态页面。你可以通过这里来查看我基于这套框架搭建的个人网站。 最近,我关注的PyTorch大神ezyang也将个人博客迁移至hugo,ezyang’s blog, 说明它足够稳定和强大。 理论上,只需要几十分钟就可以实现整个博客的搭建, 我参考的视频教程。 安装hugo 以macos为例,需要先安装homebrew和git,之后参考官方指南 brew install hugo cd ~/Desktop hugo new site blogs 此时桌面下就生成了blogs目录,当然,你可以自定义它要存放的位置。 安装主题 以papermod主题为例: cd blogs/themes git clone https://github.com/adityatelange/hugo-PaperMod.git 你可以修改 blogs 下的hugo.yml或者叫hugo.toml, 设置theme = “PaperMod” 你可以参考这个示例文件来配置你的网站 例如,你可以通过[params]来控制是否显示阅读时间、是否打开评论区、时间样式、作者等等等等,你甚至可以直接把文件丢给Gemini来帮你快速完成你想要的样式。 你可以通过[params.homeInfoParams]来控制主页标识,通过[[menu.main]]来管理你的菜单栏。 预览 在 blogs/content下添加一个md文件,例如: --- title: "About" layout: "single" url: "/about/" summary: "about YuZhouye" --- 内容 在blogs目录下执行hugo server就可以预览,你可以访问本地端口http://localhost:1313/来实时查看你的修改 创建Github Pages 在github下新建一个项目,通常是你的用户名.github.io,在终端执行: hugo --baseUrl="你的用户名.github.io" 此时会生成一个public文件夹,你在blogs下的修改,hugo会帮你在public下生成对应的html文件,此时只需要将文件夹与你的Github Pages绑定即可。 cd public git init # 连接你的项目 git xxxx git add . git commit -m'xxx' git push -u origin main push前,你可以执行hugo --cleanDestinationDir,以清理缓存。 此时需要等待Github Pages部署,稍过几分钟就可以通过访问你的用户名.github.io来访问你的个人博客了。 ...

January 16, 2026 · 1 min · 115 words · YuZhouye · 

PyTorch pr(2) cudaGraph下多流显存复用

[CUDA] Reuse blocks with record_stream during CUDA Graph capture in the CUDACachingAllocator #158352 https://github.com/pytorch/pytorch/pull/158352 专栏另一篇文章解读了record_stream相关内容,但CUDACachingAllocator源码中存在一个分支,会根据CUDAAllocatorConfig::graph_capture_record_stream_reuse()判断是否free和malloc某个block,这里填个坑,找一下对应的pr看是怎么复用的。 背景:CUDA Graph 下显存管理限制 在 CUDA Graph 捕获过程中,CUDACachingAllocator对内存的管理存在一个关键限制:必须等到捕获结束后才能回收内存块。这一限制源于 CUDA 的底层约束 —— 捕获阶段不允许查询event状态(因为此时 CUDA 操作尚未执行),而CUDACachingAllocator依赖事件驱动逻辑判断内存块是否可回收。而这会导致本该被释放的block未能被正确释放,直到捕获完全结束,比如free中的代码片段: if (!block->stream_uses.empty()) { if (C10_UNLIKELY(!captures_underway.empty())) { // It's forbidden to cudaEventQuery an event recorded during CUDA graph // capture. We conservatively defer recording end-of-life events until // the next call to process_events() (which won't happen until no // captures are underway) needs_events_deferred_until_no_capture.push_back(block); cudaGraph下安全的多流复用 为实现安全重用,PR 首先明确了两个核心术语,作为后续判断逻辑的基础: Free marker:通过cudaGraphAddEmptyNode创建的 “捕获合法” 空节点,插入到每个使用过该内存块的stream中,且位于该块最后一次被使用的操作之后,用于标记 “内存块已空闲”。 Terminal Node:流或捕获图中 “最新操作” 的集合,新捕获的操作会附加在终端节点之后。对于正在捕获的流,可通过cudaStreamGetCaptureInfo的dependencies_out参数获取终端节点集合。 内存块可重用性判断规则 cudaGraph生成一个DAG,因此作者提出了两种平衡 “安全性” 与 “灵活性” 的判断规则: ...

January 5, 2026 · 2 min · 219 words · YuZhouye ·