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