• 熟练使用小工具让自己从机械工作中解脱

    一直以来我都相信熟练地使用各种小工具能大大提升生产力,把人们从无聊的机械工作中解脱出来。昨天我就在做一些无聊的机械工作,正好这些技能就派上了用场。我觉得可以把它分享出来,或许就会有年轻人被安利了。

    Read on →

  • 为实验室建立公用GPU服务器

    需求的产生

    现在深度学习风生水起,为了满足人民日益增长的计算需求,相信各个实验室都开始买起了显卡。然而毕竟显卡还是贵,做不到人手一块,所以只能以公用机器的形式出现了。

    大家都在公用机器上跑实验,而各自所需要的软件(比如 Cuda、TensorFlow……)版本却可能不一样,这样很容易因为版本问题而导致程序无法运行。解决这些软件冲突问题是一个又繁琐又耗时的工作,而且常常弄得鸡飞狗跳,最终没有人可以正常运行实验。所以说,我们希望在公用的机器上能够有一定的管理,使得不同的用户不会相互影响。

    这里我列出一些需求:

    • 不同用户之间不能相互影响
    • 用户要能方便地访问自己的“虚拟机”
    • 用户要有足够大的权限,能自由地安装程序,能自由地访问网络
    • 用户不被允许直接操作宿主机
    • 用户要能够使用 GPU
    • 用户能够方便地使用实验室的 NAS
    • 为满足这些需求,额外的开销应该小得可以忽略
    • 管理员应该能轻松地添加新的用户

    下面我将叙述我解决以上需求的方法,以供有需要的人参考。本文的受众应该是实验室的公用机器管理员,有一定的 Linux 基础,或者对此感兴趣的普通用户。

    Read on →

  • Cython 基本用法

    我一直非常喜欢 Python。当人们提到 Python 的时候,经常会说到下面两个优点:

    1. 写起来方便
    2. 容易调用 C/C++ 的库

    然而实际上,第一点是以巨慢的执行速度为代价的,而第二点也需要库本身按照 Python 的规范使用 Python API、导出相应的符号。

    天壤实习的时候,跟 Cython 打了不少交道,觉得这个工具虽然 Bug 多多,写的时候也有些用户体验不好的地方,但已经能极大提高速度和方便调用 C/C++,还是非常不错的。这里就给大家简单介绍一下 Cython(注意区别于 CPython)。Cython 可以让我们方便地:

    • 用 Python 的语法混合编写 Python 和 C/C++ 代码,提升 Python 速度
    • 调用 C/C++ 代码

    Read on →

  • Python 多核并行计算

    以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称好了),觉得去折腾并行没啥意义(除非在做IO密集型任务)。然后自从用上了32核128GB内存,看到 htop 里面一堆空载的核,很自然地就会想这个并行必须去折腾一下。后面发现,其实 Python 的并行真的非常简单。

    Read on →

  • 在 Docker 中产生 Core Dump 文件

    首先简单补充一下 Core Dump 文件可以做什么吧。

    当我们程序崩溃的时候,除了看到 Segmentation Fault 之类的错误信息以外,很有可能在后面还有一句 (core dumped)。以前看到这些字眼都觉得很烦,因为程序崩溃了。但是后来,今年暑假在天壤实习的时候,看到金汶功学长的操作才恍然大悟,看到 (core dumped) 应该感到高兴才对,因为他把程序崩溃时的运行时信息完完全全地记了下来,包括他的整个内存、所有线程、堆栈信息、寄存器等等……这样一来就给找到 bug 提供了一条很好的线索。

    Read on →