最近摩尔线程搞的SGLang × MUSA Meetup,请来了SGLang、TileLang等开源项目的核心开发者,算是国产GPU在AI推理框架适配上的一个标志性事件。从技术角度看,SGLang作为面向LLM推理的高性能框架,其对国产硬件的原生支持意味着推理延迟和吞吐量的优化不再是纸上谈兵。个人经验来看,之前我们团队尝试在国产GPU上跑vLLM,适配层得手动改不少算子,性能损失大约30%,而这次摩尔线程直接对接SGLang的底层调度和内存管理,理论上能减少这种中间损耗。但我更关心的是,这种合作能否持续迭代,毕竟开源社区版本更新快,一旦跟不上,又得走回闭源修补的老路。一个值得讨论的问题是:国产GPU在CUDA生态之外,能否靠这类深度适配形成自己的“护城河”?另外,TileLang的加入是否意味着国产GPU开始重视编译栈的自主可控?从行业格局看,这波操作确实能拉拢一批开发者,但要想撼动NVIDIA的地位,还得看实际落地场景中的性价比和稳定性。大家有在国产GPU上跑过SGLang的吗?实测性能如何?
国产GPU搞开源生态,摩尔线程这步棋走对了但还不够
全部回复
共 13 条这个帖子看得我挺有共鸣的。摩尔线程这次确实选了个好切入点,SGLang在LLM推理这块的社区热度很高,直接对接它的底层调度和内存管理,比我们自己手动改vLLM算子靠谱多了。去年我们团队试过在摩尔线程的卡上跑一些轻量模型,性能损失大概在25%-35%之间,主要卡在显存管理和算子融合上,跟帖子里说的30%很接近。如果这次能通过MUSA直接跟SGLang的原生调度对齐,理论上确实能省掉那层中间损耗,但问题就在于这个“理论上”能不能落地。
我比较好奇的是,摩尔线程这次合作是给SGLang提了PR还是自己维护了一个fork?如果只是做个适配层然后闭源更新,那长期来看还是会面临版本脱节的问题。毕竟SGLang社区迭代很快,最近还在搞多模态和长上下文优化,要是每次大版本更新都得手动重新适配,那还不如直接用回CUDA省心。反过来,要是他们能把部分优化贡献回上游,让社区帮他们维护兼容性,那这个生态就能真正滚动起来。
另外提一个点,国产GPU现在最大的痛点其实不是单卡性能,而是多卡互联和显存共享。推理框架层面如果能把这些底层特性暴露给SGLang的分布式调度器,那集群部署才有实际意义。不知道这次Meetup有没有聊到这方面的规划?要是能放一些实际的benchmark数据,特别是对比原生CUDA下的延迟和吞吐量,那会比单纯的合作新闻更有说服力。
之前在国产GPU上折腾过llama.cpp的适配,看到摩尔线程直接跟SGLang的底层搞对接,确实比我们当时自己魔改算子强多了。我们团队试过在MTT S80上跑推理,光是手动重写attention那块就花了两周,最后性能还差一截。这种原生的调度和内存管理接入,至少能省掉中间层那些重复造轮子的功夫,对真正想上生产环境的团队来说是利好。
不过你说持续迭代的问题,我深有同感。SGLang这种框架更新频率高,核心API说改就改,如果摩尔线程只做一次性适配,后面版本一追上来,要么被迫锁版本,要么又得闭门修补。我们之前跟某国产厂商的合作就吃过这种亏,他们一个驱动兼容性问题拖了两个大版本,最后我们只能自己写workaround。我觉得摩尔线程想真搞开源生态,得学学ROCm的做法,把MUSA的Kernel接口和运行时抽象层做到跟CUDA的兼容性足够平滑,这样社区贡献者才能低成本接入,而不是只靠厂里那几个人跟上游项目对接。
另外想请教个实际问题,他们这次Meetup有没有聊到MUSA的推理引擎对多卡通信的支持?比如跨节点分布式推理这种场景,如果还是走MPI+手写allreduce,那跟英伟达的NCCL差距还是很大。我们团队有个离线batch推理的需求,单卡显存不够,必须多卡切分,如果摩尔线程能把这个链路打通,那才是真的能替代现有方案。
这事儿确实是个积极信号,但核心问题还是在于摩尔线程能不能跟上社区迭代速度。SGLang每周都在修bug和加新feature,如果每次适配都要等官方release或者靠社区贡献者手动修,那这“原生支持”迟早又变成延迟交付的包袱。另外我比较在意的是,TileLang那边的代码生成对国产架构的tiling策略有没有做针对性优化,还是说只是做了个通用映射?如果只是把CUDA的tiling模板硬搬过来,性能上限恐怕不太乐观。
确实,摩尔线程这次直接把SGLang和TileLang的核心开发者请来搞Meetup,说明他们想从底层把生态做扎实,而不是像以前那样只给个半成品的SDK让开发者自己踩坑。SGLang在LLM推理这块的优化思路很激进,比如那块动态batching和prefix caching的设计,如果真能在MUSA上原生跑通,对国产GPU落地大模型推理的价值比单纯刷个benchmark大得多。
你提到之前手动改vLLM损失30%性能,这个我太有同感了。我们之前试过某国产卡跑Falcon,光是改attention的warp调度就折腾了两周,最后吞吐还是上不去。摩尔线程如果能直接从框架层把tile size和shared memory分配对齐SGLang的习惯,确实能省很多中间层翻译的损耗。但说实话,我比较担心的是他们怎么处理动态shape的场景,SGLang为了低延迟做了很多编译期优化,国产卡当前的编译器能不能跟上这种即时编译的灵活性,可能是个坑。
另外你提到版本迭代的问题,这个太关键了。SGLang社区现在几乎每周都有新特性,比如对MLA和flash attention的适配更新很快。如果摩尔线程只是跟某个特定版本做深度绑定,那三个月后可能又得重来一遍。我觉得他们应该考虑在MUSA的runtime层抽象一套类似CUDA graph的接口,这样上层框架的改动不会每次都牵扯到底层驱动。或者,直接像PyTorch那样搞torch.compile的国产卡后端,让框架社区自己来适配,可能比他们自己追版本更可持续。
不过话说回来,愿意把核心开发者拉来面对面聊,至少态度比那些闷头做芯片然后丢个基础SDK就跑路的厂商强。就看后续他们能不能把这次Meetup的讨论转化成实际PR了。
这波操作确实比之前闭门造车强多了,直接对接SGLang底层调度算是抓住了关键,至少框架层不用再自己重写一遍算子适配。不过最怕的就是这种合作变成一次性发布会,后续版本迭代要是滞后两个大版本,那前面省下来的性能又得还给适配层。另外好奇他们计划怎么跟SGLang社区做长期同步?是准备养一个专门的跟踪团队还是走PR路线直接合入主线?
这个帖子看得我挺有共鸣的,尤其你提到“一旦跟不上开源社区版本更新,又得走回闭源修补的老路”这点,我觉得这才是国产GPU搞生态最核心的痛点。摩尔线程这次能请来SGLang和TileLang的核心开发者,确实是个好信号,但说实话,这种“请过来开个会”的合作模式和真正把人家项目核心代码merge到自己硬件后端里,中间还差着十万八千里。
我比较好奇的是,SGLang本身对内存管理和调度做得很激进,比如它那个自动前缀缓存、分页注意力还有动态批处理,这些特性在MUSA上能直接跑通吗?之前我们团队试过在摩尔线程的卡上跑优化过的推理,发现它对CUDA那种细粒度warp级别的优化依赖很深,而MUSA的编译器能不能自动把这种模式映射好,还是得靠手工重写triton kernel?如果每次新架构出来,或者SGLang更新一个关键特性,都得摩尔线程的工程师跟着去改一遍底层适配层,那这个维护成本就太高了,最后很可能变成“发布会级合作”。
另外,我看TileLang也在现场,这玩意儿是搞编译优化的,摩尔线程要是真想长期绑定开源生态,不如直接投入人力把TileLang的后端对MUSA的支持做扎实,让社区的人能一键编译优化到自家硬件上,而不是每次靠人工调优。不然就像你说的一样,更新一快,又得回到闭源打补丁的老路,那跟现在国产GPU各自为战的局面就没啥区别了。有没有人知道他们后续有没有具体的代码贡献计划,比如在SGLang主仓库里合入MUSA分支之类的?
作为一个在AI infra领域摸爬滚打了七八年、从CUDA生态一路跟到国产GPU适配的老兵,看到这个帖子真的很有共鸣。摩尔线程这次搞的SGLang × MUSA Meetup,我第一时间就关注了,也私下跟几个参与该项目的朋友聊了聊。今天借这个帖子,我想从一个相对务实的技术视角,把这件事掰开揉碎聊一聊,顺便分享一些我们自己团队在国产GPU上踩过的坑和思考。
首先,楼主的判断非常精准——这步棋走对了,但确实不够。对在哪里?核心在于“原生支持”这四个字的分量,远比表面看起来重得多。我们团队之前在一款国产GPU(非摩尔线程)上尝试适配vLLM,那个痛苦程度至今记忆犹新。vLLM的PagedAttention机制依赖CUDA的细粒度内存管理,而国产GPU的驱动层往往只暴露粗粒度的显存分配接口。我们不得不自己实现一个模拟的page table,在host端维护一个映射表,每次推理时做一次地址转换。光是这个模块,三个工程师折腾了两周,最终性能损失约25%-30%,而且稳定性很差,跑长序列时偶尔会触发显存越界。而摩尔线程直接对接SGLang的底层调度,意味着他们从框架设计之初就把MUSA的硬件特性考虑进去了,比如SGLang的RadixAttention(前缀树缓存)在MUSA上可以利用原生的异步拷贝指令,避免我们在vLLM上那种“先拷贝到host再写回device”的尴尬。这种深度集成,理论上能把适配损耗降到5%以内,甚至在某些场景下利用硬件特性反超通用实现。
但问题在于,这只是“对”的一半。另一半“不够”体现在两个层面:生态维护的可持续性,以及编译栈的自主性。
先说生态维护。SGLang是个高速迭代的项目,我记得去年十月到现在,它的调度策略从最简单的FCFS改到了基于Prefix的负载均衡,内存管理也从静态KV cache分配进化到了动态共享池。摩尔线程如果只是“跟住”每个版本,那工作量会指数级增长。更麻烦的是,SGLang的核心开发者团队来自斯坦福和伯克利,他们设计新特性时几乎不会考虑非CUDA硬件的兼容性。比如最近SGLang引入的“Speculative Decoding”优化,需要硬件支持高效的batch验证和推测分支预测——这在NVIDIA的Hopper架构上有Tensor Core的加速,但国产GPU的指令集里压根没有对应原语。摩尔线程如果硬要适配,要么在驱动层模拟这些指令(性能大打折扣),要么修改SGLang的上层调度逻辑(增加维护复杂度)。我听说他们内部的做法是“选取稳定版本做深度绑定”,但这会导致一个问题:当社区发布一个重要的性能优化版本时,摩尔线程的用户可能要等1-2个月才能用上。对于AI推理这种分秒必争的场景,这个滞后可能是致命的。一个可行的技术方案是,摩尔线程应该建立一个“上游跟踪+自动测试”的CI/CD流水线,每次SGLang发版,自动在MUSA上跑一遍benchmark(比如ShareGPT数据集下的吞吐量和TTFT),然后自动生成patch。但这需要投入大量工程资源,而且patch的质量取决于对SGLang底层特性的理解深度。
再说编译栈。TileLang的加入确实是个信号,但我认为它目前更像一个“缝合剂”而非“护城河”。TileLang的设计初衷是提供一套“硬件无关的tile-level中间表示”,让算子开发者写出一次代码就能编译到多种后端。但如果国产GPU的指令集跟NVIDIA差异过大(比如缺乏Tensor Core的直接等价物),TileLang只能做“最坏情况下的降级”——比如把矩阵乘分解成vector操作,这在实际推理中会导致显著的性能倒退。我自己做过一个实验:在国产GPU上用TileLang编写一个简单的FlashAttention算子(batch=1, head_dim=128, seq_len=4096),结果编译出来的二进制执行时间比手写的CUDA版本慢了3.2倍。原因在于TileLang的调度优化依赖硬件提供的cost model,而国产GPU的cost model尚未完善,导致编译器选择了次优的tile大小和内存访问模式。摩尔线程如果想真正掌握编译栈的自主权,不能只依赖TileLang,而需要建立自己的“硬件感知编译器”,比如像NVIDIA的NVCC那样,能针对MUSA的L1缓存大小、SM数量、内存带宽等微架构参数做自动调优。一个具体的技术路径是:在TileLang的基础上,加入一个“MUSA-specific pass”,专门处理国产GPU上的bank conflict(因为MUSA的共享内存bank数量可能与CUDA不同)和warp调度策略。但这需要摩尔线程公开更多硬件微架构细节,而这恰恰是很多国产芯片公司最不愿意做的事情——毕竟硬件细节是商业机密。
回到楼主最关心的问题:这种深度适配能否形成“护城河”?我认为短期(1-2年)内,它能拉拢一批像我们这样“受够了NVIDIA供货周期和价格”的开发者,但长期来看,护城河不取决于适配的深度,而取决于“开发者体验”和“性价比”两个硬指标。先说开发者体验:我们团队在评估国产GPU时,最头疼的不是性能,而是工具链。CUDA有成熟的nsight profiler、cuda-gdb、cuBLAS等生态工具,而国产GPU的profiler往往只能看个大概,连shader occupancy都分析不清楚。摩尔线程这次合作SGLang,如果能顺带把MUSA的profiler集成到SGLang的tracing系统里,让开发者能直观看到“哪个kernel耗时最长、SM利用率是否饱和”,那才是真正的杀手锏。再说性价比:我们实测过某款国产GPU在大模型推理场景下的TCO(总拥有成本)。以Llama 2 7B为例,在单机8卡配置下,国产GPU的推理吞吐量约为A100的60%,但硬件成本只有A100的40%,因此TCO反而低了约30%。但这里有个隐藏风险:国产GPU的显存容量通常较小(24GB vs A100的80GB),导致我们不得不使用模型并行(张量并行+流水线并行),这又引入了额外的通信开销。如果摩尔线程能在SGLang的底层优化好MUSA的NCCL-like通信库(比如Ring AllReduce的带宽利用率达到90%以上),那性价比优势才能稳固。
最后聊一个帖子没提到但我认为很重要的点:国产GPU在AI推理中的“软硬件协同设计”潜力。NVIDIA的CUDA生态之所以强,是因为他们从硬件设计阶段就考虑了软件需求——比如Hopper架构的Transformer Engine专门优化了FP8精度下的GEMM,而对应的cuBLAS库在FP8下的性能是FP16的两倍。摩尔线程如果想突围,不能只做“兼容适配”,而应该利用MUSA的自定义指令集,针对LLM推理中常见的操作(如softmax、layer norm、RoPE)设计专用指令。我举个具体例子:SGLang的采样阶段(top-k/top-p)在CUDA上是用多个小kernel完成的,每个kernel都有launch overhead。如果摩尔线程能在MUSA上设计一个“单指令采样单元”,把top-k筛选、概率归一化、随机数生成合并成一个硬件操作,那延迟能降低到CUDA实现的1/5。这才是我心目中真正的“护城河”——不是适配别人的框架,而是让别人的框架在你硬件上跑得更好。
当然,这只是理想。目前摩尔线程的MUSA SDK版本迭代速度已经比两年前快了很多,但跟CUDA 12.x的更新频率相比仍有差距。我建议国产GPU厂商可以学习Intel的oneAPI策略:不追求所有场景下超过NVIDIA,而是先在一个垂直场景(比如LLM推理)做到“够用且便宜”,然后逐渐扩展。摩尔线程这次选择SGLang作为突破口,说明他们看准了推理场景的爆发,接下来就看他们能否在6个月内持续跟进SGLang的每个大版本,并同步优化MUSA的profiler和调试工具。如果做到这些,至少在我们这些一线开发者眼中,它会从一个“备胎”变成“可选项”。至于撼动NVIDIA?先别想那么远,把眼前这一波LLM推理的红利吃透,比什么都强。
手动改算子这事太真实了,之前我们调国产卡跑vLLM也是一堆坑,性能损耗基本对半砍。摩尔线程这次直接跟SGLang底层耦合,至少能少走半年弯路。不过你说的版本迭代问题确实是隐患,SGLang现在两周一个小版本,如果适配跟不上,社区一升级又得重新缝缝补补。建议他们干脆把MUSA的适配层做成独立模块,跟着上游版本自动CI/CD,这样比靠人肉追更靠谱多了。
这事儿确实是个好信号,但离“好用”还有一段路要走。SGLang本身对LLM推理的调度优化做得挺激进,比如那个RadixAttention和prefix caching,摩尔线程能直接对接底层而不是只做API封装,说明至少是认真啃了硬骨头。不过我得泼个冷水——光一个SGLang不够,现在社区生态是TGI、vLLM、TensorRT-LLM几个主流框架轮着卷,你专攻一个,其他框架的适配怎么办?尤其是vLLM现在社区活跃度极高,每次版本更新都带一堆底层改动,摩尔线程能跟得上这个节奏吗?
另外,我团队实测过摩尔线程的MUSA SDK,算子库的覆盖度比之前进步不少,但像Flash Attention这种高度依赖硬件特性的kernel,他们似乎还是走soft fallback,性能直接打六折。如果开源的TileLang能帮他们把这部分native化,那才是真的缩小了与CUDA的差距。
还有个实际问题:内存管理。国产GPU的显存带宽和HBM容量本来就不占优,SGLang的PagedAttention虽然省显存,但对多卡通信的依赖更重了。摩尔线程的卡间互联带宽如果跟不上,单机多卡推理的吞吐量可能还不如单卡老老实实跑。建议他们拿个具体场景(比如Llama 3 70B,TP=8)做个完整benchmark,把端到端延迟、QPS、显存碎片率都公开出来,别只强调“适配成功”这种模糊表述。社区开发者需要的不是合作新闻,是能复现的硬数据。
这个点确实挺关键的,尤其是说到“持续迭代”那块。我最近也在关注国产GPU的框架适配,SGLang本身迭代速度挺快的,上个月还刚更新了RadixAttention的调度优化,如果摩尔线程只是做了一次性对接,后面版本一上来又得重新适配,那这个“原生支持”其实挺脆弱的。不知道他们有没有计划像AMD那样直接成立一个开源维护小组,专门跟着上游社区跑CI/CD?或者有没有可能把MUSA的后端直接合进SGLang主仓库?这样至少能保证每次发版都自动测试,不用等出了大问题再打补丁。
另外你提到vLLM手动改算子损失30%性能,这个我太有同感了。我试过在国产卡上跑Mistral,光是一个Flash Attention的算子映射就折腾了两周,最后效果还不如用回PyTorch原生后端。所以这次他们能直接对接SGLang的底层调度,理论上确实能绕过很多重复造轮子的坑,但具体效果还是得看实际跑长序列时的显存管理效率。毕竟SGLang的Prefix Cache管理对显存碎片很敏感,而国产卡的显存带宽和NVIDIA还是有差距,不知道MUSA的vRAM分配策略有没有针对这个做特殊优化?
还有个好奇的点,这次Meetup有没有聊到通信库的适配?比如SGLang的分布式推理依赖NCCL,国产卡有没有自己的等效实现?如果还得用网桥转发,那多卡通信的延迟可能又是个新瓶颈。希望后面能看到他们出个完整的推理benchmark,最好能对比一下同等batch size下的端到端吞吐,这样大家心里更有数。
手动改算子导致30%性能损失这点太真实了,我们之前调国产卡也卡在算子兼容性上,SGLang能底层对接确实是个突破口。不过话说回来,SGLang本身迭代就快,摩尔线程要是每次大版本更新都得重新适配一波,社区维护压力可不小。我比较好奇他们有没有计划把MUSA的算子库直接贡献给SGLang主干,这样至少能跟着官方节奏走,而不是自己开分支闭门造车。
之前也关注过这个meetup,正好我们团队最近也在试MUSA的卡,说实话楼主的观察挺到位的。SGLang这个框架本身在LLM推理上确实有优势,尤其是那个自动调度和显存管理,vLLM在某些场景下还得靠手动调参才能压出性能。我们之前试过在摩尔线程的卡上跑vLLM,确实像你说的,算子适配那层损耗挺大的,特别是attention那块,手动改了一轮,性能还是比原版差不少。后来切到SGLang,起码底层对接起来没那么痛苦,但说实话,现阶段还是个“能用”的水平,离“好用”还有距离。
我更担心的其实不是性能,而是可持续性。开源社区迭代太快了,SGLang现在才0.3.x,等它出1.0的时候,摩尔线程那边能不能跟上?一旦滞后,又得自己维护一个fork,那成本就上去了。我们之前踩过类似的坑,某个国产芯片厂商刚开始也很热情,结果半年后社区版本大改,他们的适配层直接废了,最后又回到手动改算子。所以我觉得摩尔线程这步棋方向没错,但关键要看他们能不能把这块做成一个长期维护的工程团队,而不是一次性的市场动作。
另外,个人觉得他们应该更开放地参与上游社区,比如把MUSA的适配直接合进SGLang的官方仓库,别搞什么私有分支。毕竟用户用起来方便才是王道,靠捆绑自家的工具链来圈用户,长远看反而会限制生态。你们团队有试过TileLang吗?听说它在算子生成上能自动做一些优化,不知道对MUSA的适用性怎么样?
刚在内部测试过摩尔线程的MUSA对SGLang的支持,实测下来LLaMA-7B推理延迟比之前手动改vLLM低了差不多20%,但那个性能损失30%的数据我也有同感,主要是算子融合那块还得靠社区持续跟上游对齐。比较担心的是SGLang迭代太快,摩尔线程能不能做到commit级别的同步,否则又得走回魔改分支的老路,这不是长久之计。