与往年一样,2023 年的 InfoWorld 最佳开源软件奖评选了诸多令人惊叹且不拘一格的开源项目。在这 25 个获奖项目中,您会了解到和编程语言、运行时、应用程序框架、数据库、分析引擎、机器学习库、大型语言模型 (LLM) 有关的工具,以及至少一两个超出预期的项目。
在构建开放数据湖或湖仓一体时,许多行业都需要一个更可发展和可变化的平台。以出版商、广告商和媒体买家的广告平台为例——仅有快速分析是不够的。Apache Hudi 不仅提供了快速的数据格式、表格和 SQL,还使它们能够进行低延迟的实时分析。它是与 Apache Spark、Apache Flink 以及 Presto、StarRocks(见下文)和 Amazon Athena 等工具集成。简而言之,如果您想在数据湖上进行实时分析,Hudi 是一个非常不错的选择。
事实上,如果结果需要花费很长时间,开发人员一般不会在乎 “扩展性能” 是否好。而 Apache Iceberg 却兼备这两个优势。不仅能与 Hive 兼容,还能直接与 Apache Spark 和 Apache Flink 以及 ClickHouse、Dremio 和 StarRocks 等其他系统协同工作。Iceberg 可为所有这些系统提供高性能的表格式,同时支持完整的模式演进、数据压缩和版本回滚。它或许能成为许多现代开放数据湖的关键组成部分。
多年来,Apache Superset 一直是数据可视化领域的标杆。对于想要大规模部署自助服务、面向客户或面向用户的分析工具的人来说,Superset 似乎是唯一的选择。Superset 几乎可以为任何分析场景提供可视化功能,包括从饼状图到复杂的地理空间图表。它可与大多数 SQL 数据库对话,并提供拖放生成器和 SQL IDE。如果您要对数据进行可视化,Superset 值得您一试。
就在开发人员普遍认为 JavaScript 即将进入可预测的常规工作时,Bun 出现了。这个轻佻的名字掩盖了它严肃的目标:将服务器端 JS--运行时、捆绑程序、包管理器——所需的一切都集成到一个工具中。让它成为 Node.js 和 NPM 的直接替代品,但速度要快得多。这一简单的主张似乎让 Bun 成为了自 Node 推翻苹果购物车以来最具颠覆性的 JavaScript 工具。
Bun 的速度部分归功于 Zig(见下文),其余则归功于创始人 Jared Sumner 对性能的执着追求。您可以在命令行上立即感受到它的与众不同。除了性能之外,将所有工具集成在一个数据包中,也让 Bun 成为 Node 和 Deno 的有力替代品。
Anthropic 的 Claude 2 在单个提示中最多可接受 10 万个标记(约 7 万字),并可生成多达数千个标记的故事。它可以编辑、改写、总结、分类、提取结构化数据、根据内容进行问答等。虽然它在英语方面的训练最多,但在其他一系列常用语言方面也表现出色。Claude 还掌握了大量常用编程语言的知识。
Claude 从一开始就被训练的乐于助人、诚实、无害(HHH),并经过广泛的重新训练,变得更难产生攻击性或危险的输出。它不会根据您的数据进行训练,也不会在互联网上查询答案。美国和英国的用户可以免费下载 Claude 测试版,Jasper、Sourcegraph 和 AWS 等商业合作伙伴也已采用。
CockroachDB 是一个分布式 SQL 数据库,可实现强一致性 ACID 事务,通过实现数据库读写的水平可扩展性,为高性能、事务繁重的应用程序解决了一个关键的可扩展性问题。CockroachDB 还支持多区域和多云部署,以减少延迟并遵守数据法规。部署实例包括 Netflix 的数据平台,该平台有 100 多个 CockroachDB 生产集群,支持媒体应用和设备管理。主要客户还包括 Hard Rock Sportsbook、JPMorgan Chase、 Santander 和 DoorDash。
机器学习、数据科学、任务自动化、网络开发......都是 Python 编程语言具备的优势。但运行时性能却不是其中之一,不过这种情况正在改变。在 Python 3.11 和 Python 3.12 这两个版本中,Python 核心开发团队对 Python 解释器的参考实现 CPython 进行了一系列变革性升级。其结果是,Python 运行时对所有人来说都更快了,而不仅仅是那些选择使用新库或前沿语法的少数人。Global Interpreter Lock 是阻碍 Python 真正实现多线程并行的一个长期障碍。
OLAP 数据库很庞大,因为没有人会把 IBM Cognos、Oracle OLAP、SAP Business Warehouse 或 ClickHouse 描述为 "轻量级"。但是,如果您需要的只是足够的 OLAP--一个嵌入式、进程内运行、无外部依赖的分析数据库呢?DuckDB 作为一种分析数据库,它秉承了 SQLite 等小型但功能强大的项目的精神。DuckDB 提供所有熟悉的 RDBMS 功能——SQL 查询、ACID 事务、二级索引--但增加了分析功能,如大型数据集的连接和聚合。它还可以摄取和直接查询常见的大数据格式,如 Parquet。
HTMX 采用了开发人员们熟悉和喜爱的 HTML,并通过增强功能对其进行了扩展,使编写现代网络应用程序变得更加容易。HTMX 消除了用于连接网络前端和后端的大量模板 JavaScript。并且,它使用直观的 HTML 属性来执行任务,如发出 AJAX 请求和用数据填充元素。同类项目 Hyperscript 引入了类似于 HyperCard 的语法,简化了许多 JavaScript 任务,包括异步操作和 DOM 操作。总之,HTMX 和 Hyperscript 为当前的反应式框架趋势提供了一个大胆的替代方案。
Istio 是一个服务网格,可为基于容器的微服务简化网络和通信,提供流量路由、监控、日志记录和可观察性,同时通过加密、验证和授权功能增强安全性。Istio 将通信及其安全功能与应用程序和基础架构分离开来,从而实现了更安全、更一致的配置。该架构由部署在 Kubernetes 集群中的控制平面和用于控制通信策略的数据平面组成。2023 年,Istio 从 CNCF 孵化项目中毕业,在云原生社区中获得了显著的发展,包括谷歌、IBM、红帽、Solo.io 等公司的支持和贡献。
Kata Containers 结合了容器的速度和虚拟机的隔离性,是一种安全的容器运行时,它使用英特尔 Clear Containers 和 Hyper.sh runV(一种基于管理程序的运行环境)。Kata Containers 可与 Kubernetes 和 Docker 协同工作,同时支持多种硬件架构,包括 x86_64、AMD64、Arm、IBM p 系列和 IBM z 系列。谷歌云、微软、AWS 和阿里巴巴云是基础设施赞助商。其他支持 Kata Containers 的公司包括 Cisco, Dell, Intel, Red Hat, SUSE, and Ubuntu。最近发布的版本为 GPU 设备和抽象设备管理带来了保密容器。
LangChain 是一个模块化框架,可简化由语言模型驱动的应用程序的开发。LangChain 使语言模型能够连接到数据源,并与其环境进行交互。LangChain 组件是模块化抽象和抽象实现的集合。LangChain 现成的链是组件的结构化组合,用于完成特定的高级任务。您可以使用组件定制现有的链,也可以构建新的链。LangChain 目前有三个版本:一个是 Python 版本,一个是 TypeScript/JavaScript 版本,还有一个是 Go 版本。截至目前,已有大约 160 个 LangChain 集成。
当一个新的大型语言模型(LLM)发布时,您通常会看到一组评估分数,将该模型与 ChatGPT 在某个基准上进行比较。更有可能的是,该模型背后的公司会使用 lm-eval-harness 来生成这些分数。lm-eval-harness 由分布式人工智能研究所 EleutherAI 创建,包含 200 多个基准,而且很容易扩展。该工具甚至被用来发现现有基准中的不足,以及为 Hugging Face 的开放式 LLM 排行榜提供支持。
Llama 2 是 Meta AI 的下一代大型语言模型,与 Llama 1 相比,其训练数据量增加了 40%(2 万亿个来自公开来源的词库),上下文长度增加了一倍(4096)。Llama 2 是一个自动回归语言模型,使用优化的转换器架构。调整后的版本使用了监督微调(SFT)和人类反馈强化学习(RLHF),以符合人类对有用性和安全性的偏好。Code Llama 是通过在代码特定数据集上对 Llama 2 进行微调而训练出来的,它可以根据代码或自然语言提示生成代码和有关代码的自然语言。
Ollama 是一款命令行工具,可在 macOS 和 Linux 上本地运行 Llama 2、Code Llama 和其他模型,并计划支持 Windows。Ollama 目前支持近二十多个语言模型系列,每个模型系列都有许多 "标签"。标签是模型的变体,这些模型使用不同的微调方法以不同的规模进行训练,并以不同的级别进行量化,以便在本地良好运行。量化级别越高,模型越精确,但运行速度越慢,所需的内存也越大。
Ollama 支持的模型包括一些未删减的变体。这些模型是使用埃里克-哈特福德(Eric Hartford)设计的一种程序建立的,可以在不使用通常的防护措施的情况下训练模型。例如,如果您问 Llama 2 如何制造火药,它会警告您制造炸药是非法和危险的。如果您问未经审查的 Llama 2 模型同样的问题,它会直接告诉您。
既然我们已经有了著名的 Pandas,为什么 Python 还需要另一个数据框架重组库呢?但深入了解一下,您会发现 Polars 正是您要找的。Polars 做不了 Pandas 能做的所有事情,但它能做的事情都能以极快的速度完成——比 Pandas 快 10 倍,使用的内存只有 Pandas 的一半。来自 PySpark 的开发人员会觉得 Polars API 比 Pandas 中的深奥操作更容易上手。如果您正在处理大量数据,Polars 会让您的工作速率更快。
Tim Dettmers 和他的团队似乎肩负着一项使命,那就是让大型语言模型能够一切设备上运行。去年,他们的 bitsandbytes 库将大型语言模型的推理引入了消费级硬件。今年,他们转向了训练,将已经令人印象深刻的 LoRA 技术缩小到量化模型上。使用 QLoRA 意味着您可以在台式机上微调 30B 以上的庞大参数模型,与在多个 GPU 上进行全面调整相比,精度损失很小。事实上,QLoRA 有时甚至做得更好。低位推理和训练意味着更多的人可以使用 LLM——这也正是开源的意义所在。
RAPIDS 是一系列 GPU 加速库,用于常见的数据科学和分析任务。每个库都处理特定的任务,如用于数据帧处理的 cuDF、用于图形分析的 cuGraph 和用于机器学习的 cuML。其他库涵盖镜像处理、信号处理和空间分析,而集成则将 RAPIDS 带到 Apache Spark、SQL 和其他工作负载中。如果现有的库都不符合要求,RAPIDS 还包括 RAFT,这是一个 GPU 加速基元集合,用于构建自己的解决方案。RAPIDS 还可与 Dask 携手在多个节点上扩展,并与 Slurm 携手在高性能计算环境中运行。
Spark NLP 是一个自然语言处理库,可在 Apache Spark 上运行,支持 Python、Scala 和 Java。该库可帮助开发人员和数据科学家尝试使用大型语言模型,包括来自谷歌、Meta、OpenAI 等公司的转换器模型。Spark NLP 的模型中心有 2 万多个模型和管道可供下载,用于语言翻译、命名实体识别、文本分类、问题解答、情感分析和其他用例。2023 年,Spark NLP 发布了许多 LLM 集成、新的镜像到文本注释器,用于为镜像添加标题并支持所有主要的公共云存储系统以及 ONNX。
如今,公司经常向数百万并发用户实时提供复杂的数据。即使是 PB 级查询,也必须在数秒内完成。StarRocks 是一个查询引擎,它结合了本地代码(C++)、高效的基于成本的优化器、使用 SIMD 指令集的矢量处理、缓存和物化视图,可以高效地处理大规模连接。StarRocks 甚至能在直接查询数据湖和湖仓一体(包括 Apache Hudi 和 Apache Iceberg)时提供接近原生的性能。无论您是在追求实时分析、提供面向客户的分析服务,还是只是想在不移动数据的情况下查询数据湖,StarRocks 都值得您一试。
TensorFlow.js 将谷歌 TensorFlow 机器学习框架的强大功能打包到 JavaScript 软件包中,以最低的学习成本为 JavaScript 开发人员带来非凡的功能。您可以在浏览器、带有 WebGL 加速功能的纯 JavaScript 栈或服务器上的 tfjs-node 库中运行 TensorFlow.js。Node 库为您提供了相同的 JavaScript API,但运行于 C 二进制程序之上,可最大限度地提高速度和 CPU/GPU 使用率。
如果您是对机器学习感兴趣的 JS 开发人员,TensorFlow.js 显然是您的首选。它为 JS 生态系统做出了值得欢迎的贡献,让广大开发者更容易接触到人工智能。
vLLM 是最有前途的框架之一,它支持 Hugging Face 模型、兼容 OpenAI 的 API 和 PagedAttention 算法,该算法的生产量是 Hugging Face 变换器库的 20 倍。目前,它是为生产中的 LLM 提供服务的不二之选,FlashAttention 2 支持等新功能也在快速添加中。
GenAI 的蓬勃发展激发了对新型数据库的需求,这种数据库可以支持大量复杂的非结构化数据。矢量数据库应运而生。Weaviate 在部署模式、生态系统集成和数据隐私方面为开发人员提供了大量灵活性。Weaviate 将关键词搜索与矢量搜索相结合,可快速、可扩展地发现多模态数据(文本、图像、音频、视频)。它还有用于 RAG 开箱即用模块,可为 chatbots 和其他 GenAI 应用程序提供特定领域的数据,使其更加有用。
在当今所有的开源项目中,Zig 可能是最重要的一个。Zig 致力于创建一种具有程序级内存控制功能的通用编程语言,其性能优于 C 语言,同时提供更强大、更不易出错的语法。其目标是取代 C 语言,成为编程生态系统中的基准语言。由于 C 语言无处不在(即系统和设备中最常见的组件),Zig 的成功意味着性能和稳定性的广泛提高。这是我们都应该期待的。另外,Zig 是一个优秀的、老式的草根项目,有着巨大的抱负和开源精神。