这个项目能做什么
Surogate 是一个 Apache 2.0 工具包,将 LLM 训练和部署整合在一个项目中,采用为 NVIDIA GPU 设计的原生 C++/CUDA 引擎。它面向 Linux x86_64、Python 3.12 和 CUDA 13(驱动 580+),以 wheel、安装脚本和容器镜像的形式分发。
训练引擎
训练侧涵盖预训练和全量微调、LoRA 和 QLoRA 适配器,以及包括 BF16、混合 FP8 和 Blackwell NVFP4 在内的精度方案。它支持带奖励环境的 GRPO 强化学习、DPO 偏好训练,以及从教师 top-K 分布进行知识蒸馏。多 GPU 和多节点执行使用线程化数据并行、ZeRO 分片、通信重叠和 Ray。流水线并行可以在没有 NVLink 的 PCIe GPU 之间为 LoRA 流式传输冻结权重。MoE 训练包括专家并行和负载均衡。内存控制包括对权重、梯度、优化器状态、激活值和量化值的 CPU offload,以及重计算和分块 MLP 执行。优化器包括 AdamW 8-bit 和 NorMuon,并支持 Weights & Biases 日志记录、检查点和恢复。模型通过带有提前自动微分的 Python DSL 定义。
服务引擎
服务侧是一个原生 C++/CUDA HTTP 服务器,提供兼容 OpenAI 的 Chat Completions、Completions 和 Responses 端点,以及兼容 Anthropic 的 Messages。它支持流式传输、独立的推理内容、思考控制,以及针对特定模型的函数调用解析器。并发特性包括连续批处理、分块提示处理、CUDA graphs、每个模型最多 128 个活动序列、前缀缓存,以及通过 MTP 或 DFlash 进行的投机解码。它加载原生 GGUF(K-quants、Q8_0、旧版和 IQ 格式)、Hugging Face safetensors 检查点,以及 BF16/FP8/NVFP4 导出。KV 缓存是弹性的,可以跨模型共享。运行时 LoRA 适配器可以加载并按请求选择。多个命名模型可以共享一个 GPU,并具有优先级和休眠/唤醒行为。大型模型可以跨多个 GPU 或 offload 权重到 CPU,并针对 MoE 系列提供 GPU 专家缓存。视觉和嵌入支持包括受支持视觉模型的图像/视频,以及 GPU 或 AVX-512 CPU 上的 EmbeddingGemma。运维特性包括 API 密钥认证、健康检查、Prometheus 指标、请求日志和缓存统计。
模型覆盖
训练示例涵盖 Qwen3 稠密和 MoE、Qwen3-VL、Qwen3.5/3.6 稠密和 MoE、Llama 3.1/3.2、MiniCPM5、Spark-X2.5、Gemma 4、Nemotron 3/Cascade 2、GPT-OSS、Laguna 和 LFM2/LFM2.5。服务涵盖 Qwen3、Qwen3.5/3.6/3.8、Qwen3.8 Flash-Next、GLM-5.3-Flash、Llama、Gemma 3/4、LFM2/LFM2.5、MiniCPM5、Spark-X2.5 和 EmbeddingGemma 300M。README 指出,DeepSeek-V4、Flash-Next 和 GLM-5.3-Flash 的训练定义仍有延迟实现的组件。
工作流
典型流程是:安装,使用 `surogate serve` 部署模型,通过 `surogate sft` 使用 YAML 配置训练适配器,将适配器合并到其基础模型,可选地量化为 GGUF,然后部署结果。单 GPU GRPO 模式可以将服务和训练共置,并为受支持的 BF16 LoRA 系列共享权重。
硬件说明
训练构建面向 SM89+(Ada、Hopper、受支持的 Blackwell)。FP8 需要 SM89+;原生 NVFP4 需要受支持的 Blackwell 硬件。默认服务构建面向 SM120a(RTX 50 系列和 RTX PRO Blackwell),另有一个 SM89/Ada 移植版本可以编译,但运行时验证尚待完成。分布式训练使用 NCCL;CPU offload 需要足够的系统内存。
README 提供了基准测试表,在特定硬件和工作负载上比较训练和部署吞吐量与 Unsloth、vLLM 和 llama.cpp;这些是项目自身的测量结果,应据此看待。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。