容错、书单、pFind和pNovo的国际初show

  今天加班有点累。掐着点坐末班地铁回到家。喝水休息。又好一点了。上来随便敲点,放松一下。

  wyj美女正在跑超大规模的实验,我要帮她完成一部分。但最近时间紧张。今天索性抓她一起完成,交叉检查避免疏漏。到晚上22点,384组实验的参数总算全设置完了,我们都接近崩溃。然而,跑起来,集群速度不正常。瓶子帮忙检查了好久。有些灯枯油尽,又要赶地铁,明天再继续。

  感觉是硬件问题。最近某个节点似乎一直在“带病坚持工作”:也不彻底死机,就是超级慢。遇到这种问题Google系统的常规做法是把长时间“不归队”的节点放弃掉,将其任务重新平分给其他各节点。pFind目前对此还没啥特别措施,Mascot、SEQUEST和X!tandem等竞争对手的集群版也没考虑。

  可用性应该是云计算设施的基本要求,也许比速度甚至精度还重要。算算概率,Intel
CPU理论上连续运行10年出现一次浮点计算错误,这就意味着上千核的集群每2小时就错一次(还没考虑其他更容易出问题的部件)。也就是说,在大规模的廉价商业集群上长期运行的软件,必须把硬件错误当作常规事件,考虑对应的鲁棒性设计。Google就强调GFS、MapReduce和BigTable的最牛之处并不是峰值速度或数据吞吐量,而是其在廉价集群硬件上的稳定性和容错能力。

  跑题,列点最近几天新买的书:《Search Engines — Information Retrieval in Practice》《Out of Mao’s Shadow》《一九八四》《伊斯坦布尔——一座城市的记忆》《一个人的电影》。发现前两本英文书居然看得最快。第二本书,是hchi去美国参加RECOMB Satellite Conference on Computational Proteomics 2010给带回来的。走之前他问我要带什么。我随口说:“带本书吧”。结果他就千里迢迢从美国带回来一本华人写中国的英文书。我该早预计到这个结果的。当然,书是好书,还是要感谢。

        

  顺便自豪一下:这次rxsun老大参加iPRG 2010磷酸化数据鉴定评测,pFind引擎在全世界人民面前一鸣惊人了一把。而hchi哥的pNovo更是让de novo算法的主流人物服气了。(伟大的hchi哥进入de novo领域才半年,真快。)

CUDA、婚礼和历史

  三月份很忙,又都是些琐碎应急的事,没太多可记。前几天参加了中科院超级计算中心的《基于GPU的并行计算及CUDA编程》培训。技术上的总结,稍后专门写BLOG。

  没空逛书店。翻出一直束之高阁的《一六四零年英国革命史》《书趣》开始读。有一晚特别疲惫紧张,失眠,到书架上找,发现买回来一直没动过的《书趣》,塑料薄膜还没剥掉呢。翻开第一篇《书的婚事》,陷进去读完,然后轻松地睡着了。下面这段,每次读都要笑出声来:

  乔治终于顺从了,但与其说是思想上接受,不如说是照顾婚姻的和谐。然而,一个要命的时刻来临了:他正在把我的莎士比亚转到另一个书架时,我喊了一声: “别忘了按年代放!”
  他倒吸一口气:“你的意思是要每个作家内部也按年代摆放吗?可没人能肯定莎士比亚写剧本的时间!”
  我吼道: “他写《罗密欧与朱丽叶》比写《暴风雨》的时间早,我要把这些也在书架上表现出来。”
  乔治后来说,他很少郑重考虑离婚,这就是其中的一次。

  一直想买本顾准的《希腊城邦制度》原版收藏,到处找不到。zhw同学说,这种绝版书淘宝上一定有,热心帮我搜索下订单。昨天书到了,果然是社会科学出版社1982年3月的版本,当年定价0.67元,年头久纸张微微发黄,但品相整洁。感谢政府,感谢党,感谢zhw,感谢淘宝,感谢伟大的长尾理论。

  最早读这本书是初中时代。从老妈书架偷出来,提心吊胆地看了一段。当时只是感到内容很清新。现在重读感触更深。在1975年最黑暗的时代,还能做如此冷静、独立而深入的研读和思考,真是我辈的圭臬。有些话现在看还是很讽刺,例如几千年前亚里士多德的《政治学》对僭主的描述:

  少数人统驭全邦所有与之同等或比他更有才德的人民,施政专以私利为尚,对人民的公益毫不顾惜,而且也没有任何人或机构可以限制权力……永不录用有自尊心和独立意志的人。

  顾准难以接受亚里士多德的判断:“东方蛮族比希腊民族更富奴性,所以他们常常忍受专制而不敢起来抗争”。他进行了客观思考:

  春秋战国时代,正当我国历史转变的关头,但是从殷商到西周、东周长期“神授君权”的传统,已经决定了唯有绝对专制主义才能完成中国的统一,才能继承发扬并传布中国文明,虽然这种专制主义使中国长期处于停滞不前,进展有限的状态之中,但这是历史,历史是没有什么可以后悔的。

论文最终稿submit了!

  刚登录到RCM网站提交了论文的第二次Revision。最终是第29稿,截图纪念。等编辑的最终决定。始终紧绷着,把身体搞垮了。瓶子也在纠结中挣扎。到今天算是告一段落,熬过去了。晚上吃西湖醋鱼,心情不错。回来路上突然有强烈的疲惫感,的确该放松放松了。

  又回来补:原本周末有些私人安排,没想到明天还得面试人。哇哇哭。

  明白三十岁是啥情况了:不会被轻易忽略,也不会被轻易优待,你就是主力、主流、主干……拥有儿童时代梦想的所谓“成人”的自由、地位和资源,但不再拥有借口。

pFind引擎内核建立Trace机制

  必须上来写点,否则对不起订阅BLOG的读者了。

  这周我们封闭开发,重构pFind引擎内核引入Trace机制。我预研了Log4cppACE_TRACE的源码,还是决定自己动手实现底层机制,更贴近pFind系统的实际要求。

  像pFind这样的复杂系统,不免有大量输出信息,有些是给用户看的,有些是程序员调试时用来追踪进度和现场情况的。传统做法,调试信息会被用宏开关控制,产品发布时被关掉,以免输出过于庞杂导致用户体验变差,但这又会增大事故现场诊断Bug的困难。要调和这对矛盾,就需要灵活的Trace机制,通过设 置参数实时控制输出,例如范围(指定的算法模块、线程或集群节点)、级别(过滤或保留debug信息)和目标(命令行输出或写入日志文件)。

  这种基础设施涉及到整个系统,大部分模块都需要重构,工作量不小。在Win32下开发调试比较顺利,移植到曙光大机的64位Suse Linux时,出现了一些动态链接问题,调整了模块划分。(为了解决这个问题,去查阅俞甲子、石凡和潘爱民的《程序员的自我修养——链接、装载与库》,的确是好书。)

程序员的自我修养

  遇到了Gcc 3.4.5的这个Bug,编译STL总会出现大量Warning。从GNU Bugzilla上的讨论来看,Gcc 3.*系列的维护已经停止了,推荐升级到4.*系列。一直想升级pFind的默认编译器,但之前尝试时,ACE在Gcc 4.4(MinGW)下无法正常编译(刚刚搜索,貌似今年1月份刚刚有人把这个Bug解决掉了)。像陈硕这篇BLOG说的,ACE很值得学习借鉴,但代码臃肿,有很多使用问题。

  在重构后期,大家已经开始利用Trace本身进行调试。“吃自己的狗食”是个好现象。

  建立Trace机制、升级Gcc消除Warning,都是为单元测试(Unit Test)和持续集成(Continuous Integration)做准备。自动化测试是我今年的重点目标。衡量一个团队有多精锐,不在于统计技术牛人的个数,而要看它是否拥有超出平均水平的制度 平台。我发现凡是不用版本管理(SVN、CVS或VSS均可)的软件开发组都很烂,甭管团队里有多少能工巧匠。前瞻研究实验室年度汇报,听到浩哥讲Godson-T的开发,他们就构建了很强大的自动化测试平台,让人不服不行。

  还在考虑为pFind引擎构建“黑盒子”机制,把一段时间内的系统实时状态都记录下来,用以重现事故现场。云风做过类似的设计。不过这样一来,如何保证运行效率就成了关键问题。

  这周很累,但有成就感。接下来折腾RCMS论文,19日deadline。大家的批改纷纷返回,多谢,汇总中。

拿着马桶搋子的疯狂兔子

  没按承诺写BLOG总结新人工程的培训经验,忏悔,稍等几天。

  论文Revision终于收到邮件,继续Major Revision,编辑和评审人都说俺英语烂,开始第23稿。

  我和hchi都没顾上申请专利,他要赶在去美国做报告之前,而我要赶在论文正式发表之前。

  昨天早上家里马桶堵了,杀到建材市场买到高科技的真空搋子,搞定,然后奔到单位上班。

  像WII里拿着马桶搋子的雷曼兔子(Rayman Raving Rabbids),疯狂忙碌中。

toy61.com购物体验

  和昨天一样,单位没什么人。午饭前上来敲点东西。

  我是emileyuan的博客的长期粉丝。以前说过,有机会一定要去她店里买玩具。她最近建立了电子商务网站toy61.com,前两天拜年需要给小朋友买礼物,就去体验一下。

  浏览网站,感觉开发人员的技术能力不弱。春节前一周定了“迪奇集装箱卡车”,下单后送货及时(北京地区)。玩具本身令人满意。

  有些细节值得注意:

  1. 导航,区分不同需求(例如性别和年龄)想法很不错。可功能实现并不细,仍然得点N次鼠标才能找到合适的玩具。缺少更实用高效的搜索或向导。
  2. 说明,图片不清楚,文字也有点乏味冗长。
  3. 购物车,商品不会自动过期。过几天再来,如果这种玩具已无库存或不再销售,它条目还在购物车里,点进去显示“该页面不存在”。
  4. 结款,“满200元免快递运费”。但快递运费不会自动计算和扣除,得由用户手动去掉。没有明确提示,用户会犹豫,怕去掉就变成“平邮”。
  5. 收货,打开盒子,保护玩具的泡沫塑料纸没裹上,而是塞在旁边。还得检查玩具没有损伤才敢签收。

  搭起网站框架,应用先进的IT技术,建立整套物流体系,这还不直接等于用户很舒心。希望toy61.com不断完善,让我们享受到更多为小朋友购买玩具的乐趣。

开始工作了

  今天来单位上班。同事和研究生们大多还没回来,所以办公室显得很清静。踏下心来处理一些琐事,收心,找状态。午饭之前上来记录几笔。

  1. RCMS论文的Revision,昨天有动静,网站状态目前是Evaluating Recommendation。估计下周一收到结果。纠结。不过折腾了这么久,也有点麻木了。
  2. 接下来,我和瓶子开始在千核集群上实现更大规模的并行。还要试验GPU加速。
  3. 马上会访问很多家合作伙伴,给生物学家安装最新版的pFind Studio。
  4. 上半年,会发起一次封闭开发,建立自动化编译和测试的环境,最终实现pFind和pBuild内核的Daily Build。目前我们软件工程的重点目标,就是实践“持续集成”这一条。
  5. 本科教育缺乏工程实践,即使是ACM竞赛金银奖的王牌选手,面对真正产品级的编码要求,也显得稚嫩。因此培训新人成为重要课题。大家鼓励我分享经验。计划2月底写点。昭告天下,断自己后路。

  平心静气,开始干活了。

  BTW 1:纽约时报刚发的这篇新闻忒雷人。

  BTW 2:昨天看电视,韩乔生和英达搭档解说冬奥会冰球比赛,太好玩了。

过年的娱乐

  过年好。

  昨晚和朋友去保利剧院,看俄罗斯克林姆林宫芭蕾舞剧院的《费加罗的婚礼》。我们网上订的是二楼比较便宜的位置,由于一楼没坐满,所以幸运地得到了“升舱”。以前没在现场看过芭蕾舞,还担心能否消化。实际看起来很轻松,时不时为幽默的表演笑起来。

  老妈大年初二要去中山公园音乐堂看京剧。3月份还要飞到上海看张火丁的戏(灯谜们热情洋溢,前两天俺在网上给她抢票,那叫紧张惊险呀)。

  今天又去买了一尊巨大的礼花。贴照片。