Halfmoon story

intern的地方叫做Halfmoon,零星的记录。

6.19

已经把朋友圈的入口关闭了两周了,可能会错过很多事情吧,但是实话讲,朋友圈里面的信息确实让我感到很焦虑,所以觉得过好自己的生活比较重要,线上的好友最终还是比不上现实生活中的好友。有时候还是忍不住想看看,于是就单点,比如突然想到了谁,就看看她的朋友圈有没有更新。

最近这几年每年的夏天似乎都是在实习生活中度过,剩下的时间就是在学习和准备考试了吧。回想起来就是每年的端午节都是和不一样的人在一起吃粽子,今年本心想大概是吃不到粽子了,结果中餐店的老板说可以帮着去买,兴奋了不少,但后来又说只有咸味的粽子,只能叹一声“哎”。

关于实习到是多多少少有些经验了。

主要是给自己的定位的问题,别想着自己能做个什么很大的project,主要是时间比较短,背景知识了解起来也需要时间,所以关于实习的目的,一个是主要是赚一点生活费,一个是主要开阔下眼界,技术方面要从小处着实,熟悉环境的同时做点力所能及的小事情。

把自己的位置摆正了,做事情之前先问问mentor,我们做这个事情下一步的plan是什么,自己不要做一些decision,就是提供建议,毕竟决定权不再自己,实习时间短,就算做了错误的决定也没时间补救(之前的经验教训)。

更不要动不动就想着重构项目啊什么的,把之前的项目弄work了,然后新的需求过来的能handle的了,作为实习生来看这样也就足够了。

别把实习的事情和自己的事情弄在一起,自己的事情归自己的,实习的归实习的。

6.20

之前P说读我的写的论文感到frustrated,我自己刚才又好好看了看,确实这样。每次读起来都觉得之前写的不太严谨,遣词造句都没有把主要的观点表述清楚,坦白讲他对我的帮助也已经算是仁至义尽了,是自己的work太有点拿不出手了,逻辑性严谨性可读性都差了一些。

回头看看,反反复复改了这么多遍了,真是有点心力憔悴,这个东西怎么翻来覆去地总是说也说不清楚。

最近一个难得的高兴的事情就是很久以前在毕业的时候投的一个专利成功地被授权了。当时主要弄这个的motivation是因为大城市的落户口都是实行的积分制度,盘算了一下弄个专利是比较可行的一个增加分数的方法,就厚着脸皮把所谓的“有novelty的方法”整理了一下,投递了出去。还有很感谢学校门口的专利局的帮忙,到目前这个阶段虽然这个专利暂时也并不怎么能够用的上了,但想想还是对得起当初在周末在滨江的图书馆哼哧哼哧地整理的辛苦,也算是为学校和实验室的KPI做了一点微不足道的贡献。

学校最近又给涨工资了,还涨了不少,这让我感到有点焦虑,我最讨厌自己拿钱但是不出活儿了,这钱拿的也不踏实。回想起来这几年,这样的经历确实也没少过。

6.27

比较好的调整状态的方式就是规律地做一个事情,比如每天规律地去上班,规律地去健身,规律地看书或者是制定好计划做喜欢的事情。大概人总是太任性,不能总是由着性子来。比如练习一个事情,喜欢的时候想起来,就花很多时间在上面,没了兴致,就又仍在一边,这样是练不出一个很高的成就的,最好就是规定一个最低限,比如每天练习的时间,这个最低的线要尽量满足,不管自己的状态是很好还是很不好。状态好的时候就多弄一点,不好的时候先达到了最低线的要求再说。

还有一些确定性的事情就提前规划规划,比如什么时候要弄个一个论文,这个工作量应该是比较清楚,什么时候之前大概有初稿,什么时候实验做出来,提早规划规划总是不至于到时候才慌乱。

7.4

这几天学校的机器offline了,许多事情也做不了(其实现在想想这只是借口,实验总是可以在开发机上从小规模的开始,换到large scale的机器上,只不过是修改一下参数的数字而已。之前由于技术水平限制有很多library不能熟练安装配置,现在应该不存在这个问题了),只能想想之前的工作,论文怎么整理。仿佛又陷入了停滞的阶段,论文弄了这么久都没弄好,肯定是有什么问题吧。这个慢慢想想,总不能在一个地方吊着,这个方向不行就朝着别的方向试试看,HPC方面的会议本来就不怎么多,在你的work弄好的时候正好遇上合适的会议也比较难。

有一个意思的事情,所在的项目里面,分析一个performance issue的问题,本来是memory bound的问题,但是manager似乎不太认同,总还是觉得优化并行还可以继续提升,自己加了timer然后各种数据,但manager似乎不太满意,最后公司里的senier enginner对待这个问题,就直接使用了intel的vtune工具,和manager说清楚了这个问题。然后manager也意识到问题不是出在并行这里。vtune这种工具以前上课的时候也用过但是基本上没有把它和实际的项目结合起来,这是一个很好的例子,你再添加各种timer然后做bentchmark的操作也没有vtune这种详细的图形工具分析来的直接。这就是有经验的程序员的做事情的方式,熟练使用已有的工具。然后用suitable的方式展示给manager比如就是图表。之前自己直接把原始的数据展示出来,但似乎manager并不怎么满意,毕竟大家都喜欢看简单直接的展示方式。从enginner的角度上讲,掌握的工具越多,比如profiling这种,就越能找到合适的解决问题的工具,显然通过intel的vtune进行profiling要远比使用timer更现代,比如说明memmory是否已经hit到极限等等,这样用实际的数据揭示出来的结果更为客观。

论文上p一方面说我的expression有问题,另一方面又说不清楚具体哪里有问题,这让我感到很困惑。我觉得跟他们合作弄论文基本上要等到黄花菜也凉了。好在现在有一些新的机会,可以找到其他的一起合作弄paper的人。有两个新的idea,这两天先稍微休息下,等到心情好点再投入到这两个新的work中,一个是基于之前的弄一个workshop,一个是adaptive stageing,主要就是节约了建立index的时间。(虽然凉了,但折腾的过程也有点收获吧)

paper上的一个提示就是,要开始自己整理一些好的词句,之前用phrase bank但总的来说还是要自己整理出来的比较好,这方面自己比较差的一个就是没有一个好的老师来指导。虽然说最后总得靠自己,但感觉短期内这个gap很难解决。一个又懂本专业的知识又对paper的修辞表述很有经验同时又愿意帮着一起改的人确实比较难以找到。

捷径大概是没有了吧,一方面就是要增强自身的实力,从现在开始就注重一点一滴的积累了,另一方面就是要找合适的人,人不可能运气一直好也不可能运气一直差,运气差的时候就慢慢安静下来做点眼前的事情,厚积薄发,做好准备,等机会好的时候把它把握住。

具体策略也没有什么捷径,先从好的词句和表述开始吧,比如这一段时间可以试试每天整理一句常用的表达,就像phrase bank中介绍的那种。就算是现在很快弄出来,最后也只是投一个archive,所以也不用着急,或许改改可以投ccgrid。这几天先不看,把之前不好的修辞和表达都忘一忘,看看别人是怎么写的,然后再套用进来。

7.10

总是不好不坏的感觉,之前听到一句话就是做事情的时候多想着为别人服务,写代码也是,比如提交一个pr,各种信息是不是写完整,做了一个软件,是不是方便别人的使用。多考虑一些别人的感受,比如演奏一个曲子,是不是达到了让别人很欣赏的程度。自娱自乐与给别人提供很好的体验,这个是业余和专业的区别了,不说所谓的体验,就算是最基本的,能不能做到不给别人添麻烦,这也是一个很基本的要求了。

7.12

今天一盘算,实习的日子也没剩下几天了,三个月的话真的是不怎么长的一段时间,就像是蜻蜓点水一样,刚刚有一点熟悉,就马上要离开了。

7.14

今天看了spiderman far from home cg的特效真的是非常惊艳了 想要watch movie的时候就出去看看,基本上就是一顿饭的钱,最后的片尾交响曲和整体的效果都让人感到与众不同 弄完之后再看自己的工作反而就能focus一点

尝试做一点video讲技术的topic 果然用英文表述一些概念还是需要很多的提升和练习,等赞够了3到5个video就可以发到youtube上,也对自己是个督促,争取做到能周更,解释的时候不要着急,要把话讲清楚,节奏感和速度是两个不同的东西。

最近又有一些额外的感悟,人生活的一个重要的意义就是把自己已经有何具备的东西发挥的更好一些,更近一步就是说要利用好自己的资源和优势,比如在什么地方就要比较大地程度上来利用什么地方的资源更好地提高自己。

还有就是往前推进事情的能力,特别是在做project的时候,当然首先是避免做无用功,有的时候也不知道这个是不是无用功,那就先把这个事情做出来再说。

7.20

总算是
在暴风雨之前赶回来
热的狠 总要来一场雨
晚上睡觉 也舒服点
炎热 偶尔会想起武汉
一动不动 坐在桌前
一根头发 飘落
你 怎么 这么不小心
公司里
最厉害的程序员
头发 最少

life is just a tradoff

7.23

技术掌握的多一点遇到问题的时候总是能有不同的手段吧
比如最近的一个问题,同样是实现多态,traditional的方法就是virtual function然后虚函数调用这样 但是原本的code写的比较固定 要想不改太多 又能实现功能 使用template声明一个新的参数也是可行的办法 自己就没有想到这一点 还是在有经验的程序员的提醒下使用了这个 省去了不少重构的麻烦

关于shared pointer和move还有copy constructor这些还是不够扎实吧 导致遇到问题的时候不知道要从哪里入手

paper的事情又又一点困难,之前的数据集不能使用,需要自己产生新的数据集,哎,有的时候都不敢回头看,觉得回头看的话,感觉又惨又凉,没有做成什么事情,只能硬着头皮往前走了。

intern了一点才发觉为什么之前总是做的很慢,如果你手里只有锤子的话,那么你看到所有的事情都是钉子,这也就说明为什么只前自己在实验室做的项目,最起码在工程上我觉得是有点失败的。

scientific的view和technical的view是相辅相成的,idea总是很简单,但是实现并不容易,比如之前想到的,deep learning与sumilation结合,然后做决策,同样的idea,national lab去做,就能发表science,但是自己去弄,就什么也弄不出来。

7.27

最近比较喜欢看的就是mr bean以及沈腾的喜剧了,乐一乐之后仿佛感觉都还好,也算是自得其乐不用想太多做的事情到底有没有意义,也不用羡慕别人这个那个可以专心一些在自己的事情上。

7.31

最近又在想programming的时候 回答这个程序为什么是这样而不是那样的时候 一种是面向数据的 一种是面向硬件的 所以要问问自己 当前的硬件以及数据是什么

比如有shared file system的时候 和comertial server的时候是共享配置的方式是不一样的 比如并行和single thread的时候programming的方式是不一样的

比如数据多的时候和数据少的时候programming的方式是不一样的

在programming之前 一定先问问自己 这份代码是target到哪个hardware上 然后 对应的data是什么 这样就是让程序更好地发挥hardware的效力 同时也确定好了数据的边界 不做错的和无用的事情

之前听wj老师的课程 有几个关键的点:用计算机做一些事 有一些事是需要平台的 比如之前弄的k8s以及openstack之类 或者说这些本身就是为cs的从业者服务的平台 作为个人来说 我现在的target就是cg以及data visulization 具体到cg里 又分成dynamic以及data structure,dynamic也不是我主要care的地方,自己主要care的地方,还是回归到vis的data structure以及算法上,比如对于不同的data 怎么能更有效地进行vis这个相当于是一个实用技能来培养 具体research的题目的话 还是从论文的不同角度来看

8.1

if some one ask me, what research are you doing? I could not answer this question very well. Maybe one of the reason is that I did not publish any paper even the common one. I don’t know why publish a paper is getting so hard at least for me.

This answer is getting closer now, 可能我会说 IO,workflow 在scintific application里面的应用,然后现在想转向到viz和rendering相关的内容 比如in-situ rendering 在长远的话想看看 viz 和 rendering 在其他领域的应用 比如medical computing的领域

回答这个问题的意义在于 应该精通什么 比如说 research IO 就应该精通那些IO的库 IO其实还挺general的 因为IO系统可以用在database以及pipeline中,像是streaming processing的引擎。实验室做的项目确实是有点鸡肋,就像是IO库到in-memory storage的半成品,花了两年时间才搞懂一些事情。对比到商用产品的话,应该是redis flink spark 这些结合起来 场景是scintific simulation。这玩意感觉自己research没有什么前途 除非是依靠大的资源 只能说先走走看吧 熟悉技术到时对以后找工作有用 可自己的方向总是换来换去 技术栈也是变来变去 总想学点能使用很久的 或者为以后做基础的内容

昨天想到了面向硬件与数据编程,自己回顾这些年来的场景,硬件与数据就是最缺乏的,似乎并没有dive into到核心的场景,所以有那种无力感也是自然的了。现在近的资源就是vtk这些可视化技术,作为一个切入点要深入弄下去了,要经常在脑子里问自己,硬件是什么硬件,数据是什么数据!!!

关于IO方面,今天又细看了下EVPath,数据流与控制流分开的design pattern确实是应该的 现在这个集成就是很成功 集成到ADIOS的代码中也是比较方便的那种 反观自己实验室的项目 多少有点鸡肋的感觉 定位不清楚 及其难维护 像是数据库和sreaming engin的中间产品 就一个很简单的问题就回答不好 如果writer能直接通过RDMA读取的话 为什么还要把它存在memory中呢???(现在想想又有了一些答案,比如burst buffer的使用,如果处理每个iteration的数据,consumer比simulation还要费时间的话,使用burst buffer就是很好的strategy,writer和reader之间完全decouple)

8.2

做事情之前还是要考虑一下影响力 然后想想 做一样的事情 怎么能让影响力最大化 比如之前已经做过的项目 然后怎么能把重点很好地展示出来 作为成果的一部分

虽然论文没投出去有点可惜 但是berk说的话还是有一些值得学习的地方 比如他说 仅仅有infrastructure 这个不能算作是paper 也就是说不要把infra和paper弄混在一起 infra可以用自己的也可以用别人的 在同样的infra的基础上可以有不同的工作 有idea的时候就想想怎么去实现 没有idea的时候就想想怎么去build自己的infra 然后熟悉其他的infra 毕竟在本领域内 熟悉的工具越多就越能实现更好的idea 要记住技术本身是为了实现idea服务的 那话说回来 比如说 你用铁锹铲雪 这不是research这是用已有的infra做了一件基本的事情 你把铁锹的头弄成了别致的形状增加了铲雪的效率 这就是research的idea了

简单说就是比原来更好 就说铁锹吧 你要是整一个论文 光说铁锹由木柄 铁锹头构成 这不算paper 切入点也不对 motivation不对 但是说 铲雪效率低 用铁锹铲雪可以提高效率 用不同的铁锹铲雪就效率不同 铲不同的雪用不同的铁锹效率不同 这就是research的idea 铁锹还是铁锹 但是motivation不同了 效果就不同了 自己的paper做不好 想想在本质方法上 偏差出现在哪里 evaluation是的部分 对照在哪里 metric是什么

总要问个为什么啊 就是说你造工具肯定是为了一个目的的 比如铁锹的铁锹头能造成菱形的 平行四边形的 圆形的 任意形状的 但是为为什么要是现在这样的呢 这就是motivation的地方了 一定是motivation在先 然后是metric 然后是implementation为metric服务 不要一上来就想metric 然后把事情弄的本末倒置了

换句话说 并不是新颖才好 而是有用才好 刚开始的时候 就容易跳入那种 新颖才好的误区 特别是有时候AI相关额项目

有好多时候就是 你自己碰巧弄了个圆形的铁锹 然后你就在论文里说 圆形的铁锹就是好 然后牵强地去找一个场景来 这样的论文当然就不够convincing了 属于力气用到了错误的地方,就比如chentianqi之间share的 常见的科学研究要么是问题驱动,比如「如何解决 ImageNet 分类问题」;要么是方法驱动,如「RBM 可以用来干什么」

铁锹的例子就属于后者 可以用来干什么

至于第一个,如何解决…分类问题,我感觉目前自己所接触的领域和层次,还没有什么没被解决的问题,只是说,解决的好不好,解决到了什么程度,所以时长论述就是这种套路: 主要问题是什么,有1,2,3,4,5种 track 在track1 上,有以前的方法1.1,1.2,1.3然后这个paper在1.1上又进行了改进,提升了效率,overhead是什么,适用场景是什么,本质上后面的,回答可以用来干什么,还是说解决了什么样的问题,在什么场合下(tradeoff)是比其他的方案更好的

还有一个research的方法就是控制变量法 这个可能对于自然科学比较有效 就是对照实验

0816

实习告一段落了,面对满地的杂乱,实在是提不起兴致和思绪收拾以及工作,不算差的经历,还要继续努力。要是让我一个人住的话,感觉一天都受不了,想想那些能自己在屋子里待好久的同学,也算的上是与众不同了吧。

8.18

回来到是不习惯了,觉得工位局促,显示器看着也不舒服。会不自觉地恢复到之前的状态。比如纠结的事情,没有解决的问题等等。这个时候要告诉自己不能够,毕竟实习这段时间之后有了一些新的想法和体会,要培养一些新的习惯。宁愿在lab里多待一会儿,大概是回去看到堆在地上的乱七八糟的东西心情就也比较乱,就是之前每次说的,在混乱中开始新的生活。虽然是同样的生活,但总是觉得要以新的状态来面对。

8.22

想必很重要的一点就是大概终于清楚自己做的是什么事情了,这个过程有花了2年的时间吧。之前一直觉的lab的项目是distributed in-memory storage library 会看好多distributed,indexing以及scalability的事情,可后来有一些实际的上手经验,发现更多的还是在I/O的层面上,就是所谓的加了一层cache,最后的目的还是为了I/O而服务的,而关于I/O一方面是面向数据,一方面是面向device,似乎之前的一些项目的motivation也变得清晰了。而scientitic的场景下,对于data storage好像也并没有很care。主要原因是simulation本身就是可以产生数据,所以之前的数据即使存下来也没什么实际的意义。或者真的要存,放在disk里就好啊,也没必要去进行in-memory的存储。那in-memory的场景到底有什么用处呢?结合industry的一些产品,还是real time的流式数据engine,这一块scientific data 的场景下似乎目前还没有什么成型的产品,可以朝着这个方向多考虑考虑。

reflection

想来在对于scientific data的认识上,在data structure的层面上与之前dataspace的时候考虑的最大区别,就是加入了mesh的信息应该怎么弄,在传递的时候 mesh info 以及 field info 是要分开进行的,在处理的时候,为什么普通的filter不能用呢?因为普通的filter没有mesh的信息在里面,只是单纯地对数据进行处理,这就是为什么要使用vtk-m的原因了,主要是scientific data的filter都是与mesh相关的,其他的data process engine并没有这个能力。和别人讲的时候,这一点要想清楚,可以从adios array, vtk-m 以及 vtk 三个不同的presentation来把这个问题说清楚,vtk-m和vtk本身的dataset到底不同在哪里也要说清楚。

推荐文章