shumai 是一个快速、网络连接、可微分的张量库,专为 TypeScript(和 JavaScript)设计,由 Facebook Research 构建,基于 Bun + Flashlight。它面向软件工程师和研究人员。注意:这是实验性软件。
主要能力:
- 提供标准数组工具,支持与 JavaScript 原生数组之间的转换。
- 支持可微分张量操作,具体支持的运算符可参考相关文档。
- 优先使用附加的 GPU 或加速器;CPU 计算使用 ArrayFire 的 CPU 后端,但优化程度不高。
使用方式: 安装步骤(仍在完善中):
- 安装 Bun(https://bun.sh)和 ArrayFire。
- macOS:使用 Homebrew 安装 ArrayFire(brew install arrayfire)。Linux:可使用包管理器(如 apt)安装 ArrayFire,或从源码构建。
- 使用 bun 安装包和底层库:bun install @shumai/shumai。
从源码构建:
- 需要从源码构建的依赖库包括 libflashlight 和 libflashlight_binding,可使用 npm pack 生成 @shumai/shumai_*.tgz 包,然后通过 npm install 安装。
- macOS:安装 ArrayFire CPU 后端,构建并安装 Flashlight,构建 Shumai 绑定。
- Linux:安装 ArrayFire,默认使用 CUDA 后端,也可构建 CPU 后端(OpenCL 支持即将到来),构建 Shumai 绑定。
支持的平台:仅 macOS 和 Linux。Windows 未官方支持,但可通过 Docker + WSL2 + Linux 使用,包括 CUDA 支持。
性能与统计:
- Bun 中的 FFI 绑定速度极快(约 3ns),适合快速训练小模型。
- 提供内存管理调优选项,如 upperBoundThreshold 可影响垃圾回收行为。
- 支持使用 StatsLoggerConsole 收集统计信息,StatsLoggerHttp 可用于跨线程、进程或主机收集统计。默认禁用堆栈跟踪(可启用,但会增加 50% 以上开销)。支持作用域统计。
适用场景:
- 创建数据集:利用 JavaScript 的原生类型数组和 JIT 编译器,方便处理数据并转换为 GPU 兼容的大扁平数组。
- 快速训练小模型:FFI 绑定速度快,JS 不会成为瓶颈。
- 高级/细粒度训练/推理逻辑:Bun 使用 JSC JIT 编译器,可编写复杂训练逻辑,无需原生 C++ 实现。
- 构建应用:JavaScript 生态系统庞大,便于开发应用。
限制:
- 实验性软件,安装过程可能存在问题,遇到问题需提交 issue。
- 仅支持 macOS 和 Linux,Windows 未官方支持。
- CPU 计算使用 ArrayFire CPU 后端,优化不佳。
- OpenCL 后端和其他非 ArrayFire 张量后端尚未支持。
许可证:MIT。