-
熟练使用小工具让自己从机械工作中解脱
一直以来我都相信熟练地使用各种小工具能大大提升生产力,把人们从无聊的机械工作中解脱出来。昨天我就在做一些无聊的机械工作,正好这些技能就派上了用场。我觉得可以把它分享出来,或许就会有年轻人被安利了。
-
为实验室建立公用GPU服务器
需求的产生
现在深度学习风生水起,为了满足人民日益增长的计算需求,相信各个实验室都开始买起了显卡。然而毕竟显卡还是贵,做不到人手一块,所以只能以公用机器的形式出现了。
大家都在公用机器上跑实验,而各自所需要的软件(比如 Cuda、TensorFlow……)版本却可能不一样,这样很容易因为版本问题而导致程序无法运行。解决这些软件冲突问题是一个又繁琐又耗时的工作,而且常常弄得鸡飞狗跳,最终没有人可以正常运行实验。所以说,我们希望在公用的机器上能够有一定的管理,使得不同的用户不会相互影响。
这里我列出一些需求:
- 不同用户之间不能相互影响
- 用户要能方便地访问自己的“虚拟机”
- 用户要有足够大的权限,能自由地安装程序,能自由地访问网络
- 用户不被允许直接操作宿主机
- 用户要能够使用 GPU
- 用户能够方便地使用实验室的 NAS
- 为满足这些需求,额外的开销应该小得可以忽略
- 管理员应该能轻松地添加新的用户
下面我将叙述我解决以上需求的方法,以供有需要的人参考。本文的受众应该是实验室的公用机器管理员,有一定的 Linux 基础,或者对此感兴趣的普通用户。
-
Cython 基本用法
我一直非常喜欢 Python。当人们提到 Python 的时候,经常会说到下面两个优点:
- 写起来方便
- 容易调用 C/C++ 的库
然而实际上,第一点是以巨慢的执行速度为代价的,而第二点也需要库本身按照 Python 的规范使用 Python API、导出相应的符号。
在天壤实习的时候,跟 Cython 打了不少交道,觉得这个工具虽然 Bug 多多,写的时候也有些用户体验不好的地方,但已经能极大提高速度和方便调用 C/C++,还是非常不错的。这里就给大家简单介绍一下 Cython(注意区别于 CPython)。Cython 可以让我们方便地:
- 用 Python 的语法混合编写 Python 和 C/C++ 代码,提升 Python 速度
- 调用 C/C++ 代码
-
Python 多核并行计算
以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称核好了),觉得去折腾并行没啥意义(除非在做IO密集型任务)。然后自从用上了32核128GB内存,看到
htop
里面一堆空载的核,很自然地就会想这个并行必须去折腾一下。后面发现,其实 Python 的并行真的非常简单。 -
在 Docker 中产生 Core Dump 文件