2022 | 壬寅虎年

疫情与心态 今年算是疫情影响最大的一年,从三月封校开始,全年接近四分之一的日子都在静默中度过。这种或许有些荒诞的生活也让我意识到所谓“个人的命运也与历史的进程息息相关”。不过这两天窗外久违的爆竹声,也预示着疫情真的要变成过去时了。 静默的日子里,面对未来的不确定性和生活的窒息感,迷茫和自闭成为了主要情绪,生活中各种重要的元素仿佛都只存在于屏幕背后。一个人面对电脑缺少社交的这段时间,攒下不少坏毛病,注意力碎片化,依赖一些即时奖励(甚至是短视频)。现在回看那一段时间,我渐渐意识到各种社交带给我的情绪价值,割断一个人的所有线下活动真的是很残忍的一件事。 这一年的博客更得也很少,一方面是压抑的心态变化,不再像以前那样给自己留一些时间探索那些字面意义上“有趣”的技术;另一方面则是学得越多,越觉得自己懂得太少,有点像从愚昧山峰走向绝望之谷的感觉,平时积累的零零碎碎的笔记好像也称不上高质量的博客输出。总之,希望新的一年能尽快走出那些坏毛病,多花些时间主动“走点弯路”! 5 月 1 日,半封控期间的校园,我躺在植物园草坪上 科研与工作 今年三月我投出了人生第一篇科研论文,六月份得到了接收的消息,对于我这个科研新人来说运气真的很好。自己觉得这份工作还有很大的提升空间,十分感谢临截稿前还在帮忙修改论文的几位师兄和老师。而今年十月底又十分幸运地得到了导师的支持,在这个特殊时期亲身前往日本参会(当然也有一些不那么幸运的,比如我们办理完繁琐的商务签手续后不久,日本就开放办理更方便的旅游签了)。 这次参会的经历给我带来的感受是相当多元的。一方面,我得以近距离感受顶尖学术人的科研氛围、深刻理解学术交流的各种细节,从 更 high-level 的层面看待整个机器人领域的进展,结交一些志同道合的科研伙伴。另一方面也是一次体验日本社会与文化的机会。我在高考后的暑假也在日本待过一周,但当时自己对身边的社会都不怎么了解,一周时间仅限于走马观花的旅游。这次日本之行有幸得到一位初中同学、一位高中同学的接待,从不同的切面来感受日本这个国家。 10 月 26 日,日本京都 IROS2022 会场 一些机缘巧合,暑假的时候我在腾讯 Robotics X 实验室实习了三个月。公司里的科研真的和高校有很大的区别,资金更充足的同时会更有一种产品导向的意味。这也是我第一次从内部视角观察大公司的运作,观察大公司职员们的科研工作、薪资福利、社会关系、运动娱乐,也让我对未来的职业选择有了一些思考。 生活体验家 虽然疫情的影响无处不在,自己今年依然稳住了“生活体验家”的 title: 第一次亲眼看火箭发射。SpaceX 的火箭回收、SLS 重返月球计划,太空这一主题对我总是有一种魔力。今年夏天我如愿来到文昌发射基地现场,在沙滩帐篷里睡了一晚之后,亲眼见证了问天实验舱的发射。火箭在人群的欢呼中稳稳升起,几秒后轰鸣声震颤大地,箭体随着重力转向在头顶划出一道优雅的弧线——现在回看当时的视频还是会让我感到无比震撼。 7 月 24 日,海南文昌,属于全人类的终极浪漫 第一次开始独居,开始考虑小到垃圾分类、大到做饭养车各种生活琐事,生活技能++。独居除了自由,也给我一个机会好好认识自己,思考什么样的生活是自己真正想要的。 第一次作为车主接顺风车订单。起初是为了开车回家的时候赚点油钱,后来发现这也是一种很有意思的社交方式,有时候能听到如果不是打车根本不会有交集的人生故事,也让我感受了一下网约车司机与平台之间的关系。 6 月 3 日,西湖边的偶遇 金榜题名 Copilot,GitHub 和 OpenAI 合作开发的“高级代码补全工具”,或者说 AI 助手,这一年大大提高了我的 coding 效率。前段时间公开的 ChatGPT 好像更是潜力无穷。 公路车,骑行是下半年开始的爱好。我发现自己真的非常享受探索城市各个角落、在脑海中重新建图的过程(长大了才发现在大脑里维护一个小地图好像是我的特异功能!)。徒步太慢,限制了探索范围;开车太快,给我一种走马观花的感觉;而骑车刚刚好。再加上对这种简单优雅机械的热爱,很享受完全依靠自己的力量去任何地方的感觉。 《商业就是这样》,下半年开始最爱听的一档播客节目,大部分话题都是自己从未接触过的领域,但信息密度非常高,有效地扩展了知识边界。 《坎巴拉太空计划》,重新学习了引力弹弓、霍曼转移,打上 RSS mod 致敬历史上那些经典事件,可能是第一款让我热衷于边玩边推公式、写代码的游戏。 《Nintendo Switch Sports》,结合了健身环与马里奥派对的优势,网球/足球/羽毛球/高尔夫/保龄球,简单易上手,毫无悬念拿下今年过年期间我家的合家欢游戏大奖。 两部美剧:《This Is Us》,温暖感人,探讨家庭、友情与人生,“每一集都是一部浓缩到 40 分钟的五星电影”;《Breaking Bad》,讲述一个普通人的转变,成功地让观众开始同情一个所谓的毒贩与杀人凶手。 期待一下在交大的最后一年 以前总是期待生活会是线性的、永远积极向好,但事实上它恰恰是螺旋的、迂回曲折的。“人生没有白走的路,每一步都算数。”更何况,生活的评价也不能被完美压缩到一个维度的“好坏”上。过好每一个平凡的日子,学会享受其中的不确定性未尝不是一种优雅的态度。

January 21, 2023

基于 WSL2+Docker 的一种深度学习环境解决方案

目的与方案 进行深度学习相关的开发,使用基于 Linux 的环境是大多数人的首选。然而大多数同学往往没有独立的 Linux 服务器;公用 Linux 服务器常常受限于权限等问题,不适合做个性化的配置,适合做验证后的大模型训练(或许);如果用个人主机装双系统,还得再费精力去维护一个工作用的 Linux 环境(浏览器、文档、网络、笔记软件、通讯软件,想想都已经头大了),而且切换系统还需要重启;如果用虚拟机,性能损耗是没法避免的,想要在虚拟机中支持 CUDA 那更是复杂。 除此之外,深度学习的各种环境配置有多头疼就不必多说了,cuDNN、TF、PyTorch 版本匹配,每一次 install 之前还要检查“换源了吗”,如果想要多版本共存那苦恼又多了一分。 以下,介绍一种 WSL2+Docker 方案,不仅解决以上痛点,还具有以下特性: 用 Windows 平台下的 WSL2 子系统实现环境隔离:Linux 生产环境与 Windows 学习环境隔离 子系统与宿主机的通信可以通过网络端口映射、文件磁盘链接形式进行(所以 Jupyter Notebook、FTP、SSH 之类的都完美支持),不过默认不带图形界面(一些可视化结果考虑离线渲染查看吧) 注意 WSL2 的 CUDA 支持推出时间并不久,但好在目前用下来没有什么大 bug 用 Docker 实现深度学习环境一键配置(是真的一键),同时本次使用的 Deepo 包支持 LEGO 式的自定义模块 Docker 环境的备份、迁移非常方便,复制粘贴就能搭建一套完全一样的环境,适合 teamwork 整体架构(感觉是最近画得最漂亮的图了) 看起来很套娃,但实际配置起来发现相当顺滑,而且层层隔离让人心情舒畅。总之,核心思路就在这张图里了,如果还想看下配置过程中的踩坑记录还可以继续往下滑。 显卡驱动 非常简单,在 NVIDIA 官网 找到对应自己显卡的最新驱动即可。注意这是整个方案唯一需要安装的驱动程序,不要在 WSL 或者 Docker 中再配置驱动了。 NVIDIA 官网 WSL WSL 是一种 Windows 下的 Linux 子系统,新版本 WSL2 主要是提升了文件系统性能。具体安装步骤参考 微软官方文档。首先使用wsl --install安装 WSL 所需的所有组件,重启,然后在 Microsoft Store 中搜索需要的 Linux 发行版(如 Ubuntu 18....

April 11, 2022

FileZilla 外网访问配置指南——FTP Pasv Mode 解析

为了在校园内网下跨平台传输文件,找到了 FileZilla 这一款免费开源的 FTP 工具。 相比于一般的通讯软件或是 U 盘传文件,基于 FTP 等协议的这种分享方式有这么几个优点:接收方无需登录,甚至无需软件,彻底规避大号小号来回切换;可以支持一对多分享;多平台通用,Windows、macOS、Linux 都支持(Server 只有 Windows);速度快,理想情况下能跑满局域网物理上限。 软件本体可以在中文官网或是英文官网上下载,分为 Client 端和 Server 端。折腾的时候对于 Server 端其中一个 passive mode 设置感到非常疑惑,网上很多教程讲得并不明白,本文从 FTP 协议出发整理一下。 FileZilla Server FTP 数据连接 FTP (File Transfer Protocol) 已经有约四十年历史了,协议的制定并没有考虑到现如今的互联网规模,包括 NAT 路由、防火墙等。 FTP 协议的特殊之处在于其建立了两个连接:控制连接 control connection 用于传输命令及其回复,一般是 21 端口;数据连接 data connection 用于传输文件或目录,由特定的控制命令建立,每次端口不一定相同,建立之后可以上传或下载。 数据连接的方式有两种:主动模式 active mode、被动模式 passive mode。 在被动模式下: Client 通过控制连接发送 PASV 命令到 Server Server 回复地址和随机一个端口 Client 发送传输文件或者目录的命令,同时用 Server 的地址建立数据连接 在主动模式下: Client 通过控制连接发送 PORT 命令到 Server,同时附上了本机地址 Client 发送传输文件或者目录的命令 Server 使用 Client 的地址建立数据连接 A common network setup 注意 FTP 协议是建立在 TCP 协议的基础上,所以 Client 和 Server 的每次交互都有三次握手。...

March 11, 2022

2021 | 辛丑牛年

站在年这个尺度上回顾,又一次感受到时间流逝之快。照例,在农历新年到来之际,回顾记录一下这一年来的一些新想法。 去年说的“生活体验派”在今年有了新的解释,增加样本多样性,才能提高泛化能力。闲暇时间多出门走走,主动挑战一些从没做过的事,或大或小,或是单纯地进行一些社会观察实验,说不定刚好能为下一次抉择提供一些新思路。李沐老师发表的一篇文章《用随机梯度下降来优化人生》中也提到了这么一个观点。“做了很多错误的决定,放在全局视野下也不见得是一件坏事。” 四处看看。每一步走的方向是你对世界的认识。如果你探索的世界不怎么变化,那么要么你的目标太简单,要么你困在你的舒适区了。随机梯度下降的第一个词是随机,就是你需要四处走走,看过很多地方,做些错误的决定,这样你可以在前期迈过一些不是很好的舒适区。 学习 六月,是本科的毕业典礼。四年时间转瞬即逝,有很多内容值得眷恋、感激,感觉好些事情还未来得及发生便已结束。在这个校园里的大事小事、大人小人,让我完成了又一次身份的转变。感谢所有朝夕相处的同窗好友,志合者,不以山海为远;希望日后常有相聚时刻,祝彼此间友谊常青。 下半年的生活在一个崭新的环境中展开,有很多欣喜也有一些苦恼,更自由的氛围让我到现在还在适应的过程中,有更多东西需要学习、也对自己提出了更高的要求。 感情 今年的另一个挑战就是和轩开始异地,再加上时差好像把我们的距离拉得更远。更高的沟通成本一开始确实给我们摆出了一个大难题,一点点调整计划、善用各种工具,相信距离不是问题。疫情背景下国际旅行困难重重,不过后来我俩就把这个机会当做一次社会观察任务,提前为未来的生活选择做一些调研体验。 轩搬去德国之后,经常分享一些 culture shock,从街道、校园到工作、疫情。尊重多样性(不仅仅是文化),道理听起来很简单,但自己真正执行起来并不是很容易。很多时候会执着于让别人百分百认同自己的观点和思路,但事实上更应该保持开放心态、辩证思维、求同存异。 运动 运动方面,这一年在学校里抓住各种机会享受作为学生的福利——低价的体育场馆、专业的体育社团,感谢身边小潘几位运动达人拉着我迈出这一步。从去年的长跑、羽毛球、健身到后来游泳、龙舟、骑行、冰壶,渐渐地也把更多运动加入了自己的 TODO 清单——滑雪、水上运动等等。想到高中操场上写着的“文明其精神,野蛮其体魄”,身体健康永远是第一位的。 反思 这一年也有一些值得反思的地方。虽然十分厌恶短视频 APP,但自己仍然有很多时间消耗在这种低价值、碎片化的娱乐上,后果不限于效率低、晚睡。警惕“奶头乐”,和“保持科研品味”一样也要把目光放长远,合理规划。 此外,有时候会对自己说“干完手上这件事我就 blahblah”、“下周开始就要 blahblah”,但事实证明 TODO-list 上总有做不完的事,头号问题解决了又会有新的问题排到第一位。忙碌是常态,想要改变就应该从当下做起,拒绝拖延,就像真正高效的人在哪个阶段都能井井有条。(真正快乐的人在哪个阶段都能找到自己的快乐) 与其临渊羡鱼,不如退而结网。保持活力,也算是对新一年的展望了。 金榜题名 软件 Notion:目前从 OneNote 里把一部分更成体系的笔记归档整理到 Notion 中,同时协作方面的功能也更有优势 Logseq:代替了之前的 Workflowy,用来做每日的零散记录,整理总结真的很有帮助 足迹:iOS 端一个记录轨迹的 APP,数字化生活的又一小步 硬件 MacBook Air M1:向苹果生态又迈进一步,轻重量和长续航完全满足了我对一台“always online”设备的期待,不得不感叹一句太爽了。macOS 的学习成本不是大问题,不过还得忍受一些奇怪的快捷键逻辑、糟糕的键盘手感 DJI Mini 2:如果对身边的景色感到厌倦的话,不如换个上帝视角来寻找一些美 游戏 双人成行:电影般的画面、富有创意的关卡,可能是目前最爱的双人合作游戏 神力科莎:买了罗技 G29 之后开始尝试一些更拟真的模拟赛车游戏,逼真的引擎和丰富的 MOD,可玩性很足

January 31, 2022

1936 公里新疆自驾之旅

从喧闹城市飞到广袤新疆——期待已久的毕业旅行! 行前准备 租车 之所以选择租车自驾而不是跟团或者包车,主要是考虑到行程安排的灵活自由。自己开车穿越沙漠绿洲草原雪山各种地形,随时停下车来和路边的动物打招呼、和奇特的地貌合影,我想这些体验足以掩盖自驾游的疲惫。 由于新疆城市之间距离都比较远,为了增加容错,这次招募同伴时凑到了三本驾照,然后准备租一辆七座商务车/SUV,最终选定的车型是别克 GL8(上路之后发现新疆满大街都是同款车型),事实证明完全能胜任新疆的路况。 接着花了不少时间横向比较了几个常见的租车平台,不同平台在不同地区倾斜的资源不太一样,所以价格还是有一定差距的。有意思的是,取车的时候我发现某某平台上的不同品牌其实都在同一个门店里,共用一个停车场,简单贴牌罢了。 选车的时候因为担心车况定义不明确,特意筛选了 2020 款的 GL8 车型,这样拉满也就一年的损耗。之后发现这个决定非常正确,提到的车外观基本没什么划痕,公里数 13500km,简单看了下玻璃水、防冻液、机油都正常,于是就拍视频留证,签合同提车。 关于租车,还有一点遗憾就是租车公司一般都是乞丐版的车型,而 2020 款的乞丐版 GL8 不仅没有天窗,还阉割掉了定速巡航功能,跑新疆这种大长途就辛苦了。 其他一些供参考的信息:开车途中时刻关注油箱余量、胎压;新疆地区的加油站都需要乘客下车,司机持身份证接受检查后进站加油;GL8 这辆车一周开下来的平均油耗大约 8.5L;国道省道两边不要随意停车,偶尔会有专门的停车区;连续下坡要小心刹车片过热造成的性能衰减。 路线 大致轨迹:乌鲁木齐-北屯-禾木-喀纳斯-布尔津-克拉玛依-奎屯-乌鲁木齐 旅行路线我们大致参考了某个旅行社的推荐方案,出发前两周连续开了好几天会议做了点调整,整体不算特别紧凑,如果时间再加两天也可以把赛里木湖伊宁那一段加上。最终实际走的行程跟计划偏差不大,只是因为主观/客观原因略有小变动:克拉玛依去奎屯的路上多体验了一段省道;独库公路迟迟不开通,临时决定去石河子市里转了一圈。反过来讲,这也是包车的好处,行程可以随时调整。 防疫 新疆现在(2021.06)的防疫政策还是很严,而且每个地方的具体政策不一样,变化也会很快,不放心的可以提前几天电话咨询一下,网上能找到各地的防疫电话。按照我们这次的经历,城市之间的检查站一般来说持有绿色“行程码”就行,严格一些的会要求乘客下车当场做核酸。 Day 1 乌鲁木齐→北屯 一行六人在 Day 0 晚上陆续抵达乌市,在机场提车之后下榻宾馆休整。这次所有的宾馆都是提前订的,这个时间节点还没到新疆旅游最热门的时候,宾馆的整体价格基本在三百/双人间上下。 按照计划,Day 1 一早我们进城采购一点长途开车路上的补给。由于租到的车是外地牌照,早晚高峰的时候还得注意一下乌市的限行规则。新疆虽然统一使用北京时间,但整体生活作息会比我们晚 2 小时左右,一般晚上 10 点才天黑。我们早上 9 点在华润万家停好车时,大部分沿街的店铺都还没开门。 十一点左右我们离开市区开上高速,窗外的景色一下就开阔起来,远处连绵的应该就是天山山脉,西侧的沙漠也有名字——古尔班通古特。一路上的地貌不断变化,远处的高速路面因为海市蜃楼消失在天边,开近之后又逐渐如游戏般加载出来;一些奇形怪状的云看起来像是贴图错误,光线的明暗变化让远处的雪山背景显得有些不真实;空中总有一些逆着风悬停的大鸟,偶尔也能看见骑着摩托赶牛赶羊的牧民。都是来自城市里的我们很少能见到的景象。 从乌鲁木齐到北屯大约五百公里,我们边开边玩,大约晚上八点到达北屯,在这个新疆最北的城市找了家当地的乡村馕坑肉吃晚饭。 Day 2 北屯→布尔津→禾木 第二天的计划是从北屯开到禾木,早上九点出发,大约十一点半到达布尔津,一个以旅游作为支柱产业的小县城。 继续北上,大约一点开始有连续的上坡和下坡,一眼望不到头的直道变成了盘山公路,这就是阿尔泰山脉了。路两旁的绿色开始明显变多,有些明显的植被垂直变化规律,猛烈的阳光穿过云层在草地上移动,牛羊也开始成群结队出现。 注意中途会经过布尔津喀纳斯机场,是个无人机禁飞区。 沿途可以看到成群的牛羊,它们不需要牧民指挥也能熟练过马路,这时候大小车辆都得停下等待,默契地不按喇叭怕惊了羊群。 来禾木村和喀纳斯景区之前,建议仔细看一看下面这份 官方公众号提供的这份导览地图,一个喀纳斯景区的面积可能比得上一座城市,所以旅游前一定要规划好基本的行程。在大约五月到十月左右的旅游旺季,禾木、喀纳斯景点都只能坐区间车进出。于是我们把车停在门票站后,还得提着行李坐大巴,大约一小时车程。 禾木被誉为“神的自留地”,曾经是一个只有百来户人家的小村落。在这个大河谷里,原木垒起的木屋散布村中,冰川融水流过村前,禾木桥对岸是大片白桦林,成群大鸟在空中盘旋。只能说风景过于梦幻,镜头不知道往哪摆。 景区内的饭店都是统一价格,经典菜品包括土火锅、大盘鸡,基本都没什么性价比可言。这样的价格一方面是垄断,一方面是客流,旅游旺季只有短短几个月,在淡季的时候据说很多民宿老板都会关门歇业回到大城市。 我们的计划是在禾木村中的民宿住一晚,而很多旅行团都是坐区间车当日来回,所以晚间的客流量一下就少了很多。新疆主要是温带大陆性气候,昼夜温差较大,“早穿皮袄午穿纱,围着火炉吃西瓜”。前两天在城市里温差变化没那么明显,而傍晚的禾木温度就开始明显下降了。回去加了一件毛衣,爬山登上了观景台,木栈道连接着新村和老村,在观景台上可以一览禾木村全景。 这段时间刚好是满月,晚上只有零星几颗星星。也有人说一两个月后的深秋是禾木最美的季节,也是个小小的遗憾。 Day 3 禾木→喀纳斯 早晨初升的太阳洒在河谷,清净而温暖,我们在靠近村落的树林中看马儿吃草,听当地鸟儿的方言,没有看到经典项目“晨雾”略有遗憾(很有可能起得不够早)。 民宿的房东一早就在院子里打理植物,和她闲聊得知她来自湖南,她说第一次来到禾木的时候就知道自己会留下来,即使交通不便,各种物资都要提前订,仍然选择在这里开间民宿看四季更替。 大约十二点出发坐车回到门票站,下一站喀纳斯,和禾木村一样的,需要把车停在贾登峪门票站,然后坐区间车到景区的公交中心换乘。 喀纳斯湖是中国最深的冰碛堰塞湖,湖上有游船项目,但体验下来感觉不值这个票价。为了方便举着小旗的旅游团,景区内有各种公交线路在打卡点之间穿梭,看起来只适合那些“上车睡觉下车拍照”的观光客,一心想远离各种人造景观的我选择备好装备徒步穿越。 虽然四处都是狂野而原始的气息,但在这儿徒步基本没啥困难,开着高德地图拿好指南针,只管直线穿越就是了。冰凉的河水颜色随着深浅变化着,穿过一片树林远处又是另一片树林;走在一片空旷的草地上时背后传来渐近的马蹄声,一对父子策马经过,儿子可能只有八九岁但显然是个好骑手了。 今晚仍然是在喀纳斯景区内住宿。喀纳斯景区的住宿分为老村和新村,老村就在换乘中心旁边,或许比较方便,但住宿比较难订;新村离换乘中心比较远,需要换乘区间车前往,但一晚住下来感觉非常清净,整体体验还是不错的。 在民宿边的天璇餐厅饱餐一顿之后,我们六个人在新村附近信步游荡,用脚切实丈量这儿的土地,雪山和森林不再是背景板一样遥不可及的景色了,我猜这比沿着木栈道打卡拍照有意思多了。 相比较而言,禾木村已经完全是一个为旅游而生的村寨了,喀纳斯还保留了不少未开发的自然气息,至少夜里听到的是马嘶牛叫而不是一些劲爆舞曲。如果下次再来的话可能会选择在淡季的时候直飞布尔津,然后在喀纳斯连住几晚。 Day 4 喀纳斯→布尔津 早餐是在天璇餐厅吃的第三顿饭了,原计划坐车上山的我们受到店里小伙的诱惑,精简行李改成徒步上山。...

July 15, 2021