SAGE-Flow(数据流/执行引擎)GPU 与硬件加速¶
SAGE 的数据流执行由 Engine 负责,将逻辑管道编译为物理执行图并在本地或分布式环境高效运行。 - 本地:多线程加速 - 分布式:通过远程环境运行(示例文档展示了在分布式环境提交作业),仪表盘支持 GPU 资源指标监控
Flow/Engine 本身不直接“持有” GPU 计算核,而是以两类方式利用硬件加速: 1) 通过服务:将需要 GPU 的能力封装为服务并在 Flow 中调用(如 vLLM 推理服务、SAGE-DB 作为 VDB 后端) 2) 通过分布式运行时:在具备 GPU 的节点上部署/调度上述服务与算子进程,使其绑定并使用 GPU
典型 GPU 加速路径¶
- LLM 推理:使用 vLLM 等 GPU 推理后端的服务(仓库文档提供了 LLMService 示例)
- 向量检索:使用启用 GPU 加速的 SAGE-DB 作为 VDB Service 后端(见 middleware/components/sage_db.md)
- 图/混合检索:由 Memory/Neuromem 编排 KV/VDB/Graph;VDB 段可利用 GPU
- 可观测性:仪表盘展示包含 GPU 在内的资源监控(README 展示了 GPU 监控与可视化)
编排示例(服务驱动的 GPU 使用)¶
在数据流中,只需要调用对应服务即可;GPU 的分配与使用由服务进程与后端引擎负责:
from sage.core.api.local_environment import LocalEnvironment
from sage.core.api.function.base_function import BaseFunction
from sage.middleware.services.memory import MemoryService
from sage.middleware.services.vdb import VDBService
env = LocalEnvironment("gpu_flow_demo")
env.register_service("memory_service", lambda: MemoryService())
env.register_service("vdb_service", lambda: VDBService())
class RAGStep(BaseFunction):
def execute(self, data):
# 向量检索(VDB 后端可指向 SAGE-DB GPU)
results = self.call_service["vdb_service"].search(
query=data["query_vector"], top_k=10
)
# 长期记忆交互(Memory 内部编排 KV/VDB/Graph)
self.call_service["memory_service"].store_memory(
content=data["content"], vector=data["query_vector"],
session_id=data.get("sid","default"), memory_type="conversation"
)
return {"hits": results}
分布式与 GPU 资源¶
- 运行时支持将同一份流图提交到分布式环境执行(仓库示例展示了远程环境的使用)
- 在分布式部署中:
- 将 GPU 服务(如 vLLM、VDB/SAGE-DB)部署到具备 GPU 的节点
- 数据流通过 Service API 访问这些服务,服务进程自行绑定并使用 GPU
- 通过仪表盘监控 GPU 与任务状态,结合批处理/异步,提高吞吐
性能与工程建议¶
- 服务粒度:
- 将 GPU 密集型能力统一封装为长生命周期服务,避免在算子内频繁初始化 GPU 上下文
- 批处理与异步:
- 在算子内使用 self.call_service_async 发起检索/推理批请求,减少阻塞
- 配合 SAGE-DB 的 numpy 批路径(add/search)大幅提升吞吐
- 数据搬运:
- 尽量合并请求,避免频繁的小数据量往返带来的 PCIe/NVLink 抖动
- 监控与扩容:
- 使用仪表盘观测 GPU 利用率与延迟
- 通过服务分片(shard)与副本(replica)扩展多 GPU 并发
- 容错与降级:
- 服务不可用或 GPU 饱和时,服务层可降级到 CPU/其他后端;数据流逻辑保持不变
参考: - Engine/RemoteEnvironment 的分布式示例(仓库 README) - GPU 资源监控与仪表盘(仓库 README) - SAGE-DB GPU/索引配置(middleware/components/sage_db.md) ```