tantan的博客

Notes, ideas, and observations

将机器学习应用于广泛多样的硬件设备的需求日益增长. 当前框架依赖于特定供应商的算子库, 并针对狭窄范围的服务器级 GPU 进行优化. 将工作负载部署到新平台–例如手机、嵌入式设备和加速器 (如 FPGA、ASIC) --需要大量手动工作. 我们提出了 TVM, 一种编译器, 它通过暴露图级别和算子级别的优化, 为深度学习工作负载在不同硬件后端提供性能可移植性. TVM 解决了深度学习特有的优化挑战, 例如高级算子融合、映射到任意硬件原语以及内存延迟隐藏. 它还通过采用一种新颖的基于学习的成本建模方法来自动化低级程序的硬件特性优化, 以快速探索代码优化. 实验结果表明, TVM 在低功耗 CPU、手机 GPU 和服务器级 GPU 等硬件后端上提供的性能, 与最先进的、手工调优的库具有竞争力. 我们也展示了 TVM 针对新型加速器后端的能力, 例如基于 FPGA 的通用深度学习加速器. 该系统已开源, 并在多家大型公司内部署使用.

基于日志布局合并 (LSM) 的键值存储 LSM 树如今被广泛用作现代 NoSQL 键值存储的存储层. LSM 树采用 out-of-place 范式来实现快速数据写入. 传入的键值对被缓冲在主存中, 并定期刷新到持久存储中, 形成 sorted immutable runs. 随着磁盘上 run 数量的增加, 它们会被排序合并, 从而构建更少但更长的 sorted runs. 这个过程被称为 Compaction. 为了便于快速查询, LSM 树使用辅助的内存数据结构 (Bloom Filter 和 Fence Pointer) 辅助减少每次查询执行的平均磁盘 I/O 次数. 由于这些优势, LSM 树被多个生产级键值存储系统采用, 包括 Google 的 LevelDB 和 BigTable、Facebook 的 RocksDB、阿里巴巴的 X-Engine、MongoDB 的 WiredTiger、Cockroach Labs 的 CockroachDB、LinkedIn 的 Voldemort、Amazon 的 DynamoDB、Apache 的 AsterixDB、Cassandra、HBase、Accumulo 以及 Yahoo 的 bLSM 和 cLSM. 基于 LSM 树的学术系统包括 Monkey、SlimDB、Dostoevsky、LSM-Bush、Lethe、Silk、LSbM-tree、SifrDB 和 Leaper.

主存容量的增长使得大多数数据库都能装入内存 (RAM) 中. 对于主存数据库系统而言, 索引结构的性能是一个关键瓶颈. 传统的内存数据结构, 例如平衡二叉搜索树 (BST), 在现代硬件上效率低下, 因为它们没有充分利用 CPU 缓存. 哈希表也常用于主存索引, 虽然速度快, 但仅支持点查询.

Thrift 是一个轻量级、跨语言的 RPC 框架,主要用于各个服务之间的 RPC 通信,最初由 Facebook 于 2007 年开发,2008 年进入 Apache 开源项目。它通过自身的 thrift (.thrift) 中间语言, 并借助代码生成引擎生成各种主流语言的 RPC 服务端/客户端模板代码。Thrift 支持多种不同的编程语言,包括 C++, Java, Python,PHP,Ruby, Erlang, Haskell, C#, Cocoa, Javascript, Node.js, Smalltalk, OCaml, Golang 等。

考虑构建一个用于回答搜索查询的网络索引系统. 该索引系统首先抓取网络上的每一个页面并进行处理, 同时在索引中维护一组不变规则. 例如, 如果相同内容在多个 URL 下被抓取, 则只有 PageRank 值最高的 URL 会被保留并出现在索引中. 系统会对每个链接执行反向链接处理, 使每个出站链接的锚文本被记录并指向其目标页面. 反向链接过程必须能够正确处理重复页面. 当链接指向某个页面的重复副本时, 这些链接应在必要时被重定向到 PageRank 值最高的那个重复页面.

一个完整的 Linux 操作系统包括多少个组件?涉及多少个 deb 包?如何从零开始构建一个最小化的 Linux 系统?本文将带你了解最小化 Linux 系统的构建过程, 涵盖内核, 引导加载程序, 基本工具链和必要的用户空间组件。

gettext 是 GNU 的国际化与本地化 (i18n) 函数库。它常被用于编写多语言程序。

0%