Category Archives: 打工日记

1024个CPU核下的测试

  正在单位加班。所里新建的平台上有96小时独占机时,可以跑一些1024个CPU核的测试。机器跑起来了,等结果的空隙就上来敲点BLOG。

  这次测试,对pFind来说只是重复以前在曙光500A和升腾7000上的试验结论。昨天pFind引擎刚启动,系统管理员就报告他那边的性能监控服务里面, 各个节点的CPU占用率都满了。首先跑了一个热身任务,在腾冲嗜热菌数据上,设置了包括磷酸化在内的5个修饰,开300Da的超大误差窗口,跑了4小时,看来很稳定。上次超龙一号超级计算机硬件插电测试,用pFind烤机,随便跑跑,就报警说CPU过热。

  pNovo是第一次走这么大规模并行测试,一开始IO有点阻塞,换了OpenMPI,效果就好起来,1024核情况下加速比甚至超过pFind。

  pLink还没跑,估计比较麻烦,对于这种谱少,搜索量重的情况,负载均衡是个问题。早上开车去NIBS找yb拿pLink测试数据,他也在加班做试验。看到dmq老板也在加班赶deadline。

  前天为试验做准备的时候,发现系统里面现有的MPI库都被损坏了,不得不自己安装;另外发现集群的文件系统句柄数上限只设置为1024个,改为65536个。不禁怀疑此前使用和测试的课题组的测试认真程度,这些基础设施都有问题,能测多大规模的并行任务呢。不管别人如何,我这里不放卫星扯淡。其实吧,技术上到底是不是有货,很容易感受到,例如一起汇报的时候,工程师的气场就不一样。

  感谢各位同志们的帮助。

  最近挺累,但心情不错。上个月有一天晚上疲惫地回到家,吃完饭,抱着女儿哄她睡觉,“等你长大了,会发现世界的不完美,会郁闷,但是要相信,总可以找到值得托付的人和事”。她眼睛瞪得大大的,突然咧开嘴冲我笑。一瞬间,绷得紧紧的神经就放松下来。第二天,接到了纠结期盼已久的重要电话,总算熬过了最低潮的阶段。女儿是我的小福星。

zf的pParse论文接近发表了

  早上zf把Editor in Chief的来信抄送给组里,他的pParse论文接近发表了。我抢到第一个re邮件,表示祝贺。这篇论文的内容和zf这个人一样,踏实厚重。六年磨一剑,不容易。对手是红得发紫的MaxQuant又有什么了不起,在文中的几个数据集中,pParse效果高出10%。恭喜恭喜!

  “哪吒”系统里已经集成了pParse,前两天我刚刚在集群平台上实现了它的异步并行。它将和pFind、pBuild、pCluster、pMatch、pXtract软件一起成为哪吒三头六臂里的重武器。

  这消息来得太及时了,今天对hchi哥开玩笑说,看到zf的论文发表,我可以去死了。还是那句话:“joyfire的意思,如果zf愿意加入他的团队,他就有胆子去月球。”

  这两天开车上下班路上,都在听孙燕姿的《是时候》的CD。的确是时候了。

是时候

pFind网站发生故障

  服务器发生故障,导致pFind的网站无法访问,我们正在修理硬件。这期间用户无法注册下载pFind Studio 2.6产品。我非常抱歉。

  您可以先给pfind at ict dot ac do cn发一封邮件,咨询有关信息,索取软件注册的相关文件和表格进行填写。网站恢复后,我们会在第一时间通过邮件通知大家下载安装包。感谢朋友们一直以来对pFind的支持和帮助。

软件工程的经验教训

  很早起来开车送家人去医院看病。到单位的时候,牙齿还在打战,北京的天气凉下来了。这周安排和zk一起双人编程,他还没到,我先上来看看Google Reader写点BLOG。

  作为所里的内部培训师,我常被各个中心和课题组请去分享软件工程的经验。这是上周刚做完的一次报告的ppt。我会不断更新内容,感兴趣的同志可以隔三差五地关注我的工作主页的Technical Reports栏,下载最新版。

  收到越来越多的同事的邮件,和我讨论软件工程、系统架构和设计模式。作为国立学术研究机构,我们所处的环境的确不同于商业机构的软件研发团队。但从另一方面来说,总是有更多共性的问题在里面:如何挑选、培训和激励人才,如何做计划并执行……总可以做的更好,更有效率,更有成就感。

  我PPT里没深入写PM自己的心态问题。这是最近两年切身体会到的一个重点。软件项目压力很大,极端情况下,甚至会造成心理伤害。优秀的PM必须有器量和涵养,懂得欣赏优点,愿意信任同伴,既有发自内心的称赞,也有就事论事的提醒,还有开诚布公的道歉,在团队里营造出和谐的气氛来。如果碰到一个鸡贼刻薄的PM,大家心里充满恐惧和抱怨,就会只顾着关注PM想什么,逐渐丧失专业人士的主动性和独立见解。更深入点来说,是否愿意信任他人,也许正反映了PM本人内心深处的安全感。态度决定命运,对周围世界的基本看法,会决定一个人能否得到同事的尊重和喜爱。我最后悔的、常常反省的事,就是有几次在种种压力下冲别人吼,这往往有很大的负面影响。当然,人不是机器,情绪都是波动的,需要恰当的释放,也需要逐渐成熟。总之,PM要提高自我修养,防止负面情绪泄漏给无辜的同伴。

  刚好前两天网上到处都是创新工厂的那副“PM跪求研发”的图片,PM的心态好一点,项目就会顺利很多。zk来了,下次再聊。

PM跪求

PM跪求

哪吒和太空镜子

  上月底哪吒第一次对合作伙伴提供在线服务。开始和hchi哥、lyz美女折腾pFind@MapReduce。

  以前写过思路,pFind原本是一个计算密集型的应用,面对擅长IO密集型的MapReduce模型,不只是把MPI版本代码移植过去那么简单,要从根子上重新设计整个框架。刚好hchi哥经过近半年的思考和实验,在算法上有了突破性的点子,我们一拍即合,开始动手干。

  如果成功,pFind 3.0的架构就与信息检索领域的那些典型应用(例如Google搜索引擎)很像了,把目前的第一代蛋白质鉴定搜索引擎落下半里地。当然,刚开始做,有不少算法和工程问题需要啃。等待我们的论文和专利吧。

  晚上陪老婆在小区里散步,看天上的星星发呆。然后对老婆说:人类可以在太空里建立一面巨大的镜子,用来挡住北京城的阳光,天气就没那么热了;反过来,能挡住就能反射,可以向阴冷地区或夜间的灾区送光;再邪恶一点的话,能反射就能制造成透镜,当成武器,瞬间聚焦地面某个区域,甚至融化南北极……老婆没有照例说我是邪恶的理工科,而说,你该写本科幻小说赚钱。这念头并不新奇,估计已经有人写了,甚至申请专利也说不定(用Google搜索全球专利,会发现很多有趣的奇思妙想)。回来一搜,果然刘慈欣已经写了这篇《中国太阳》

  由这个链接,发现42qu已经上线新版本了

  说到刘慈欣的小说,还有一件事值得敲出来。小学二年级的外甥壮壮很聪明好学,喜欢读书。前两天发现他在读《三体》的第三本。刚开始觉得,对小朋友来说这是不是太黑暗绝望了。转念一想,别太低估他们的心智了。倒是发现周围有些成人很少深度思考,只顾着纠结眼巴前那点儿事,应该找机会跳出来读读超脱点的文字。

  想上来列书单,最近忙,原以为不会看太多新书。没想到一整理有十几本,还是太久没写BLOG。懒,明天再说。

LINPACK和WINE

  最近在忙哪吒提供在线服务的事。全都是配置集群节点SSH、NFS、MPI和编译安装各种库这种杂事。

  今天刚刚在集群上编译通了LINPACKATLAS两个数值计算的库。以前总在超级计算机排行榜的新闻里听到LINPACK的大名,这下有机会见识了。ATLAS编译时间好久,针对硬件做很多优化设置(Automatically Tuned)。本科学线性代数的时候总逃课去上网和编程,没学扎实。工作以后才发现,只要稍微涉及一点科研的事情,数值计算就缺不了。不懂这个的程序员,感觉工资都会少一截。连有关黑客电影都叫The Matrix。关于这个问题,参考孟岩2006年的经典BLOG《理解矩阵》

  移植工作的拦路虎之一是COM控件的问题。某质谱仪器公司的数据格式是私有的,必须用他们提供的控件去读。悲剧的是,他们只提供WIN32下的COM控件。上个月他们公司的软件部门负责人来中国访问,问他,答曰Win64很快会提供支持,但是Linux近期内不打算支持。悲剧呀。

  所以就在考虑如何在云平台里解决这个问题。一种方案是在用户的桌面导成公开的文本格式再上传,但是这样影响用户体验,尤其是对那些数据量很大的用户,数据导出(和校准过滤)本来就是他们使用云计算的可能原因之一;另外一种方案是在服务端放一台Windows,专门转换数据,或者更玄一点,用虚拟机伺候,以便维护和并行;最后一个方案是用WINE,这个能搞通,当然是最好的。

  还有若干软件的BUG等着解决。组里又都在忙着分析数据,四脚朝天,抓不到人手来帮我。哇哇哭。

  像上次说的,一旦干起来,就有大量实际问题要解决。奋力开路中。

敬畏自己的代码

  我一向对zf非常赞赏。zf在5年前刚来组里,不夸张地说,编程能力很弱。我记得是我告诉他应该用delete[]删除数组,而delete会导致内存泄漏。但是现在,同样不夸张地说,他写的每一行代码都是精品。BOSS H以前说:“joyfire的意思,好像如果zf愿意加入他的团队,他就有胆子去月球”,没错,我就是这个意思。

  为什么?简单统计了一下,zf总共提交了17万行代码(当然,我统计的方式很简陋,有很多代码在不同版本重复提交,也有很多是临时性脚本,和一线实战的工业级产品不同),他的pParse(包括此前的pCompare)大概进行了39个版本的迭代重构和不断改进。组里有很多编程天才,在SVN提交代码是爆炸式的(例如我经常惊叹,hchi哥能在一下午敲出我一周的满载工作量)。但zf是独特的,他在SVN里提交代码量统计,永远是一条平稳的直线,每天,每周,每个月……这家伙最让人感到恐惧的,就是近乎机械的执行能力。

  这不仅仅体现在他的代码上。我记得BOSS H有一次说他“过于内向,不敢发问,不善交流,会制约自己的发展”。那以后,我注意到,每次报告,无论规模场合和内容,zf必会举手向报告者提几个问题,一开始显得很勉强,时间长了,性格居然都变了。现在这家伙去全是老外的万圣节聚会上扮演凯撒大帝,谁敢再说他的内向障碍发展?BOSS H说,最早是在走廊上捡到个面试其他导师失败的彷徨考生,这么多年下来,zf教育了他这个导师。

  能进我们组的新生,很多都得过ACM或者各种比赛的金、银、铜、铁奖。但并不一定实现过真正实用的大系统,达到合格软件工程师的标准。前两天发邮件给全组,以zf为例子,建议大家踏实一点,敬畏自己的代码,最终有本事在pFind代码里,留下自己的长久印记。

“哪咤”系统第一个milestone明天组内alpha发布

  最近半个月和zf双人编程,全力开发“哪吒”系统

  和Web搜索引擎不同,pFind有自己的专业特点,最大特点就是要求尽可能高的查全率和查准率:平常Web搜索,大多数用户很少翻看三、五页以外更多的搜索结果。而对我们这个领域而言,质谱仪器原本就有很高的精度,数据集里那些含量稀少信号相对较弱的蛋白质,却往往正是科学家和医生们最重视的研究对象。pFind引擎有几十个参数,虽然很多默认推荐值经受过数百万数据的考验,但是在具体数据集上总会有优化的空间。

  也就是说,花费上万块钱成本得到珍贵实验数据,不能只拿pFind引擎常规参数“一搜了之”,需要进一步大量深入分析。例如过滤和校准质谱数据,极端情况下通过数据发现前端实验过程和仪器维护中的问题,回去重做实验;再如进行初次试搜之后,对鉴定结果进行统计分析,优化参数,改变选项,再进行迭代搜索;又如,利用多种搜索引擎交叉验证,甚至是多种方法结果的相互对比验证(例如常规的基因翻译蛋白序列库搜索引擎,最近新兴的谱库搜索,以及探索性最高的de novo算法)……

  每年iPRG国际评测中,使用同样搜索引擎的人,有排名前十位的,也有结果完全不像样子的。蛋白质组学的领军人物发表论文说:“赛车好,还需要王牌赛车手。生物组学领域的瓶颈目前是数据分析,而分析成果又很依赖优秀分析人员的经验”。像rxsun,yfu,zf,hchi,cliu等虾米,都是江湖上知名的质谱数据分析专家了。

  深入解析依赖人工工作大大降低了效率。随着pFind的进展,我们与越来越多国内外生物学家建立了合作关系。然而每月收到成T的数据,每周要提交的分析报告,海量的工作量,把所有人都压垮了,不得不放弃很多送上门来的合作机会和经费。

  数据解析的全流程自动化,国际上都在全力探索。例如现在红得发紫的Maxquant就做得不错。pFind组有不错的基础,由于有牛人yfu和他那一帮超常的算法研究天才在,我们在谱图搜索、de novo、修饰发现等等方面也有自己的独特之处。至于工程能力,生物实验室那些非计算机专业作者用C#写的桌面级别代码,要进一步拓展到大规模集群,甚至通过云计算提供在线服务,还差得很远。而这方面是计算所的长项。在超级计算机并行加速方面,我去年论文成果数据的可拓展性达到了320核,不谦虚地吹嘘,超过了全世界竞争对手目前为止公开报告数据效果一个量级,其实我已经做到了1000核,马上要做2000核。

  通过pFind云提供对外服务,这始终是我的梦想。为此努力了5年,今年终于开始着手了。也许,它能成为未来生物医药数据处理的基础构件之一。

  要建立实用的平台,就需要把方方面面的工作集成起来,解决大量很有挑战性的难题,例如单从并行加速这一个技术需求来看,不再像加速pFind搜索引擎这一具体环节这么简单,需要考虑整个流程各个环节的不同特点:在海量数据吞吐的地方,如全基因组翻译和索引,用得到MapReduce这一套;而打分鉴定这种95%CPU的工作,需要精心设计MPI类的程序;另一些特别的算法,例如de novo里面的动态规划,也许得考虑GPU加速……其实,加速还是最好做的事。

  加班很累,一写BLOG又兴奋了,也是最近密集开发,没空上网,想写的东西比较多吧。明天带“哪咤”的雏形出来见人,这个平台尝试把组里pFind、pBuild、pCluster、pMatch、pXtract、pParse、pNovo等等主力软件串联起来,无人值守的对海量数据进行尽可能全面的挖掘,我们希望听取各位的意见。

挤地铁、堵车和zf双人编程

  最近家里的网络有些故障,所以没怎么写BLOG。

  早上从家里到单位居然开了将近两小时,实在太堵了。沿路看到好多追尾、刮蹭的事故现场,交警叔叔真辛苦。

  09年以前,都是错开高峰坐地铁上下班,路上还能读小说。但被BOSS H骂,严令必须按时上下班,只好和别人一样7点出门,18点下班。地铁线路开通越多,感觉越像地狱。不止一次衣服被撕破,电脑背包带被拉断,背肌痉挛。去年10月的一天,不得不中途提前下车,找卫生间去吐,于是终于下了决心考照买车。刚买到,北京就摇号限牌了。和06年买房子一样,大家说我运气好,总能赶上趟。其实很多滋味只有自己知道。

每周限行那天,早上需要在天通苑地铁站入口的这个S形通道里煎熬40分钟

  

  这些天除了在超级计算机上调试新一版的pFind,就是和zf一起双人编程,构建一个平台,把组里pFind、pXtract、pMatch、pParse、pNovo、pBuild等等这些都整合起来。按照惯例,zf会给它起昵称,我想和zf商量叫“哪吒”,三头六臂,掌握很多种不同武器的样子。zf编程很老道,所以交流起来很放松。双人编程这事儿和很多合作一样,最关键要价值观一致,看到bad smell不肯妥协。同时越写越喜欢python,写出来的东西很干净。

  另外,老妈原单位一位同事的儿子突然猝死了,我记得比我小一点。上上周小曾跑pFind集群,周末加班没搞通,结果第二天就住院动手术了(人民纷纷血泪控诉我的压迫,这个,冤啊,真不是pFind集群折磨的……前几天和管理员一起安装Sector/Sphere的时候偷眼看了一下,他好像把$PATH环境设错了)。大家要注意身体。