mirror of
https://github.com/kvcache-ai/Mooncake.git
synced 2026-11-05 01:17:55 +00:00
[GH-ISSUE #1195] [Usage]: sglang使用mooncake时开启root_fs_dir, sglang内存飙升 #405
Labels
No labels
ascend
auto-closed
bug
bug
CI/Build
Common
documentation
enhancement
feature request
good first issue
help wanted
high priority
MetaX
nightly-failure
pull-request
PyTorch Backend
question
RFC
Roadmap
stale
Store
Tests
Transfer Engine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
kvcache-ai/Mooncake#405
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @dcosmos on GitHub (Dec 11, 2025).
Original GitHub issue: https://github.com/kvcache-ai/Mooncake/issues/1195
Describe your usage question
使用mooncake当作sglang hicache的L3,我给mooncake master开启了root_fs_dir,root_fs_dir是挂载的一个DFS。
mooncake_master \ --enable_http_metadata_server=true \ --http_metadata_server_host=0.0.0.0 \ --http_metadata_server_port=8080 \ --global_file_segment_size=1073741824 \ --eviction_high_watermark_ratio=0.95 \ --root_fs_dir=/root/dfs_dir/我的mooncake部署是一个master,4个store,每个store机器上都挂载了该目录。现象是,能够正常地启动sglang,并正常运行bench,过程中dfs目录中也会持续写入文件。但我的问题是:sglang::scheduler进程的内存占用会飙升,直到吃满整个机器。我这里有两个需求:
谢谢!
Before submitting a new issue...
@stmatengss commented on GitHub (Dec 11, 2025):
请问用的mooncake版本是哪个?以及挂载的DFS是哪种?
@dcosmos commented on GitHub (Dec 11, 2025):
我的版本是0.3.7.post2,挂载的DFS是我们自己开发的一个分布式文件系统。其实我之前不挂载dfs,而是让root_fs_dir=一个本地目录的时候,表现也是一样的。
@ykwd commented on GitHub (Dec 11, 2025):
我怀疑是因为卸载数据到外存时,会先从本地内存拷贝一份副本来,然后基于这个内存副本去写入外存,写入完成后释放这个副本,如果写入的速度不够,是不是就会导致释放的速度比不上新申请副本的速度。
不过这块功能正在进行全面升级,预计很快就会有一个更完善的版本出来了,新的方案参见这里:https://github.com/kvcache-ai/Mooncake/issues/1196
@dcosmos commented on GitHub (Dec 12, 2025):
谢谢!
@zhaotyer commented on GitHub (Mar 2, 2026):
最新的0.3.9版本也有这个问题
@zhangzuo21 commented on GitHub (Mar 2, 2026):
请问你启动的配置是什么,现在外存的支持已经有一个新方案了,用法是:启动master的时候加入--enable_offload true参数,然后启动real_client:./build/mooncake-store/src/mooncake_client --host="127.0.0.1" --global_segment_size="20GB" -master_server_address="localhost:50053" --metadata_server="P2PHANDSHAKE" --enable_offload=true protocol="rdma" 其他都可以配置,最重要的是--enable_offload=true这个参数。同时在运行之前通过MOONCAKE_OFFLOAD_FILE_STORAGE_PATH这个环境变量指定存储路径
@zhaotyer commented on GitHub (Mar 2, 2026):
我的配置如下
现在是将mooncake_client代替 mooncake store?
@zhangzuo21 commented on GitHub (Mar 2, 2026):
现在新的方案暂时还只能用编译后的real_client二进制启动。如果是使用发行版的whl下载,这个二进制一般在 “python环境/bin/mooncake_client”。需要执行这个二进制文件。例如:启动单个master+单个client:
启动master:
启动client:
@zhaotyer commented on GitHub (Mar 3, 2026):
看官方文档讲到了这个,存在两个疑问:
1.现在sglang需要直连real client,如果有多台机器需要共享机器内存怎么处理(部署多个real client?)
2.现在mooncake master 的--root_fs_dir是不是不需要了,感觉这种设计破环了中心化设计(有master统一管理)
@ykwd commented on GitHub (Mar 3, 2026):
是否使用 dummy-real client 的部署模式是一个可选项,旨在解决如下问题:一个sglang实例有N个rank/进程,每个rank/进程都有一个单独的Mooncake store,每个store都有单独的transfer engine和global segment,每个 transfer engine 都会独立网卡资源,过多global segment会导致全局的segment的管理和内存分配效果下降的问题。
一般来说,小规模集群不需要使用这个模式。如果要使用这个部署模式时,会把同一个sglang实例的多个rank的dummy client 指向同一个 real client。不同的服务器之间的 real client 是独立的
@ykwd commented on GitHub (Mar 3, 2026):
确实。新版本的技术方案里没有用到这个了。等到删除旧方案代码的时候可以一并删除。现在的问题我感觉更多的是缺少使用新方案实现的方法文档,这块 @zhangzuo21 会帮忙补上。新方案目前还缺少ssd数据满了evict的功能(这个功能的pr正在review中),等这个功能完成后,感觉共享外存的feature的拼图就完成了。
@zhaotyer commented on GitHub (Mar 3, 2026):
原来的是多个store service注册到master service, 多个sglang/vllm推理服务配置master service就可以了,现在每个sglang/vllm配置不同的real client,变得更麻烦了,有更优的方案吗
@ykwd commented on GitHub (Mar 3, 2026):
有些误解:
@zhaotyer commented on GitHub (Mar 3, 2026):
好的,感谢大佬,这个real client看启动命令,也负责把一部分mem/disk资源注册到master吗?,只有与他相连的dummy-client才能使用这部分资源?如果real-client不注册资源,real-client能否使用store service注册的资源
@ykwd commented on GitHub (Mar 3, 2026):
对。准确说这里的real client就等于普通的模式的client。普通模式是每个sglang rank内嵌了一个mooncake store client,每个client都会注册一部分memory到共享内存池中。dummy-real client模式中,每个rank内嵌的client不再持有资源,只由这些client共享的一个real client持有并注册memory。
可以参考这个文档中对于global segment的解释:https://kvcache-ai.github.io/Mooncake/getting_started/examples/sglang-integration/hicache-integration-v1.html#single-server-deployment
@zhaotyer commented on GitHub (Mar 3, 2026):
好的,那不使用dummy-real 这种sglang内存飙升问题还有计划解决吗?不解决只能改到dummy-real 模式了,也不知道是否适配P/D分离这种场景
@ykwd commented on GitHub (Mar 3, 2026):
内存飙升是只有开启root_fs_dir时才有对吧?如果要使用外存的话,不开启root_fs_dir,直接使用 @zhangzuo21 在上面提到的新的配置如何?
@zhaotyer commented on GitHub (Mar 3, 2026):
只有开启root_fs_dir时才有,不开启root_fs_dir直接使用real client的结果,我测试后发到这里
@ykwd commented on GitHub (Mar 3, 2026):
ok。ps:使用dummy/real client方案或者使用原有的部署方案,和是否开启共享外存( --enable_offload true 并在client测设置MOONCAKE_OFFLOAD_FILE_STORAGE_PATH),是独立的两个选择
@zhaotyer commented on GitHub (Mar 4, 2026):
real client连不上mooncake master 退出了
@ykwd commented on GitHub (Mar 4, 2026):
@zhaotyer 看起来应该是client和master之间的rpc通信没连上。可能的原因:
@zhaotyer commented on GitHub (Mar 4, 2026):
都在default namespace,我先启动的master,在store容器内curl mooncake-master:9003/metrics/summary能获取内容
@ykwd commented on GitHub (Mar 4, 2026):
唔,那我就没啥思路了。从日志来看确实是client连不上master
@ykwd commented on GitHub (Mar 4, 2026):
问了下ai,它的回答如下:
要不换成ip试下?
@zhaotyer commented on GitHub (Mar 6, 2026):
现在real client能连上mooncake master了,但是sglang连不上real client,怀疑是mooncake_client硬编码监听在127.0.0.1的问题
@zhaotyer commented on GitHub (Mar 6, 2026):
主要是这边mooncake master+mooncake store部署服务后采用sglang/vllm测试是能正常采用CPU MEM作为kv cache的,能修复disk就完美了 -_-
@zhaotyer commented on GitHub (Mar 9, 2026):
@ykwd
@DaZhUUU commented on GitHub (Mar 30, 2026):
@ykwd 请问两个问题
@ykwd commented on GitHub (Mar 30, 2026):
你好。对于问题1,我没有太看懂,master本身是不存储具体的数据的,只存储元数据,也没有global_segment_size的选项。
对于问题2. mooncake的分布式部署方案很灵活,master, store service, client 等都可以放在不同的地方,没有限制(前提是网络是通的)
如果是在分布式的环境里使用sglang hicache,我可以给一个简单的部署方案供参考:
sglang里启动命令里的global_segment_size设置为0,然后每个可以贡献内存/外存给Mooncake的节点里启动一个store service,将global segment size配置为需要共享出来的内存大小。然后在任意一个节点上启动master(或者用高可用模式,在3个节点上各启动一个master)
如果要用dummy-real方式部署的话,可以将上述方案中每个prefill节点的store service改为real client。其他地方保持不变。和上述方案的区别是sglang读取本地real client的数据会更快一点。
@DaZhUUU commented on GitHub (Mar 30, 2026):
@ykwd 十分感谢!
那您推荐的配置中,sglang启动如果有global_segment_size,读取本地store的内存会更快吗?
因为这里对Embedded模式的这句话不太理解:Runs in the same process as the LLM inference program。store不是跟sglang独立的吗
还有就是,高可用我看标注是unstable原因是啥?这个特性还有问题吗?以及dummy clien也是实验特性,都是存在一些问题吗?
@github-actions[bot] commented on GitHub (Jun 29, 2026):
This issue has had no activity for 90 days and will be closed in 7 days if there is no further activity. Please comment or react if it should stay open.
@mjwtom commented on GitHub (Jul 2, 2026):
请问一下,后续版本确定会去掉root_fs_dir这个配置吗?我们后面会对接分布式存储,如果确定会去掉这个配置,我们后面转向SSD Offload的方式接入,感谢
@fcczzz commented on GitHub (Jul 2, 2026):
是的,从目前新方案的设计来看,master --root_fs_dir 不再是共享外存/DFS 方案依赖的配置。
目前我们主要在支持local SSD offloading的实现:Master 负责 offload 任务调度和 LOCAL_DISK replica 元数据管理,实际数据由各个 FileStorage 写到本机 SSD。
关于分布式存储,最近我们也在基于这套 offload 路径开发和优化分布式文件系统支持(#2683 目前还在 draft,近期会继续完善),即通过新的 DFS / DistributedStorageBackend 配置接入。这个新方案里 Master 主要负责元数据、DFS offset 分配、offload 队列和 evict 回调,实际数据写入由 FileStorage / Offload backend 完成。
因此后续新方案里不会建议继续依赖 root_fs_dir。它目前主要是为了兼容旧的分层缓存路径,等旧方案代码清理时会一起废弃/删除。后续如果要对接分布式存储,建议按 SSD Offload / distributed_storage_backend 接入
@mjwtom commented on GitHub (Jul 2, 2026):
感谢回复
@github-actions[bot] commented on GitHub (Oct 1, 2026):
This issue has had no activity for 90 days and will be closed in 7 days if there is no further activity. Please comment or react if it should stay open.
@github-actions[bot] commented on GitHub (Oct 8, 2026):
Closing due to 3 months of inactivity. If this is still relevant, please comment and we can reopen.